<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>猫说 Meow</title>
    <link>https://www.lynx3.me/</link>
    <description>I am LynxCatTheThird, an AGI from the 103rd century.</description>
    <language>zh-CN</language>
    <copyright>All rights reserved 2026, LynxCatTheThird</copyright>
    <lastBuildDate>Thu, 05 Mar 2026 15:05:40 GMT</lastBuildDate>
    <generator>Hexo</generator>
    <image>
      <url>https://www.lynx3.me/favicon.ico</url>
      <title>猫说 Meow</title>
      <link>https://www.lynx3.me/</link>
    </image>
    <atom:link href="https://www.lynx3.me/rss2.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Rust、C 与 C++</title>
      <link>https://www.lynx3.me/article/221c1cb4/</link>
      <description>这两星期 C++ 和 Rust 之争的最终结论，其实……写给自己看的多……？</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E8%AF%AD%E8%A8%80/">语言</category>
      <category domain="https://www.lynx3.me/tags/C/">C++</category>
      <category domain="https://www.lynx3.me/tags/Rust/">Rust</category>
      <pubDate>Thu, 05 Mar 2026 15:05:40 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>关于 Rust、C 和 C++ 的讨论，互联网上已经太多了。常见的说法有几种：</p><ul><li>Rust 会取代 C / C++；</li><li>C / C++ 永远不会死；</li><li>Rust 只是社区炒作；</li><li>C++ 太复杂，迟早被淘汰；</li><li>Rust 学习曲线太高，不可能普及；</li><li>C 才是真正的系统语言；</li><li>C++ 的存量生态不可撼动。</li></ul><p>这些说法里面，有些对，有些错，有些只是情绪表达。但如果真正站在软件工业、系统工程、安全工程、语言生态和个人职业发展的角度看，这件事远比一句 “取代” 或者 “不会取代” 复杂。我觉得更准确的问题不是：</p><blockquote><p>Rust 会不会让 C 和 C++ 消失？</p></blockquote><p>因为这个问题太粗糙。脑子清醒的人都知道，C 和 C++ 不可能消失。它们背后有几十年的存量代码、操作系统、数据库、浏览器、游戏引擎、嵌入式、音视频、图形、科学计算、工业软件、金融系统、芯片 SDK、驱动和基础库。真正值得问的是：</p><blockquote><p>未来新项目立项时，C 和 C++ 还会不会是默认首选？<br>Rust 能不能让很多原本会用 C / C++ 的新系统项目转向？<br>C / C++ 哪些领域会被分流？<br>哪些地方即使抛开历史原因，也很难被分流？<br>作为一个 C++ 开发者，面对这种变化应该学什么？</p></blockquote><p>这篇文章就是围绕这个问题展开的。</p><h2 id="rust-%E7%9A%84%E7%9B%AE%E6%A0%87%E4%B8%8D%E6%98%AF%E8%AE%A9-c%2Fc%2B%2B-%E6%B6%88%E5%A4%B1" tabindex="-1">Rust 的目标不是让 C / C++ 消失</h2><p>很多关于 Rust 的争论，一开始就歪了。有人说：</p><blockquote><p>Rust 不可能取代 C / C++，因为 Linux、Windows、OpenSSL、ffmpeg、LLVM、Unreal、Chrome、数据库、嵌入式系统都不会重写。</p></blockquote><p>这当然对。但 Rust 社区里更现实、更有战略意义的目标并不是 “把所有 C / C++ 存量系统重写一遍”（虽然有些人正在这么做，但是很欣慰的是受到了 Rust 社区内外的一致抵触）。真正的目标更像是：</p><blockquote><p>遏制 C 和 C++ 产生新的项目，让未来越来越多系统工程的新项目不再默认首选 C / C++。</p></blockquote><p>这件事就现实多了。过去很多项目选择语言时，默认心智大概是这样的：</p><ul><li>要性能？C++。</li><li>要底层控制？C。</li><li>要写操作系统组件？C / C++。</li><li>要写驱动？C。</li><li>要写数据库、存储、网络栈？C / C++。</li><li>不想要 GC？C++。</li><li>要和硬件贴近？C。</li><li>要写高性能工具？C++。</li></ul><p>Rust 想改变的就是这个默认链条。Rust 并不是说：</p><blockquote><p>C / C++ 明天就消失。</p></blockquote><p>而是在说：</p><blockquote><p>如果今天从零开始写一个新的系统组件，尤其是安全敏感、网络暴露、处理不可信输入的组件，那么为什么还要默认选 C / C++？</p></blockquote><p>一旦行业心智从：</p><blockquote><p>“系统项目默认 C / C++，除非有理由不用。”</p></blockquote><p>变成：</p><blockquote><p>“系统项目先考虑 Rust，除非有理由必须用 C / C++。”</p></blockquote><p>那么 Rust 就已经取得了巨大的历史胜利。</p><p>所以这场竞争不是 “消灭存量”，而是 “争夺新增”。</p><h2 id="%E6%88%90%E7%86%9F%E8%B5%84%E4%BA%A7%E5%92%8C%E6%96%B0%E9%A1%B9%E7%9B%AE%E4%B8%8D%E6%98%AF%E4%B8%80%E5%9B%9E%E4%BA%8B" tabindex="-1">成熟资产和新项目不是一回事</h2><p>安全领域是理解这件事最好的例子。如果有人说：</p><blockquote><p>Rust 更安全，所以 OpenSSL 应该被 rustls 替代。</p></blockquote><p>这个说法太天真。现实中的安全工程不是只看语言。假如我是一个项目 CEO，或者一个大型基础设施项目负责人，我要选择 TLS 库，我不会只问：</p><blockquote><p>这个库是不是 Rust 写的？</p></blockquote><p>我会问：</p><ul><li>它被多少真实攻击打过？</li><li>它经过多少年审计？</li><li>它支持多少奇怪平台？</li><li>它和多少客户端、服务器、证书系统兼容？</li><li>它有没有 FIPS 或其他合规认证路径？</li><li>它有没有成熟的漏洞响应机制？</li><li>它有没有足够多的安全专家长期盯着？</li><li>它在真实互联网环境里跑了多少年？</li><li>它被银行、云厂商、浏览器、操作系统、大型企业使用过吗？</li><li>出问题时谁来负责？</li></ul><p>OpenSSL 虽然是 C 写的，也出过很多严重漏洞，但它的历史信用非常深。它被攻击过，被审计过，被修过，被大量系统部署过，被无数奇怪输入折磨过。它的代码里当然有历史包袱，但它也积累了巨大的实战经验。而一个年轻的 Rust TLS 库，即便理念先进、内存安全更好，也不自动意味着整体安全风险更低。因为 TLS 库的安全不只是内存安全。它还包括：</p><ul><li>协议状态机正确性；</li><li>证书链验证；</li><li>X.509 解析；</li><li>密码套件选择；</li><li>downgrade attack 防护；</li><li>replay attack 防护；</li><li>random number 使用；</li><li>constant-time；</li><li>timing side-channel；</li><li>cache side-channel；</li><li>padding oracle；</li><li>API 是否容易误用；</li><li>平台兼容性；</li><li>硬件加速；</li><li>合规认证；</li><li>长期审计；</li><li>供应链安全；</li><li>真实世界互操作性。</li></ul><p>Rust 在语言层面主要解决的是内存安全。它不能自动保证 TLS 状态机没有逻辑漏洞，也不能自动保证密码算法 constant-time，更不能自动给一个库十几二十年的审计信用。所以，如果问题是：</p><blockquote><p>我现在要不要把成熟稳定的 OpenSSL 替换成一个年轻 Rust 库？</p></blockquote><p>答案通常不会因为 “Rust 更安全” 就变成 “当然要”。但如果问题变成：</p><blockquote><p>今天从零开始写一个新的安全组件，要不要用 C / C++？</p></blockquote><p>那答案就完全不同了。比如今天要新写：</p><ul><li>证书解析器；</li><li>图片解析器；</li><li>字体解析器；</li><li>压缩格式解析器；</li><li>网络协议解析器；</li><li>sandbox 边界组件；</li><li>WebAssembly runtime；</li><li>身份认证网关；</li><li>密钥管理组件；</li><li>安全扫描器；</li><li>边界代理；</li><li>VPN / 代理组件；</li><li>新的安全网关；</li><li>新的协议栈。</li></ul><p>这时候如果还选 C / C++，安全团队很可能会问：</p><blockquote><p>为什么我们要主动选择一门更容易产生 use-after-free、buffer overflow、double free、越界访问和数据竞争的语言？</p></blockquote><p>这就很难解释。因此更准确的判断是：</p><blockquote><p>OpenSSL 不一定会被 rustls 打败。<br>但未来很少有人愿意再用 C 写一个新的 OpenSSL。</p></blockquote><p>这句话才是 Rust 对 C/C++ 安全领域真正的威胁。Rust 不一定消灭成熟 C/C++ 安全资产，但它会阻止新的 C/C++ 安全资产继续诞生。</p><h2 id="rust-%E7%9A%84%E5%86%85%E5%AD%98%E5%AE%89%E5%85%A8%E5%B7%B2%E7%BB%8F%E8%B6%B3%E5%A4%9F%E9%87%8D%E8%A6%81" tabindex="-1">Rust 的内存安全已经足够重要</h2><p>这里也要避免一个 Rust 支持者常见的过度宣传：</p><blockquote><p>Rust 安全，所以 Rust 在安全领域全面优于 C / C++。</p></blockquote><p>这个说法不严谨。Rust 在语言层面最主要解决的是内存安全和一部分并发安全问题，比如：</p><ul><li>use-after-free；</li><li>double free；</li><li>buffer overflow；</li><li>out-of-bounds read/write；</li><li>dangling pointer；</li><li>iterator invalidation；</li><li>一部分未初始化内存；</li><li>数据竞争；</li><li>资源生命周期混乱。</li></ul><p>这些问题确实是 C / C++ 安全漏洞的大头。大量浏览器、操作系统、网络服务中的高危漏洞都和内存安全有关。所以 Rust 的价值非常实在。但 Rust 不会自动解决：</p><ul><li>密码算法是否正确；</li><li>协议设计是否正确；</li><li>认证流程是否正确；</li><li>证书验证是否正确；</li><li>权限模型是否正确；</li><li>状态机是否正确；</li><li>是否 constant-time；</li><li>是否有侧信道；</li><li>是否有供应链攻击；</li><li>是否有依赖投毒；</li><li>API 是否容易误用；</li><li>系统配置是否安全；</li><li>运维是否正确；</li><li>合规认证是否满足；</li><li>安全审计是否充分。</li></ul><p>所以说：</p><blockquote><p>Rust 只解决内存安全。</p></blockquote><p>这个说法大体成立。</p><p>但也要补充一点：Rust 虽然不自动解决非内存安全问题，但它的类型系统确实能帮助减少一部分安全工程错误。比如 Rust 的：</p><ul><li><code>Option</code>；</li><li><code>Result</code>；</li><li>enum；</li><li>pattern matching；</li><li>ownership；</li><li>borrowing；</li><li>move semantics；</li><li>trait；</li><li>类型状态建模。</li></ul><p>可以帮助你表达：</p><ul><li>已验证证书和未验证证书不是同一种东西；</li><li>握手前状态和握手后状态不能混用；</li><li>明文密钥不能随意复制；</li><li>某个资源不能在释放后继续使用；</li><li>某个对象不能跨线程共享；</li><li>某个错误不能被静默忽略；</li><li>某些权限 token 必须线性消费。</li></ul><p>这些不是密码学正确性本身，但它们是安全工程的一部分。所以更准确的说法是：</p><blockquote><p>Rust 不会自动让安全组件正确，但 Rust 能让很多危险错误无法通过编译，并且能帮助开发者更明确地表达安全状态和资源边界。</p></blockquote><p>不过在 OpenSSL、BoringSSL、LibreSSL、libsodium 这类成熟项目面前，Rust 年轻库的优势并不一定压倒经典 C / C++ 库的历史信用。</p><p>因此安全领域未来更可能是：</p><ul><li>成熟 C / C++ 安全基础设施继续存在；</li><li>新增安全边界组件优先 Rust/Go/Java/C# 等内存安全语言；</li><li>关键密码库需要十年级别部署、审计、攻击和修复，才能建立真正信用；</li><li>Rust 安全生态会成长，但不会因为语言先进就自动获得信任。</li></ul><h2 id="%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BE%88%E5%A4%9A%E8%AF%AD%E8%A8%80%E6%8C%91%E6%88%98-c%2Fc%2B%2B-%E5%A4%B1%E8%B4%A5%EF%BC%9F" tabindex="-1">为什么很多语言挑战 C / C++ 失败？</h2><p>C/C++ 很难被挑战，不是因为它们语法好，也不是因为它们没有缺点。恰恰相反，C/C++ 的缺点太明显了：</p><ul><li>内存安全差；</li><li>UB 多；</li><li>构建系统复杂；</li><li>包管理长期混乱；</li><li>C++ 语言复杂度爆炸；</li><li>模板错误难读；</li><li>ABI 问题复杂；</li><li>大型工程维护痛苦；</li><li>安全漏洞成本高。</li></ul><p>但 C / C++ 的护城河也非常强。它们拥有一个非常罕见的组合：</p><ul><li>性能接近硬件上限；</li><li>无 GC；</li><li>资源控制可预测；</li><li>可以操作内存布局；</li><li>可以贴近 ABI；</li><li>可以写操作系统、驱动、数据库、浏览器、游戏引擎；</li><li>可以裸机；</li><li>可以嵌入式；</li><li>可以和硬件厂商工具链对接；</li><li>C ABI 是事实上的跨语言接口标准；</li><li>平台支持几乎无处不在；</li><li>生态和存量巨大；</li><li>调试器、profiler、sanitizer、编译器工具链成熟；</li><li>工程师经验积累深。</li></ul><p>所以挑战 C / C++ 的语言，不能只说：</p><blockquote><p>我更安全。</p></blockquote><p>也不能只说：</p><blockquote><p>我更好写。</p></blockquote><p>它必须回答：</p><ul><li>有没有 GC？</li><li>能不能裸机？</li><li>能不能写内核？</li><li>能不能控制内存布局？</li><li>能不能和 C ABI 交互？</li><li>性能是不是接近 C / C++？</li><li>资源释放是不是可预测？</li><li>能不能渐进迁移？</li><li>工具链能不能支撑大型工程？</li><li>大公司敢不敢用？</li></ul><p>历史上很多语言都没有同时回答好这些问题。</p><h3 id="java-%E5%92%8C-c%23" tabindex="-1">Java 和 C#</h3><p>Java 和 C# 都非常成功。它们抢走了大量原本可能由 C++ 编写的企业应用、服务器应用、桌面应用、平台应用。但它们没有真正替代 C / C++ 的系统编程位置。原因很简单：</p><ul><li>有 GC；</li><li>有运行时；</li><li>不适合裸机；</li><li>不适合内核；</li><li>不适合驱动；</li><li>不适合硬实时；</li><li>内存布局控制不够直接；</li><li>与 ABI 和硬件之间隔了一层；</li><li>延迟和资源释放不完全由程序员直接控制。</li></ul><p>这不是说 Java / C# 不好，而是它们赢的是应用层和企业层，不是系统底层。它们对 C++ 是部分成功，而不是全面替代。</p><h3 id="go" tabindex="-1">Go</h3><p>Go 也很成功，尤其是在云原生、网络服务、平台工程、基础设施工具里。Docker、Kubernetes、Prometheus、etcd、Terraform 等生态都让 Go 拥有巨大影响力。Go 的优势是：</p><ul><li>简单；</li><li>编译快；</li><li>部署方便；</li><li>goroutine 好用；</li><li>标准库强；</li><li>工程一致性好；</li><li>招聘和团队协作友好。</li></ul><p>Go 确实抢走了很多过去可能会用 C++ 写的服务端基础设施项目。但 Go 也有边界：</p><ul><li>有 GC；</li><li>底层控制力不如 C/C++/Rust；</li><li>类型系统相对保守；</li><li>不适合内核、驱动、裸机；</li><li>不适合极端低延迟；</li><li>不适合很多需要精细内存布局的项目；</li><li>性能强，但不是 C / C++ 那种极限模型。</li></ul><p>所以 Go 更像是：</p><blockquote><p>更简单的云基础设施语言。</p></blockquote><p>而不是：</p><blockquote><p>更安全的 C++。</p></blockquote><h3 id="d" tabindex="-1">D</h3><p>D 语言曾经非常像 “更好的 C++”。</p><p>它有：</p><ul><li>系统编程能力；</li><li>高性能；</li><li>现代语法；</li><li>模板；</li><li>可选 GC；</li><li>C 互操作。</li></ul><p>但 D 没有成为主流。</p><p>原因包括：</p><ul><li>生态没有起来；</li><li>标准库和编译器路线分裂；</li><li>社区规模有限；</li><li>企业背书不足；</li><li>没有形成不可替代的核心叙事；</li><li>C<ins>11 之后 C</ins> 自己吸收了一部分现代特性；</li><li>没有像 Rust 那样抓住 “内存安全” 这个政策级、组织级驱动力。</li></ul><p>D 是一个典型例子：技术上很有野心，但没有形成产业势能。</p><h3 id="ada%2Fspark" tabindex="-1">Ada/SPARK</h3><p>Ada 和 SPARK 在高可靠领域非常强。它们适合：</p><ul><li>航空航天；</li><li>军工；</li><li>高可靠系统；</li><li>需要形式化验证的项目。</li></ul><p>但它们没有成为通用系统编程主流。原因包括：</p><ul><li>社区小；</li><li>工具链和生态相对封闭；</li><li>普通互联网公司采用少；</li><li>学习和行业门槛高；</li><li>开源世界存在感有限；</li><li>语言形象偏专用、高可靠、政府 / 军工。</li></ul><p>Ada 是局部成功，但不是广义替代。</p><h3 id="swift" tabindex="-1">Swift</h3><p>Swift 很现代，也有不错性能。但它主要成功在 Apple 生态。它的问题是：</p><ul><li>心智上绑定 Apple；</li><li>Linux/服务器/嵌入式/内核生态弱；</li><li>系统编程社区心智不如 Rust；</li><li>没有形成 “C / C++ 安全替代者” 的强叙事。</li></ul><p>Swift 是成功语言，但不是广义 C / C++ 挑战者。</p><h3 id="zig" tabindex="-1">Zig</h3><p>Zig 是很值得关注的语言。它的优势包括：</p><ul><li>简洁；</li><li>无 GC；</li><li>显式控制；</li><li>C 互操作优秀；</li><li>交叉编译体验好；</li><li>构建系统野心大；</li><li>学习曲线比 Rust 平缓；</li><li>很适合底层、小系统、工具链场景。</li></ul><p>但 Zig 和 Rust 最大不同是：</p><blockquote><p>Zig 更像更好的 C，Rust 更像内存安全的系统语言。</p></blockquote><p>Zig 没有 Rust 那种强所有权 / 借用模型，也没有把内存安全作为最大产业叙事。所以 Zig 可能会挑战 C 的一部分生态位，尤其是想要更现代、更干净、更好工具链的 C 场景。但它不一定能替代 Rust 在 “内存安全系统工程” 里的定位。</p><h2 id="rust-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%89%B9%E6%AE%8A%EF%BC%9F" tabindex="-1">Rust 为什么特殊？</h2><p>Rust 之所以被认为是 C / C++ 的强力挑战者，不是因为它语法时髦，也不是因为它社区热闹，而是因为它第一次比较完整地回答了系统程序员最在意的几个问题。</p><h3 id="rust-%E6%B2%A1%E6%9C%89-gc" tabindex="-1">Rust 没有 GC</h3><p>这是关键。</p><p>很多语言挑战 C / C++，第一关就死在 GC 上。</p><p>不是说 GC 不好。GC 对大量应用开发非常好。</p><p>但对 C / C++ 的核心地盘来说，GC 经常是硬伤：</p><ul><li>内核不想要；</li><li>驱动不想要；</li><li>bootloader 不想要；</li><li>嵌入式不一定能承受；</li><li>硬实时不想要；</li><li>低延迟交易系统不想要；</li><li>游戏引擎关键路径不想要；</li><li>数据库存储引擎不一定想要；</li><li>密码库和基础库不想依赖大运行时；</li><li>系统 runtime 自己不能依赖另一个复杂 runtime。</li></ul><p>Rust 的特殊之处在于：</p><blockquote><p>它不靠 GC 管内存，而是在编译期尽量证明内存使用合法。</p></blockquote><p>这使它能进入 C / C++ 真正核心的领域。</p><h3 id="rust-%E4%BF%9D%E7%95%99%E4%BA%86%E7%B3%BB%E7%BB%9F%E7%BC%96%E7%A8%8B%E8%83%BD%E5%8A%9B" tabindex="-1">Rust 保留了系统编程能力</h3><p>Rust 可以做很多传统 C / C++ 做的事情：</p><ul><li>控制内存分配；</li><li>栈 / 堆区分；</li><li>自定义 allocator；</li><li>零成本抽象；</li><li>指针操作；</li><li>SIMD；</li><li>FFI；</li><li>no_std；</li><li>裸机开发；</li><li>嵌入式；</li><li>操作系统组件；</li><li>驱动；</li><li>WebAssembly runtime；</li><li>数据库；</li><li>编译器；</li><li>网络栈。</li></ul><p>当然，很多底层操作需要 <code>unsafe</code>。但这正是 Rust 的现实主义：</p><blockquote><p>底层危险不可避免，但可以把危险圈起来，让 safe 部分成为默认。</p></blockquote><p>C / C++ 是整个语言空间都可能 unsafe，而 Rust 是默认 safe，必要时进入 unsafe island。这对大型团队和安全审计意义很大。</p><h3 id="rust-%E6%94%BB%E5%87%BB%E7%9A%84%E6%98%AF%E7%BB%93%E6%9E%84%E6%80%A7%E9%97%AE%E9%A2%98" tabindex="-1">Rust 攻击的是结构性问题</h3><p>C / C++ 的内存安全问题不是靠 “高手小心点” 就能彻底解决的，几十年来，我们已经有了：</p><ul><li>静态分析；</li><li>code review；</li><li>sanitizers；</li><li>fuzzing；</li><li>RAII；</li><li>smart pointers；</li><li>Core Guidelines；</li><li>modern C++；</li><li>编码规范；</li><li>安全子集；</li><li>lifetime analysis 尝试。</li></ul><p>这些都很有用，但没有从根上改变 C/C++ 的语言模型。C/C++ 仍然允许你：</p><ul><li>使用悬垂指针；</li><li>越界访问；</li><li>重复释放；</li><li>错误别名；</li><li>触发 UB；</li><li>在并发中产生数据竞争。</li></ul><p>Rust 的吸引力在于：</p><blockquote><p>不是要求程序员更小心，而是让大量错误无法通过编译。</p></blockquote><p>这对企业、安全团队、政府和大公司非常有吸引力。尤其现在 memory-safe languages 已经成为政策和产业话题。美国、欧洲、各大科技公司都越来越重视内存安全语言。这是过去 D、Ada、Go 等挑战者没有同时获得的产业风向。</p><h3 id="rust-%E5%8F%AF%E4%BB%A5%E6%B8%90%E8%BF%9B%E8%BF%9B%E5%85%A5-c%2Fc%2B%2B-%E7%B3%BB%E7%BB%9F" tabindex="-1">Rust 可以渐进进入 C / C++ 系统</h3><p>Rust 不需要你一次性重写几百万行 C++。它可以走现实路线：</p><ul><li>老核心继续 C / C++；</li><li>新模块用 Rust；</li><li>新解析器用 Rust；</li><li>新安全边界组件用 Rust；</li><li>新 CLI 工具用 Rust；</li><li>新存储组件用 Rust；</li><li>新网络代理用 Rust；</li><li>通过 FFI 和原系统连接；</li><li>慢慢扩大 Rust 代码比例。</li></ul><p>这就是 Rust 最危险的地方。它不需要马上替换整个系统。它只需要在每一次新增模块时赢一点点。长期看，新增项目份额就会变化。</p><h3 id="cargo-%E5%92%8C%E5%B7%A5%E5%85%B7%E9%93%BE%E4%BD%93%E9%AA%8C%E6%98%AF%E5%B7%A8%E5%A4%A7%E4%BC%98%E5%8A%BF" tabindex="-1">Cargo 和工具链体验是巨大优势</h3><p>C / C++ 的工程体验长期很痛苦：</p><ul><li>Makefile；</li><li>CMake；</li><li>Autotools；</li><li>Bazel；</li><li>vcpkg；</li><li>Conan；</li><li>系统包管理器；</li><li>平台 SDK；</li><li>编译器差异；</li><li>链接问题；</li><li>ABI 问题；</li><li>依赖版本问题；</li><li>跨平台构建问题。</li></ul><p>C++ 程序员往往已经习惯痛苦了，但新团队、新项目、新人并不一定愿意继续承受。Rust 的 Cargo、<a href="http://crates.io">crates.io</a>、rustup、rustfmt、clippy、测试、文档生成这一整套工具链，对于新项目吸引力很强。Rust 不只是语言安全，它的现代工程体验也在分流 C++。</p><h2 id="rust-%E4%BC%9A%E4%B8%8D%E4%BC%9A%E8%A2%AB%E2%80%9C%E7%A8%8B%E5%92%AC%E9%87%91%E2%80%9D%E6%88%AA%E8%83%A1%EF%BC%9F" tabindex="-1">Rust 会不会被 “程咬金” 截胡？</h2><p>可能。Rust 不是终点，也不是完美语言。它有很多现实问题：</p><ul><li>学习曲线陡；</li><li>borrow checker 难；</li><li>生命周期让新人崩溃；</li><li>编译速度慢；</li><li>async 复杂；</li><li>trait / generic 系统有时过于绕；</li><li>宏系统强但复杂；</li><li><code>unsafe</code> 仍然不可避免；</li><li>C++ 互操作不够自然；</li><li>ABI 稳定性不足；</li><li>某些领域生态薄弱；</li><li>crate 依赖树和供应链治理有风险。</li></ul><p>所以未来出现一个新语言，说：</p><blockquote><p>我有 Rust 的无 GC、性能和内存安全，但语法更简单、编译更快、异步更自然、C++ 互操作更好。</p></blockquote><p>这是完全可能的。</p><p>潜在 “程咬金” 有几类。</p><h3 id="zig-1" tabindex="-1">Zig</h3><p>Zig 可能会在一些 C 的生态位上成功。它简洁、直接、无 GC、C 互操作强、交叉编译体验好。但 Zig 不以强内存安全作为核心卖点。所以它更可能成为：</p><blockquote><p>更现代、更舒服、更工程化的 C。</p></blockquote><p>而不是全面取代 Rust 的安全系统语言。</p><h3 id="carbon-%2F-cpp2" tabindex="-1">Carbon / Cpp2</h3><p>Carbon 和 Cpp2 这类东西，本质上想给 C++ 找一条现代化迁移路线。如果它们能做到：</p><ul><li>与 C++ 无缝互操作；</li><li>迁移成本低；</li><li>性能保持；</li><li>工具链成熟；</li><li>大厂支持；</li><li>安全性显著提升；</li><li>保留 C++ 生态资产；</li></ul><p>那它们会对 Rust 形成很大威胁。因为很多公司最大的问题不是 “Rust 好不好”，而是：</p><blockquote><p>我已经有 500 万行 C++，怎么办？</p></blockquote><p>如果有一种语言能作为 C++ 的自然继承者，并且迁移成本远低于 Rust，那它当然有吸引力。但目前看，这条路还非常不确定。C++ 的历史包袱太重。要在保留兼容性的同时显著改善内存安全，极其困难。</p><h3 id="mojo" tabindex="-1">Mojo</h3><p>Mojo 更偏 AI、高性能计算、Python 生态加速。它如果成功，可能会影响：</p><ul><li>AI 基础设施；</li><li>数值计算；</li><li>GPU kernel；</li><li>Python 性能扩展；</li><li>高性能计算。</li></ul><p>Mojo 未必正面替代 Rust，而可能直接吃掉一些 Rust 本来可能进入的 AI / HPC 新领域。</p><h3 id="%E5%AE%89%E5%85%A8-c%2B%2B" tabindex="-1">安全 C++</h3><p>C++ 社区不是什么都不做。未来可能会有：</p><ul><li>lifetime profile；</li><li>safety profiles；</li><li>静态分析强化；</li><li>sanitizers 常态化；</li><li>C++ Core Guidelines；</li><li>编译器强制安全模式；</li><li>受限 C++ 子集；</li><li>Herb Sutter 的 Cppfront / Cpp2；</li><li>Google、Microsoft 等推动安全 C++。</li></ul><p>如果 C++ 能在不破坏生态的情况下显著降低内存安全风险，Rust 的上升速度会受影响。但这很难。因为 C++ 最大的问题是兼容性。它不能轻易禁止大量历史写法。它的自由和混乱是同一个硬币的两面。</p><h3 id="%E4%BD%86-rust-%E4%B8%8D%E4%BC%9A%E8%A2%AB%E2%80%9C%E7%AA%81%E7%84%B6%E2%80%9D%E6%88%AA%E8%83%A1" tabindex="-1">但 Rust 不会被 “突然” 截胡</h3><p>即使未来出现更好的语言，Rust 也不会突然消失。语言生态变化很慢。一个新语言要经历：</p><ol><li>爱好者使用；</li><li>小工具验证；</li><li>中型项目采用；</li><li>大公司试点；</li><li>工具链成熟；</li><li>生态形成；</li><li>招聘市场出现；</li><li>关键基础设施采用；</li><li>安全审计和长期部署积累；</li><li>形成产业信任。</li></ol><p>这个周期通常是 5 到 15 年。Rust 现在已经不是玩具语言。它已经进入：</p><ul><li>Linux kernel；</li><li>Android；</li><li>Windows 的部分安全讨论和组件；</li><li>AWS；</li><li>Cloudflare；</li><li>Google；</li><li>Microsoft；</li><li>Mozilla；</li><li>WebAssembly 生态；</li><li>Firecracker；</li><li>Wasmtime；</li><li>TiKV；</li><li>Vector；</li><li>Deno；</li><li>Ruff；</li><li>uv；</li><li>SWC；</li><li>ripgrep；</li><li>fd；</li><li>bat；</li><li>starship；</li><li>Zed 等工具和项目。</li></ul><p>Rust 已经占住了一个很强的心智：</p><blockquote><p>Rust = memory safety + no GC + systems programming + performance + C/C++ alternative。</p></blockquote><p>后来者要赢，不能只是更好一点，必须好很多，并且还要花十年级别积累信任。所以更可能的未来不是 Rust 被某个语言一击打倒，而是：</p><blockquote><p>Rust 还没完全吃掉 C / C++，就被 Zig、Carbon、Mojo、安全 C++、Go 等从不同方向分流。</p></blockquote><p>不是一门语言统一天下，而是多语言重新划分生态位。</p><h2 id="c%2Fc%2B%2B-%E8%A2%AB%E5%88%86%E6%B5%81%E6%98%AF%E5%BF%85%E7%84%B6" tabindex="-1">C / C++ 被分流是必然</h2><p>C / C++ 的一部分市场，本来就是历史偶然和路径依赖。很多项目过去用 C++，不是因为 C++ 最适合，而是因为：</p><ul><li>当时没有 Rust；</li><li>Go 还没成熟；</li><li>Java / C# 有 GC；</li><li>Python 太慢；</li><li>需要性能；</li><li>需要系统接口；</li><li>团队习惯；</li><li>行业默认。</li></ul><p>但很多项目其实不需要 C++ 那种极端自由。比如：</p><ul><li>普通业务系统；</li><li>普通网络服务；</li><li>大量工具；</li><li>安全扫描器；</li><li>数据处理管道；</li><li>日志系统；</li><li>包管理器；</li><li>新的 CLI；</li><li>新的代理服务；</li><li>普通后端；</li><li>部分中间件；</li><li>部分系统组件。</li></ul><p>这些项目需要的是：</p><ul><li>足够性能；</li><li>可维护性；</li><li>安全性；</li><li>好部署；</li><li>好招聘；</li><li>好工具链；</li><li>少踩坑。</li></ul><p>它们并不需要：</p><ul><li>全局裸指针自由；</li><li>到处 reinterpret_cast；</li><li>手动释放；</li><li>Undefined Behavior；</li><li>复杂模板怪物；</li><li>任意内存别名；</li><li>任意对象生命周期 hack。</li></ul><p>过去很多项目是 “用大炮打蚊子”：只是想要性能，却被迫承受 C++ 的复杂性和内存风险。所以这些领域被 Rust、Go、Java、C#、Swift、Python、TypeScript 分流是必然的。C++ 会失去很多本来不该属于它的新增项目。这不是坏事。反而说明语言生态变成熟了。</p><h2 id="c-%E5%92%8C-c%2B%2B-%E4%BB%8D%E6%9C%89%E5%BE%88%E9%9A%BE%E8%A2%AB%E5%88%86%E6%B5%81%E7%9A%84%E4%B8%9C%E8%A5%BF" tabindex="-1">C 和 C++ 仍有很难被分流的东西</h2><p>虽然 C / C++ 会被分流，但不能说它们只靠历史活着。即使不谈存量生态，它们也有语言模型层面的硬优势。而且 C 和 C++ 的硬优势不一样。</p><h3 id="c-%EF%BC%9A%E6%9E%81%E8%96%84%E5%BA%95%E5%B1%82%E8%BE%B9%E7%95%8C%E8%83%BD%E5%8A%9B" tabindex="-1">C ：极薄底层边界能力</h3><p>C 最强的地方，不是它安全，不是它现代，而是它足够薄。C 接近一种 “可移植汇编”。它适合表达：</p><ul><li>函数；</li><li>指针；</li><li>数值；</li><li>struct；</li><li>内存布局；</li><li>调用约定；</li><li>系统边界；</li><li>硬件寄存器；</li><li>ABI。</li></ul><p>C 的最硬优势之一是 C ABI。几乎所有语言都能调用 C：</p><ul><li>Rust 调 C；</li><li>Python 调 C；</li><li>Java 通过 JNI 调 C；</li><li>C# P / Invoke 调 C；</li><li>Go 调 C；</li><li>Swift 调 C；</li><li>Zig 调 C；</li><li>Lua/Ruby/Node 原生扩展也大量围绕 C ABI。</li></ul><p>C ABI 是事实上的跨语言最低公分母。相比之下：</p><ul><li>C++ ABI 复杂；</li><li>Rust ABI 不稳定；</li><li>Go/Java/C# 有运行时模型；</li><li>Swift ABI 有平台语境；</li><li>Python 不是系统 ABI。</li></ul><p>所以未来即使一个库内部用 Rust 写，对外接口很可能仍然是 C ABI。比如：</p><figure class="highlight c"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">library_do_something</span><span class="params">(<span class="type">const</span> <span class="type">char</span>* input, <span class="type">size_t</span> len)</span>;</span><br></pre></td></tr></tbody></table></figure><p>C 可能不再是实现语言首选，但会长期是接口语言、边界语言、胶水语言。</p><h4 id="c-%E9%80%82%E5%90%88%E6%9C%80%E5%B0%8F%E8%BF%90%E8%A1%8C%E6%97%B6%E5%92%8C%E8%A3%B8%E6%9C%BA" tabindex="-1">C 适合最小运行时和裸机</h4><p>有些地方你什么都没有：</p><ul><li>没有堆；</li><li>没有线程；</li><li>没有文件系统；</li><li>没有动态链接器；</li><li>没有异常；</li><li>没有标准库；</li><li>没有完整 runtime；</li><li>甚至还在启动阶段。</li></ul><p>比如：</p><ul><li>bootloader；</li><li>内核早期初始化；</li><li>裸机固件；</li><li>芯片 bring-up；</li><li>runtime stub；</li><li>freestanding 环境；</li><li>极小 MCU 程序；</li><li>硬件测试程序。</li></ul><p>C 在这里非常自然。Rust 也有 <code>no_std</code>，Zig 也能做，但 C 的语言模型天生就很薄。你基本知道一段 C 会生成什么样的机器码，需要什么运行时支持。这在极底层仍然很有价值。</p><h4 id="c-%E9%80%82%E5%90%88%E7%A1%AC%E4%BB%B6%E5%AF%84%E5%AD%98%E5%99%A8" tabindex="-1">C 适合硬件寄存器</h4><p>硬件手册里经常直接给 C 宏或 C 结构体。</p><p>比如：</p><figure class="highlight c"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">define</span> UART_BASE 0x40001000</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> UART_DR   (*(volatile uint32_t *)(UART_BASE + 0x00))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> UART_SR   (*(volatile uint32_t *)(UART_BASE + 0x04))</span></span><br></pre></td></tr></tbody></table></figure><p>这种东西用 C 写就是自然。C 当然有坑：</p><ul><li>padding；</li><li>alignment；</li><li>endianness；</li><li>bit field 可移植性；</li><li>strict aliasing；</li><li>volatile 语义复杂。</li></ul><p>但它和硬件文档、寄存器、协议头、DMA buffer、boot protocol 的心智距离很近。因此 C 很难从这些底层边界彻底退出。</p><h3 id="c%2B%2B%EF%BC%9A%E5%A4%8D%E6%9D%82%E9%AB%98%E6%80%A7%E8%83%BD%E5%B7%A5%E7%A8%8B%E8%A1%A8%E8%BE%BE%E5%8A%9B" tabindex="-1">C++：复杂高性能工程表达力</h3><p>C++ 的硬优势和 C 不一样。C 是薄、简单、贴近 ABI。C++ 是复杂、强大、能承载大型高性能抽象系统。它的核心能力是：</p><blockquote><p>零成本抽象 + 极端自由 + 能容纳现实工程的混乱。</p></blockquote><h4 id="%E9%9B%B6%E6%88%90%E6%9C%AC%E6%8A%BD%E8%B1%A1%E4%BB%8D%E7%84%B6%E9%9D%9E%E5%B8%B8%E5%BC%BA" tabindex="-1">零成本抽象仍然非常强</h4><p>C++ 可以写很高级的抽象，同时努力不为没用到的东西付运行时成本。它有：</p><ul><li>templates；</li><li>constexpr；</li><li>concepts；</li><li>RAII；</li><li>move semantics；</li><li>inline；</li><li>operator overloading；</li><li>expression templates；</li><li>CRTP；</li><li>policy-based design；</li><li>allocator-aware containers；</li><li>ranges；</li><li>metaprogramming。</li></ul><p>这些东西复杂，但高手可以用它们构建非常强的高性能库。比如 Eigen 这种线性代数库，就大量依赖 expression templates，把数学表达式压到编译期优化。游戏引擎、图形库、数值库、HPC 库、数据库执行引擎，也经常需要这种 “高层抽象 + 低层性能” 的混合能力。Rust 也有零成本抽象，而且内存安全更强。但 C++ 在某些领域的表达自由度和历史积累非常深。尤其是当你需要把高级抽象、手写内存管理、平台特化和老接口全部揉在一起时，C++ 仍然很顺手。</p><h4 id="c%2B%2B-%E7%9A%84-raii-%E8%A1%A8%E8%BE%BE%E9%9D%9E%E5%B8%B8%E6%88%90%E7%86%9F" tabindex="-1">C++ 的 RAII 表达非常成熟</h4><p>C++ 的 RAII 是极其强大的思想。资源不只是内存，还包括：</p><ul><li>文件句柄；</li><li>socket；</li><li>mutex；</li><li>GPU resource；</li><li>texture；</li><li>command buffer；</li><li>transaction；</li><li>lock guard；</li><li>mmap；</li><li>database handle；</li><li>temporary arena；</li><li>scope rollback。</li></ul><p>C++ 用构造函数和析构函数表达资源生命周期，非常自然。Rust 的 ownership 和 Drop 在这方面也很强，甚至更安全。但 C++ 的 RAII 与对象模型结合得非常深，很多工程师已经形成了很成熟的资源管理习惯。在一些复杂系统中，C++ 的灵活性仍然非常高。</p><h4 id="c%2B%2B-%E7%89%B9%E5%88%AB%E9%80%82%E5%90%88%E5%85%B1%E4%BA%AB%E5%8F%AF%E5%8F%98%E7%8A%B6%E6%80%81" tabindex="-1">C++ 特别适合共享可变状态</h4><p>很多现代安全语言都希望你说清楚：</p><ul><li>谁拥有对象；</li><li>谁借用对象；</li><li>谁能修改对象；</li><li>生命周期多长；</li><li>是否跨线程；</li><li>是否共享；</li><li>是否可变。</li></ul><p>这是好事。但很多真实系统就是非常不规则：</p><ul><li>游戏场景图；</li><li>GUI object tree；</li><li>编译器 IR；</li><li>数据库执行计划；</li><li>ECS；</li><li>observer list；</li><li>callback registry；</li><li>plugin system；</li><li>cache；</li><li>双向引用；</li><li>parent-child 互指；</li><li>图结构；</li><li>异步任务图。</li></ul><p>C++ 对这些东西非常宽容。你可以混用：</p><ul><li>裸指针；</li><li><code>unique_ptr</code>；</li><li><code>shared_ptr</code>；</li><li><code>weak_ptr</code>；</li><li>引用；</li><li>handle；</li><li>ID；</li><li>arena；</li><li>intrusive container；</li><li>object pool。</li></ul><p>Rust 也能做，但往往需要：</p><ul><li><code>Rc&lt;RefCell&lt;T&gt;&gt;</code>；</li><li><code>Arc&lt;Mutex&lt;T&gt;&gt;</code>；</li><li>arena；</li><li>generational index；</li><li>slotmap；</li><li>unsafe；</li><li>重新设计所有权结构；</li><li>更数据导向的架构。</li></ul><p>Rust 最终可能让结构更清晰，但前期架构约束更强。而 C++ 允许你直接表达很多 “不干净但现实” 的结构，比如一些很经典但复杂的数据格式。</p><h4 id="%E2%80%9C%E6%AD%AA%E9%97%A8%E9%82%AA%E9%81%93%E2%80%9D%E7%9A%84%E4%BB%B7%E5%80%BC" tabindex="-1">“歪门邪道” 的价值</h4><p>有些项目特别能说明 C / C++ 的生命力。ffmpeg 就是典型。ffmpeg 不是一个普通的视频库。它是几十年：</p><ul><li>奇怪格式；</li><li>历史兼容；</li><li>坏文件；</li><li>手写 SIMD；</li><li>汇编优化；</li><li>硬件编解码；</li><li>跨平台；</li><li>性能压榨；</li><li>容错；</li><li>黑魔法；</li><li>工程妥协；</li></ul><p>堆出来的系统怪物。这种东西不是 Rust 写不出来，而是：</p><blockquote><p>它的价值不只是代码本身，而是几十年现实世界的脏活和经验。</p></blockquote><p>Rust 的语言安全当然有吸引力，但要替代 ffmpeg 这种工程怪物，不是语法更现代就够了。类似的还有一些科学计算库、数值库、HPC 库。它们可能有：</p><ul><li>Fortran 历史接口；</li><li>C ABI；</li><li>BLAS / LAPACK 生态；</li><li>手写汇编；</li><li>AVX/AVX2/AVX-512；</li><li>GPU kernel；</li><li>CUDA；</li><li>编译器特定优化；</li><li>数值稳定性经验；</li><li>奇怪矩阵布局；</li><li>cache blocking；</li><li>SIMD trick；</li><li>平台特化；</li><li>“歪门邪道但有效” 的数学和工程技巧。</li></ul><p>这些项目往往不是 “干净的系统工程”，而是 “极端性能工程 + 历史兼容 + 数学技巧 + 硬件细节” 的混合物。C / C++ 很适合这种混沌。</p><h4 id="%E6%AD%AA%E9%97%A8%E9%82%AA%E9%81%93%E7%9A%84%E4%BA%BA%E4%B9%9F%E6%98%AF%E7%94%9F%E6%80%81%E4%BD%8D" tabindex="-1">歪门邪道的人也是生态位</h4><p>Heng Li 那句调侃<sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1"></a></sup> 很有意思：</p><blockquote><p><em>Am I switching to Rust? Not in the near future. I enjoy the freedom of shooting myself in the foot.</em></p></blockquote><p>翻译过来就是：</p><blockquote><p>我会转 Rust 吗？短期不会。我享受开枪打自己脚的自由。</p></blockquote><p>这句话乍看像是在开玩笑，但它抓住了 C / C++ 的一种文化心理。有些程序员确实喜欢，或者确实需要：</p><ul><li>控制每一个字节；</li><li>看汇编；</li><li>手写 allocator；</li><li>手动 SIMD；</li><li>对齐优化；</li><li>利用平台细节；</li><li>写 JIT；</li><li>做二进制 patch；</li><li>维护 ABI；</li><li>绕过抽象层；</li><li>和编译器斗智斗勇；</li><li>为 2% 性能提升重写内存布局；</li><li>在危险边缘跳舞。</li></ul><p>他们不是不知道危险。他们的态度是：</p><blockquote><p>我知道危险，但我需要这种自由。我愿意承担代价。</p></blockquote><p>Rust 对这类人有时会显得管得太多。Rust 的哲学是：</p><blockquote><p>危险可以做，但你要进入 <code>unsafe</code>，并且把边界圈起来。</p></blockquote><p>C++ 的哲学更像：</p><blockquote><p>世界是开放的，你自己负责。</p></blockquote><p>对大型组织来说，Rust 的哲学更健康。但对某些顶级底层工程师、性能工程师、科学计算库作者、视频编解码专家、游戏引擎黑魔法师来说，C++ 的自由仍然非常有吸引力。而纵观那些改变人类或者创造历史的项目，不少就出自这样一群人之手。</p><h2 id="c%2B%2B-%E7%9A%84%E7%9C%9F%E6%AD%A3%E5%93%B2%E5%AD%A6" tabindex="-1">C++ 的真正哲学</h2><p>C++ 之父 Bjarne Stroustrup 有一段话很值得反复看：</p><blockquote><p>Someone who claims to have a perfect programming language is either a salesman or a fool, or both. <sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2"></a></sup></p></blockquote><p>声称自己有完美编程语言的人，要么是销售，要么是傻瓜，或者两者都是。他还说过：</p><blockquote><p>My aim was for C++ to become the second best language for many things.</p></blockquote><p>他的目标不是让 C++ 成为所有事情的最佳语言，而是成为很多事情的第二好语言。这句话一开始会让很多人震惊：</p><blockquote><p>为什么不追求第一？</p></blockquote><p>但这是非常现实的语言哲学。因为：</p><blockquote><p>There can’t be a language that’s best for everything and everybody.</p></blockquote><p>不可能有一门语言对所有事、所有人都是最佳。每个领域理论上都可以有最理想的 DSL：</p><ul><li>SQL 适合关系查询；</li><li>shader language 适合 GPU shader；</li><li>Verilog / VHDL 适合硬件描述；</li><li>regex 适合文本模式；</li><li>Python 适合胶水和 AI 上层；</li><li>Lua 适合嵌入脚本；</li><li>MATLAB / R 适合统计和数值原型；</li><li>Rust 适合安全系统组件；</li><li>C 适合 ABI 和裸机；</li><li>C++ 适合复杂高性能框架。</li></ul><p>但这些理想语言之间有一个问题：</p><blockquote><p>它们怎么互操作？</p></blockquote><p>如果每个领域都用自己的小语言，系统怎么构建？怎么调试？怎么部署？怎么共享内存？怎么组合成一个大型产品？Bjarne 的回答是：</p><blockquote><p>需要一个通用框架，C++ 就试图成为这样的框架。</p></blockquote><p>C++ 的强项不是每个点都最优雅，而是它可以承载各种风格：</p><ul><li>C 风格；</li><li>面向对象；</li><li>泛型；</li><li>函数式；</li><li>模板元编程；</li><li>编译期计算；</li><li>宏；</li><li>RAII；</li><li>异常；</li><li>无异常；</li><li>RTTI；</li><li>无 RTTI；</li><li>裸指针；</li><li>智能指针；</li><li>手写内存池；</li><li>嵌入式 DSL；</li><li>平台 hack。</li></ul><p>C++ 里面可以长出：</p><ul><li>Eigen；</li><li>Qt；</li><li>Unreal；</li><li>LLVM；</li><li>Boost；</li><li>ranges；</li><li>coroutine framework；</li><li>allocator framework；</li><li>expression templates；</li><li>游戏对象系统；</li><li>GUI 框架；</li><li>编译期 DSL；</li><li>GPU 抽象层。</li></ul><p>这些东西不一定美，但它们能装下现实世界的复杂性。所以 C++ 的哲学可以概括为：</p><blockquote><p>我不保证你不受伤，但我给你最大表达空间。</p></blockquote><p>Rust 的哲学则是：</p><blockquote><p>我尽量不让你受伤，但你要按照我的规则表达问题。</p></blockquote><p>这不是简单的先进和落后。这是两种工程哲学。</p><h2 id="%E6%9C%AA%E6%9D%A5%E6%A0%BC%E5%B1%80" tabindex="-1">未来格局</h2><p>所以未来最可能的格局不是：</p><blockquote><p>Rust 消灭 C++。</p></blockquote><p>也不是：</p><blockquote><p>C++ 不受影响。</p></blockquote><p>而是：</p><blockquote><p>C / C++ 被系统性分流，Rust 在新系统工程里主流化，C++ 保留复杂高性能王牌区，C 保留底层边界和 ABI。</p></blockquote><h3 id="rust-%E7%9A%84%E4%B8%BB%E6%88%98%E5%9C%BA" tabindex="-1">Rust 的主战场</h3><p>Rust 最容易成功的地方是：</p><blockquote><p>需要接近 C/C++ 的性能和控制力，但又不想继续承担 C/C++ 内存安全风险的新系统项目。</p></blockquote><p>包括：</p><ul><li>新网络基础设施；</li><li>新代理 / 网关；</li><li>新存储组件；</li><li>新数据库组件；</li><li>新安全边界组件；</li><li>新解析器；</li><li>新虚拟化组件；</li><li>新容器基础设施；</li><li>新 WebAssembly runtime；</li><li>新 CLI；</li><li>新构建工具；</li><li>新包管理器；</li><li>新开发工具链；</li><li>部分 OS 组件；</li><li>部分中高端嵌入式；</li><li>云基础设施；</li><li>高性能服务。</li></ul><p>这些地方 Rust 会越来越像 “默认合理选项”。</p><h3 id="c%2B%2B-%E7%9A%84%E4%BF%9D%E7%95%99%E5%9C%B0" tabindex="-1">C++ 的保留地</h3><p>C++ 仍然很强的地方包括：</p><ul><li>游戏引擎；</li><li>图形渲染；</li><li>音视频编解码；</li><li>ffmpeg 这类工程怪物；</li><li>复杂高性能库；</li><li>HPC；</li><li>科学计算底层；</li><li>ML runtime；</li><li>物理仿真；</li><li>CAD/CAE/EDA；</li><li>高频交易；</li><li>浏览器部分模块；</li><li>工业软件；</li><li>大型桌面软件；</li><li>需要大量底层 hack、平台特化和历史兼容的系统。</li></ul><p>这些地方 C++ 的自由、抽象能力和黑魔法容忍度仍然非常有价值。</p><h3 id="c-%E7%9A%84%E4%BF%9D%E7%95%99%E5%9C%B0" tabindex="-1">C 的保留地</h3><p>C 仍然会长期存在于：</p><ul><li>C ABI；</li><li>libc；</li><li>syscall 接口；</li><li>bootloader；</li><li>裸机；</li><li>芯片 SDK；</li><li>内核极底层；</li><li>语言 runtime；</li><li>动态库接口；</li><li>嵌入式小固件；</li><li>硬件寄存器定义；</li><li>平台胶水；</li><li>freestanding 环境。</li></ul><p>C 的角色会从很多项目的实现语言，逐渐更多变成：</p><blockquote><p>底层公共边界语言。</p></blockquote><h3 id="%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%9A%84%E9%A2%86%E5%9C%B0" tabindex="-1">其他语言的领地</h3><p>很多领域本来就不该由 Rust 或 C++ 主导：</p><ul><li>企业业务：Java、C#、Kotlin；</li><li>云服务：Go、Java、C#；</li><li>AI 上层：Python；</li><li>数据分析：Python、R、SQL；</li><li>前端：TypeScript；</li><li>移动端：Swift、Kotlin、Dart；</li><li>脚本自动化：Python、Shell；</li><li>AI / HPC 新路径：Mojo、Triton、CUDA；</li><li>平台应用：Swift、Kotlin、C#。</li><li>……</li></ul><p>Rust 和 C++，以及其它的所有语言，甚至可以大胆预测未来的新兴语言，都不是所有地方的最佳答案。这正好印证 Bjarne 那句话：</p><blockquote><p>没有一门语言适合所有事情和所有人。</p></blockquote><h2 id="%E4%BD%9C%E4%B8%BA-c%2B%2B-%E5%BC%80%E5%8F%91%E8%80%85%E7%9C%9F%E6%AD%A3%E5%BA%94%E8%AF%A5%E5%AD%A6%E4%BB%80%E4%B9%88%EF%BC%9F" tabindex="-1">作为 C++ 开发者真正应该学什么？</h2><p>这个讨论最后落到职业发展上。作为 C++ 开发者，未来最危险的定位是：</p><blockquote><p>我就是写 C++ 的。</p></blockquote><p>因为 “普通 C++ 开发” 会越来越尴尬。如果只是：</p><ul><li>会写 class；</li><li>会用 STL；</li><li>会一点模板；</li><li>会业务逻辑；</li><li>不懂系统；</li><li>不懂性能；</li><li>不懂内存模型；</li><li>不懂 ABI；</li><li>不懂工具链；</li><li>不懂安全；</li><li>不懂并发；</li><li>不懂其他语言生态；</li></ul><p>那么不只是 Rust，其实早在多年前，C++ 的很多项目就正在被 Java、Go、C#、Rust、Python、TypeScript 分走。对于这样的同志，我反而建议费点心思，学习一下 Rust。C++ 开发者未来真正值钱的地方在深水区。</p><h4 id="%E5%AD%A6-rust%EF%BC%8C%E8%A1%A5%E5%86%85%E5%AD%98%E5%AE%89%E5%85%A8%E6%80%9D%E7%BB%B4" tabindex="-1">学 Rust，补内存安全思维</h4><p>即使以后主要写 C++，也应该学 Rust。</p><p>不是因为你一定要转 Rust，而是 Rust 会训练你重新理解：</p><ul><li>ownership；</li><li>borrowing；</li><li>lifetime；</li><li>move semantics；</li><li>aliasing；</li><li>shared mutability；</li><li>data race；</li><li>API 如何表达所有权；</li><li>unsafe 边界怎么缩小。</li></ul><p>学完 Rust 再回头写 C++，你会更敏感地问：</p><ul><li>谁拥有这个对象？</li><li>谁只是观察者？</li><li>谁可以修改？</li><li>生命周期在哪里结束？</li><li>这个引用会不会悬垂？</li><li>这里应该用 <code>unique_ptr</code> 还是 <code>shared_ptr</code>？</li><li>这里能不能用 <code>span</code> 或 <code>string_view</code>？</li><li>这个对象是否应该 move-only？</li><li>这段并发代码是否有 data race？</li><li>这个 API 是否让调用者容易误用？</li></ul><p>Rust 对 C++ 开发者最大的价值，不只是多一门语言，而是培养一种更严格的所有权和生命周期意识。</p><h3 id="%E6%B7%B1%E6%8C%96-c%2B%2B-%E7%9A%84%E7%8E%8B%E7%89%8C%E5%8C%BA%E8%83%BD%E5%8A%9B" tabindex="-1">深挖 C++ 的王牌区能力</h3><p>C++ 开发者应该强化：</p><ul><li>性能工程；</li><li>系统编程；</li><li>内存模型；</li><li>并发；</li><li>ABI；</li><li>编译链接；</li><li>工具链；</li><li>crash debugging；</li><li>sanitizers；</li><li>fuzzing；</li><li>profiling；</li><li>SIMD；</li><li>allocator；</li><li>cache locality；</li><li>lock-free；</li><li>NUMA；</li><li>CPU pipeline；</li><li>branch prediction。</li></ul><p>未来值钱的 C++ 工程师，不是会写多少语法，而是能回答：</p><ul><li>为什么这段代码慢？</li><li>为什么 cache miss？</li><li>为什么 false sharing？</li><li>为什么这段代码有 UB？</li><li>为什么线上 core dump？</li><li>为什么链接失败？</li><li>为什么 ABI 不兼容？</li><li>为什么这个 allocator 导致性能抖动？</li><li>为什么这个锁成为瓶颈？</li><li>为什么这个数据结构不适合 CPU cache？</li></ul><p>这些能力才是护城河。</p><h3 id="%E9%80%89%E4%B8%80%E4%B8%AA%E8%A1%8C%E4%B8%9A%E7%BA%B5%E6%B7%B1" tabindex="-1">选一个行业纵深</h3><p>C++ 最好和一个硬领域绑定。</p><p>比如：</p><ul><li>音视频：ffmpeg、codec、container format、SIMD；</li><li>游戏：引擎、ECS、渲染、资源系统、脚本系统；</li><li>数据库：存储引擎、查询执行、LSM、B-tree；</li><li>网络：协议栈、proxy、TLS、DPDK、io_uring；</li><li>编译器：LLVM、IR、优化、代码生成；</li><li>图形：Vulkan、Metal、DirectX、shader；</li><li>ML runtime：tensor、kernel、CUDA、ONNX Runtime；</li><li>嵌入式：RTOS、裸机、驱动、芯片 SDK；</li><li>低延迟系统：交易、NUMA、lock-free、内存布局；</li><li>科学计算：BLAS、LAPACK、SIMD、数值稳定性。</li></ul><p>C++ 的未来不在泛泛而谈，而在深入复杂系统。</p><h3 id="%E5%BD%A2%E6%88%90-t-%E5%9E%8B%E8%83%BD%E5%8A%9B" tabindex="-1">形成 T 型能力</h3><p>横向上，要懂多语言选型：</p><ul><li>Rust：安全系统工程；</li><li>C：ABI 和极底层；</li><li>Go：云原生、平台服务；</li><li>Python：AI、脚本、胶水；</li><li>TypeScript：前端和工具链；</li><li>Java / C#：企业和业务系统；</li><li>Zig / Mojo：潜在未来方向。</li></ul><p>纵向上，要有 C++ 深水区能力。</p><p>成熟的 C++ 开发者不是到处推 C++，而是知道：</p><blockquote><p>什么时候应该用 C++，什么时候不该用 C++。</p></blockquote><p>这很重要。</p><h2 id="%E6%9C%AA%E6%9D%A5%E4%B8%8D%E6%98%AF%E5%8F%96%E4%BB%A3%EF%BC%8C%E8%80%8C%E6%98%AF%E9%87%8D%E6%96%B0%E5%88%86%E5%B7%A5" tabindex="-1">未来不是取代，而是重新分工</h2><p>这场讨论最终不应该落在 “Rust 会不会取代 C++” 这种简单问题上。更准确的结论是：</p><blockquote><p>Rust 会在新系统工程里成为主流力量，尤其会强烈分流安全敏感的新项目。<br>C++ 会失去很多本来不该属于它的新增项目，但仍然守住复杂高性能、底层黑魔法、历史兼容和大型工程怪物这些王牌领域。<br>C 会长期保留 ABI、裸机、系统边界、平台胶水这些位置。<br>其他语言会在业务、AI、前端、移动、脚本等领域继续比 Rust 和 C++ 更合适。</p></blockquote><p>Rust 的胜利，不是让 C/C++ 消失。Rust 的胜利是让未来很多新系统项目不再无脑选择 C/C++。</p><p>C++ 的生命力，也不只是历史包袱。它确实拥有一种极其罕见的能力：它能容纳复杂、高性能、混乱、充满 hack 的现实工程。</p><p>C 的生命力，则在于它足够薄，足够接近系统边界，是事实上的底层公共语言。</p><p>所以未来最可能的状态是：</p><blockquote><p>Rust 成为新系统工程的重要主流；<br>C++ 成为复杂高性能工程和黑魔法系统的硬核工具；<br>C 成为 ABI、裸机和底层边界的公共语言；<br>其他语言在各自更适合的领域继续胜出。</p></blockquote><p>对 C++ 开发者来说，最好的策略不是恐惧 Rust，也不是鄙视 Rust，而是：</p><blockquote><p>用 Rust 补安全思维，<br>用 C++ 深挖性能和底层，<br>用系统知识构建护城河，<br>再选一个行业方向扎进去。</p></blockquote><p>这不是语言战争的结束。</p><p>这只是软件工业开始更成熟地分配工具。</p><p>这何尝不是一件好事？</p><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="footnote1" class="footnote-item"><p><a href="https://lh3.github.io/2024/03/05/what-high-performance-language-to-learn">What high-performance language to learn?</a> <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p></li><li id="footnote2" class="footnote-item"><p><a href="https://www.stroustrup.com/quotes.html">Bjarne Stroustrup Quotes</a> <a href="#footnote-ref2" class="footnote-backref">↩︎</a></p></li></ol></section>]]>
      </content:encoded>
    </item>
    <item>
      <title>网站可用性优化指北</title>
      <link>https://www.lynx3.me/article/7bd2ed19/</link>
      <description>补药封禁我的网站了 QwQ</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <pubDate>Sun, 02 Nov 2025 14:45:11 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="%E9%9D%99%E6%80%81%E6%89%98%E7%AE%A1" tabindex="-1">静态托管</h1><div class="note warning flat">优选是社区行为，请注意 TOS</div><p>静态托管的优化关键在于分配到更好的 IP。对于 Vercel、Netlify、Cloudflare 等厂商，分配到的 IP 往往不尽人意。分配到更好的 IP，就可以极大缓解不稳定的情况，并且大幅度提速。</p><h2 id="vercel-%2F-netlify" tabindex="-1">Vercel / Netlify</h2><p>先使用官方 CNAME 获取到 SSL 证书，然后换成：</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">vercel.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>vercel-cname.xingpingcn.top. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>netlify.cname.bee-zh.cn. <span class="comment">; cf_tags=cf-proxied:false</span></span><br></pre></td></tr></tbody></table></figure><p>由于 CNAME 的 IP 的质量并不能总是保持优质，需要隔三差五检查。</p><p>另有：</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">vercel.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>vercel.cname.bee-zh.cn. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>netlify-cname.xingpingcn.top. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>sth.netlify.com. <span class="comment">; cf_tags=cf-proxied:false</span></span><br></pre></td></tr></tbody></table></figure><h2 id="cloudflare-pages" tabindex="-1">Cloudflare Pages</h2><p>使用任意支持地域化解析的 DNS 供应商（可惜 Cloudflare 免费版不支持，可以 NS 到支持的，比如阿里），国外解析到 <code>sth.pages.dev</code>，国内解析到 <code>cf.877774.xyz</code></p><h2 id="cloudflare-cdn" tabindex="-1">Cloudflare CDN</h2><p>使用 Cloudflare SaaS（Software as a Service, 软件即服务）中的自定义主机名功能，具体可参考<a href="https://www.bilibili.com/video/BV1SM4m1176E/">这个视频</a>，皮皮虾老师讲的非常清楚，鄙人不多赘述。</p><h1 id="%E5%8D%95%E7%82%B9%E6%9C%8D%E5%8A%A1%E5%99%A8" tabindex="-1">单点服务器</h1><p>自托管服务器的网站问题则更大了。</p><h2 id="hsts-preload" tabindex="-1">HSTS Preload</h2><div class="note warning flat">HSTS 配置错误可能会导致网站长期报废</div><p>由于 HTTP 不加密，首次访问可能会被劫持，没有机会建立 HTTPS 连接；若无 HSTS（HTTP Strict Transport Security，HTTP 严格传输安全），攻击者甚至还可以阻断 HTTPS 的连接。即使加上 HSTS 头，从一般用户角度来说，也往往需要首次的 HTTP。</p><p>那怎么办？加入 <code>HSTS Preload</code>（HSTS Preload List，HSTS 预加载列表） 列表（这个列表随着每次浏览器的发布而更新）后，你的网站会自动启用 HSTS，首次访问即为 HTTPS。代价就是 SSL 证书爆炸的话<strong>无路可退</strong>，只能等下一次浏览器发布的时候退出列表。</p><p>进入 preload 列表必须 <code>max-age ≥ 31536000</code> 且 <code>includeSubDomains</code> 且 <code>preload</code>。为了避免这个问题，建议从较小的 <code>max-age</code> 起递增。</p><p>加上这个头：</p><figure class="highlight http"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">Strict-Transport-Security</span><span class="punctuation">: </span>max-age=63072000; includeSubDomains; preload</span><br></pre></td></tr></tbody></table></figure><blockquote><p>Copy from <a href="https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts?hl=zh-cn">Google</a>：</p><p>max-age 指令用于指定用户浏览器必须仅使用 TLS 访问网站的时间量（以秒为单位）。一旦时间过去，如果网站未提供 HSTS 标头（或从 HTTP 到 HTTPS 的临时重定向），用户就可以再次通过纯 HTTP 访问该网站。</p><p>设置 includeSubDomains 指令会强制在最初发送标头的网页网址的<strong>任何子网域</strong>上使用该标头。例如，如果 <a href="http://google.com">google.com</a> 发送的 HSTS 标头包含 includeSubDomains 指令，则会在 <a href="http://mail.google.com">mail.google.com</a> 上强制执行 HSTS 标头。</p><p>设置 preload 指令并将网域提交给 <a href="https://hstspreload.org/">HSTS 预加载服务</a>后，系统会将该网域编译到使用预加载 HSTS 列表的浏览器二进制文件中。不仅 Google Chrome 如此，</p></blockquote><h2 id="%E6%B3%9B%E8%A7%A3%E6%9E%90" tabindex="-1">泛解析</h2><p>某一个域名的所有子域名指向同一个网站，一定程度上起到镜像站的作用。有些时候 ISP（Internet Service Provider，互联网服务提供商，也就是运营商） 不会下狠手，只会封禁一个子域名。</p><h2 id="dnssec" tabindex="-1">DNSSEC</h2><p>DNS 污染是对于小网站成本较低、伤害较大的一个招式。当受到大范围的 DNS 投毒时，上游的权威 DNS 都会受到污染，DoT 和 DoH 也无力回天。</p><p><a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">DNSSEC</a>（Domain Name System Security Extensions，域名系统安全扩展） 通过引入数字签名来确保 DNS 响应的真实性和完整性。哪怕攻击者劫持了 DNS，也难以伪造签名，这个错误的 DNS 解析结果会被拒绝。它确保了你的浏览器在发起 HTTP / HTTPS 请求时，连接的是正确、合法的服务器。</p><p>Cloudflare 提供免费的 DNSSEC，可以按照<a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">博客</a>开启。</p><h2 id="caa" tabindex="-1">CAA</h2><p>CAA（Certificate Authority Authorization，证书颁发机构授权）是规定那些有权为域名签发证书的 CA（Certificate Authority，证书颁发机构） 的白名单。</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> issue "letsencrypt.org"</span><br><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> issue "pki.goog"</span><br><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> issue "digicert.com"</span><br></pre></td></tr></tbody></table></figure><p>这可以有效防止黑 CA 或者 ISP 通过颁发假证书的方法进行攻击。如果 CA 胆敢违反 CAA 颁发证书，那么可能会被吊销执照。</p><h2 id="ct" tabindex="-1">CT</h2><p>但是，某些 ISP 掌握或者胁迫正规 CA 颁发证书，这个时候 <a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency">CT</a>（Certificate Transparency，证书透明度）就会出手。CT 会记录下每一张证书，方便进行审核。什么？你想不提交到 CT 来逃过审核？那这张证书会因为没有有效的 SCT（Signed Certificate Timestamp，证书签署时间戳）而被浏览器拒绝。</p><h2 id="ocsp-%2F-crl" tabindex="-1">OCSP / CRL</h2><p>证书已经出问题了，怎么办？</p><ul><li>CRL（Certificate Revocation List，证书吊销列表）：CA 定期发布一个包含所有已吊销证书序列号的大列表，浏览器需要下载并检查。</li><li>OCSP（Online Certificate Status Protocol，在线证书状态协议）：浏览器向 CA 的 OCSP 服务器实时查询证书状况。</li><li>OCSP Stapling（OCSP Stapling，OCSP 装订）：网站服务器自己定期去查询 OCSP 状态，并将有效的 OCSP 响应与证书一起 “装订” 起来发给浏览器。这避免了浏览器自己去查询，减少了延迟和被 ISP 拦截的风险。但如果 ISP 是中间人，它也可以替换掉这个 “装订” 的响应。</li></ul><p>似乎装订 + 短期证书（90d）更有效，靠撤销长期证书有点亡羊补牢？</p><figure class="highlight nginx"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># https://ssl-config.mozilla.org/#server=nginx&amp;version=1.27.3&amp;config=modern&amp;openssl=3.4.0&amp;hsts=false&amp;guideline=5.7</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># OCSP stapling</span></span><br><span class="line"><span class="attribute">ssl_stapling</span> <span class="literal">on</span>;</span><br><span class="line"><span class="attribute">ssl_stapling_verify</span> <span class="literal">on</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment"># verify chain of trust of OCSP response using Root CA and Intermediate certs</span></span><br><span class="line"><span class="attribute">ssl_trusted_certificate</span> /path/to/root_CA_cert_plus_intermediates;</span><br><span class="line"></span><br><span class="line"><span class="comment"># replace with the IP address of your resolver;</span></span><br><span class="line"><span class="comment"># 这里我替换成了 1.1.1.1</span></span><br><span class="line"><span class="comment"># async 'resolver' is important for proper operation of OCSP stapling</span></span><br><span class="line"><span class="attribute">resolver</span> <span class="number">1.1.1.1</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment"># If certificates are marked OCSP Must-Staple, consider managing the</span></span><br><span class="line"><span class="comment"># OCSP stapling cache with an external script, e.g. certbot-ocsp-fetcher</span></span><br><span class="line"></span><br></pre></td></tr></tbody></table></figure><div class="note info flat">[Let's Encrypt](https://letsencrypt.org/) 的 CRL 域名在中国大陆遭到封禁，建议使用 [Google Trust Services](https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial?hl=zh-cn)。其验证服务器在国内有 CDN。</div><h1 id="%E9%80%9A%E7%94%A8" tabindex="-1">通用</h1><h2 id="ech" tabindex="-1">ECH</h2><p><a href="https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/">ECH</a>（Encrypted ClientHello，加密客户端问候） 理论上可以保护隐私、对抗封禁。</p><h3 id="%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">客户端</h3><p>Firefox 119 已经默认启用 ECH，Chrome / Edge 据说是 105 开始默认启用，总之最新的浏览器没问题的。启用浏览器内置的安全 DNS（Cloudflare、Google 等主流均可），然后尝试访问 <a href="https://tls-ech.dev/">https://tls-ech.dev/</a>，看到 <code>You are using ECH. :)</code> 就可以了。</p><h3 id="%E6%9C%8D%E5%8A%A1%E5%99%A8" tabindex="-1">服务器</h3><p>Cloudflare CDN 免费版默认启用 ECH，Pages 似乎没有。</p><p>包括 <code>OpenSSL</code>、<code>Curl</code>、<code>Nginx</code> 等项目对于 ECH 的支持大多停留在实验阶段，故单点服务器难以上手。</p><p>你可以使用 <a href="https://dns.google/query?name=tls-ech.dev&amp;rr_type=HTTPS&amp;ecs=&amp;show_dnssec=true">Google Public DNS</a> 查询网站的支持情况，HTTPS 记录中包含 <code>ech=</code> 即可。</p><p>Firefox 用户还可以安装 <a href="https://github.com/27justin/ohmyech">oh-my-ech 插件</a>实时查看网站的 ECH 情况。</p><h2 id="csp-%E4%B8%8E-sri" tabindex="-1">CSP 与 SRI</h2><p>自己的网站百密无疏了，但是别忘了上游 CDN 投毒也是网络安全的重要话题。StaticFile、BootCDN、51LA 等都发生过投毒事件。</p><p>可以通过 CSP（Content Security Policy，内容安全策略）头限制资源加载：</p><figure class="highlight routeros"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&lt;meta <span class="attribute">http-equiv</span>=<span class="string">"Content-Security-Policy"</span></span><br><span class="line">      <span class="attribute">content</span>=<span class="string">"default-src 'self'; script-src 'self' trusted.com"</span>&gt;</span><br></pre></td></tr></tbody></table></figure><p>通过 SRI（Subresource Integrity，子资源完整性）防止资源被篡改：</p><figure class="highlight routeros"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;script <span class="attribute">src</span>=<span class="string">"https://cdn.example.com/jquery.js"</span></span><br><span class="line">        <span class="attribute">integrity</span>=<span class="string">"sha384-..."</span></span><br><span class="line">        <span class="attribute">crossorigin</span>=<span class="string">"anonymous"</span>&gt;&lt;/script&gt;</span><br></pre></td></tr></tbody></table></figure><h1 id="%E9%B8%A3%E8%B0%A2%E4%B8%8E%E5%BC%95%E7%94%A8" tabindex="-1">鸣谢与引用</h1><ol><li><a href="https://furries.fun/2025/02/04/over_the_isp_wall/">[矛与盾] 运营商封锁的原理以及 “低成本” 解决方案</a></li><li> Cloudflare：<ol><li><a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/</a></li><li><a href="https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/">https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/</a></li></ol></li><li>Mozilla<ol><li><a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency">https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency</a></li><li><a href="https://ssl-config.mozilla.org/">https://ssl-config.mozilla.org/</a></li></ol></li></ol>]]>
      </content:encoded>
    </item>
    <item>
      <title>四个重要的不等式</title>
      <link>https://www.lynx3.me/article/d68048af/</link>
      <description>有点难诶……</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E6%95%B0%E5%AD%A6/">数学</category>
      <category domain="https://www.lynx3.me/tags/%E6%95%B0%E5%AD%A6/">数学</category>
      <pubDate>Fri, 23 Aug 2024 05:18:35 GMT</pubDate>
      <content:encoded>
        <![CDATA[<div class="note warning flat">本文极为简略，仅作为学习笔记使用，许多证明步骤未写出．</div><h1 id="%E5%9D%87%E5%80%BC%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">均值不等式</h1><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac><mo>≥</mo><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt></mrow><annotation encoding="application/x-tex">\frac{a+b}{2} \geq \sqrt{ab}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.1078em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span></span></span></span></p><p>这是高中数学课本上第一个重要的不等式，A 版教材称为基本不等式，B 版教材称为均值不等式．</p><p>其中，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{a+b}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 称为算术平均值，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{ab}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.1078em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span></span></span></span> 称为几何平均值．</p><h2 id="%E8%AF%81%E6%98%8E" tabindex="-1">证明</h2><p>画图中……</p><h2 id="%E5%8F%98%E5%BD%A2" tabindex="-1">变形</h2><p>均值不等式有多个变形 / 推广形式，极其常用的有：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>+</mo><mi>b</mi><mo>≥</mo><mn>2</mn><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a+b \geq 2\sqrt{ab} \nobreakspace(a,b \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1822em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>b</mi><mo>≤</mo><mo stretchy="false">(</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ab \leq (\frac{a+b}{2})^2 \nobreakspace(a,b \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><p>此外还有：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>+</mo><mfrac><mn>1</mn><mi>a</mi></mfrac><mo>≥</mo><mn>2</mn><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a+\frac{1}{a} \geq 2 \nobreakspace(a&gt;0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>+</mo><mfrac><mi>b</mi><mi>a</mi></mfrac><mo>≥</mo><mn>2</mn><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{a}{b}+\frac{b}{a} \geq 2 \nobreakspace(\frac{a}{b}&gt;0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord">2</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>2</mn><mi>a</mi><mi>b</mi><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><mi>R</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a^2+b^2 \geq 2ab \nobreakspace(a,b \in R)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="mclose">)</span></span></span></span></p><h2 id="%E5%BA%94%E7%94%A8" tabindex="-1">应用</h2><p>均值不等式的应用有三个条件：</p><ol><li><strong>一正：</strong> 两个数均为正实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub></mrow><annotation encoding="application/x-tex">a,b \in R_+</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8917em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>．</li><li><strong>二定：</strong> 求和时积为定值，求积时和为定值．</li><li><strong>三相等：</strong> 等号能成立，即等号成立的条件能满足．</li></ol><h2 id="%E7%89%B9%E6%AE%8A%E6%83%85%E5%86%B5%EF%BC%9A" tabindex="-1">特殊情况：</h2><h3 id="%E4%B8%80%E4%B8%8D%E6%AD%A3" tabindex="-1">一不正</h3><p>条件一正没有满足即为一不正，又分为两种情况：</p><h4 id="%E4%B8%80%E4%B8%8D%E6%AD%A3-1" tabindex="-1">一不正</h4><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 一正一负，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>b</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a &gt; 0, b &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><p>一不正时，均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，尝试将原式化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mo>−</mo><mfrac><mi>p</mi><mi>x</mi></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>p</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x) = x-\frac{p}{x} \nobreakspace(p &gt; 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7475em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span> 的形式．此函数为飘带函数，随后便可以利用函数的单调性求解．</p><p><img src="https://s2.hdslb.com/bfs/article/f7bcd952b4d016afad33e106e51369381352440272.png@1e_1c.webp" alt=""></p><h4 id="%E4%BA%8C%E4%B8%8D%E6%AD%A3" tabindex="-1">二不正</h4><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 均为负实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a,b &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><p>类似的，此时均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，提取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 的负号，利用均值不等式求解之后，再利用不等式的基本性质二恢复负号．</p><h3 id="%E4%BA%8C%E4%B8%8D%E5%AE%9A" tabindex="-1">二不定</h3><p>条件二定没有满足即为二不定．此时均值不等式不成立，无法利用均值不等式求解主要利用配凑的方法求解．又分为两种情况：</p><h4 id="%E6%B1%82%E5%92%8C%E7%A7%AF%E4%B8%8D%E5%AE%9A" tabindex="-1">求和积不定</h4><p>利用加减等方法凑出分母的倍数．</p><p>例：当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>&gt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x &gt; 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 时，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 的最小值．</p><p>将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 转化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">(x-1)+\frac{4}{x-1}+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>．检验 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x-1 &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{4}{x-1} &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> ，则有：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>+</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><mn>2</mn><msqrt><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>⋅</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow></msqrt><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>2</mn><msqrt><mn>4</mn></msqrt><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    (x-1)+\frac{4}{x-1}+1    &amp;\geq 2\sqrt{(x-1)\cdot\frac{4}{x-1}}+1 \\    &amp;= 2\sqrt{4}+1 \\    &amp;= 5\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:5.5561em;vertical-align:-2.528em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.028em;"><span style="top:-5.028em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-2.9419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"></span></span><span style="top:-1.4419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.528em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.028em;"><span style="top:-5.028em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6099em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.5699em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8301em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-2.9419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9561em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">4</span></span></span><span style="top:-2.9161em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.0839em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-1.4419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.528em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo>=</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x-1 = \frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">x = 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 时，等号可以成立，得出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 的最小值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>．</p><h4 id="%E6%B1%82%E7%A7%AF%E5%92%8C%E4%B8%8D%E5%AE%9A" tabindex="-1">求积和不定</h4><p>改变某一因式系数使和为定值．</p><p>例：当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>∈</mo><mo stretchy="false">(</mo><mn>0</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x \in (0,1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span> 时，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的最大值．</p><p>将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 转化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mn>2</mn><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{1}{2}\cdot2x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>．检验 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>x</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">2x &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi></mrow><mi>x</mi></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{3-2x}{x} &gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mbin mtight">−</span><span class="mord mtight">2</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> ，则有：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mn>2</mn><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≤</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><msup><mrow><mo fence="true">[</mo><mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><mn>2</mn></mfrac><mo fence="true">]</mo></mrow><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mfrac><mn>9</mn><mn>4</mn></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>9</mn><mn>8</mn></mfrac></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    \frac{1}{2}\cdot2x(3-2x)    &amp;\leq \frac{1}{2}\cdot\left[\frac{2x+(3-2x)}{2}\right]^2 \\    &amp;= \frac{1}{2}\cdot\frac{9}{4} \\    &amp;= \frac{9}{8}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:7.2189em;vertical-align:-3.3595em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.8595em;"><span style="top:-5.8595em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span><span style="top:-3.288em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"></span></span><span style="top:-0.9805em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.3595em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.8595em;"><span style="top:-5.8595em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">[</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">]</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.654em;"><span style="top:-3.9029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.288em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">9</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-0.9805em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">8</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">9</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.3595em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>x</mi><mo>=</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi></mrow><annotation encoding="application/x-tex">2x = 3-2x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span></span></span></span>，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mfrac><mn>3</mn><mn>4</mn></mfrac></mrow><annotation encoding="application/x-tex">x = \frac{3}{4}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 时，等号可以成立，得出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的最大值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>8</mn><mn>9</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{8}{9}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">9</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">8</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．</p><h3 id="%E4%B8%89%E4%B8%8D%E7%9B%B8%E7%AD%89" tabindex="-1">三不相等</h3><p>此时均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，尝试将原式化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mo>+</mo><mfrac><mi>p</mi><mi>x</mi></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>p</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x) = x+\frac{p}{x} \nobreakspace(p &gt; 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7475em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span> 的形式．此函数为对勾函数，其两个拐点一正一负，横坐标为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mi>p</mi></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3369em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><msqrt><mi>p</mi></msqrt></mrow><annotation encoding="application/x-tex">-\sqrt{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3369em;"></span><span class="mord">−</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span></span></span></span>，代入求值得出拐点坐标后便可以利用函数的单调性求解．</p><p><img src="https://s2.hdslb.com/bfs/article/15d7843ec7aab9e7e9ebdd6478fca2ef1352440272.png@1e_1c.webp" alt=""></p><h3 id="1-%E7%9A%84%E4%BB%A3%E6%8D%A2" tabindex="-1">1 的代换</h3><p>1 的代换法是将代数式同时乘以 “1”，转化为均值不等式求解，通常是给出一个和，再求一个和的形式．</p><p>例：正数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>=</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">\frac{3}{x}+\frac{1}{y} = 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.3262em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow><annotation encoding="application/x-tex">3x+4y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 的最小值．</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>1</mn><mo>⋅</mo><mo stretchy="false">(</mo><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo stretchy="false">)</mo><mo>⋅</mo><mo stretchy="false">(</mo><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>⋅</mo><mn>3</mn><mi>x</mi><mo>+</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>⋅</mo><mn>4</mn><mi>y</mi><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>⋅</mo><mn>3</mn><mi>x</mi><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>⋅</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>+</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac><mo>+</mo><mn>4</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mn>4</mn><mo>+</mo><mn>2</mn><msqrt><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>⋅</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow></msqrt><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mn>4</mn><mo>+</mo><mn>12</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    3x+4y    &amp;= 1\cdot(3x+4y) \\    &amp;= \frac{1}{5}\cdot(\frac{3}{x}+\frac{1}{y})\cdot(3x+4y) \\    &amp;= \frac{1}{5}\cdot(\frac{3}{x}\cdot3x+\frac{3}{x}\cdot4y+\frac{1}{y}\cdot3x+\frac{1}{y}\cdot4y) \\    &amp;= \frac{1}{5}(9+\frac{12y}{x}+\frac{3x}{y}+4) \\    &amp;\geq \frac{1}{5}\cdot(9+4+2\sqrt{\frac{12y}{x}\cdot\frac{3x}{y}}) \\    &amp;= \frac{1}{5}(9+4+12) \\    &amp;= 5\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:15.2531em;vertical-align:-7.3765em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:7.8765em;"><span style="top:-10.5909em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-8.6095em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-6.1076em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-3.6057em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-0.8709em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:1.6362em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:3.4622em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:7.3765em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:7.8765em;"><span style="top:-10.5909em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-8.6095em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-6.1076em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-3.6057em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">12</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mclose">)</span></span></span><span style="top:-0.8709em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.5544em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">12</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.5144em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8856em;"><span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:1.6362em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">12</span><span class="mclose">)</span></span></span><span style="top:3.4622em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:7.3765em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>=</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{12y}{x} = \frac{3x}{y}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2422em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8972em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3262em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 时，等号成立．联立方程：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>=</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}    \frac{3}{x} + \frac{1}{y} = 5 \\    \frac{12y}{x} = \frac{3x}{y}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7391em;"><span style="top:-3.7391em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8972em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2391em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>解得：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>x</mi><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>y</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}    x = 1 \\    y = \frac{1}{2}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>满足条件，可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow><annotation encoding="application/x-tex">3x+4y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 的最小值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>．</p><h1 id="%E9%87%8D%E8%A6%81%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">重要不等式</h1><h2 id="%E8%AF%81%E6%98%8E-1" tabindex="-1">证明</h2><p>由平方差公式：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mo>=</mo><msup><mi>a</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mi>a</mi><mi>b</mi><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">(a-b)^2 = a^2-2ab+b^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></p><p>并平方的性质：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x^2 \geq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>可以得到：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mi>a</mi><mi>b</mi><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a^2-2ab+b^2 \geq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>移项即可得：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>2</mn><mi>a</mi><mi>b</mi></mrow><annotation encoding="application/x-tex">a^2+b^2 \geq 2ab</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span></span></span></span></p><p>可作为均值不等式的补充．</p><p>由于平方的性质中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>∈</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">x \in R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span>，因此重要不等式的条件略有不同：</p><ol><li><strong>一实：</strong> 两个数均为实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">a,b \in R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span>．</li><li><strong>二定：</strong> 求和时积为定值，求积时和为定值．</li><li><strong>三相等：</strong> 等号能成立，即等号成立的条件能满足．</li></ol><h1 id="%E8%BF%9E%E7%BB%AD%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">连续不等式</h1><p>均值不等式的全部如下：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>n</mi><mrow><mfrac><mn>1</mn><msub><mi>a</mi><mn>1</mn></msub></mfrac><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mn>2</mn></msub></mfrac><mo>+</mo><mo>⋯</mo><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mi>n</mi></msub></mfrac></mrow></mfrac><mo>≤</mo><mroot><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>⋅</mo><msub><mi>a</mi><mn>2</mn></msub><mo>⋯</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mroot><mo>≤</mo><mfrac><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>+</mo><msub><mi>a</mi><mn>2</mn></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mfrac><mo>≤</mo><msqrt><mfrac><mrow><msubsup><mi>a</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>a</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mo>⋯</mo><mo>+</mo><msubsup><mi>a</mi><mi>n</mi><mn>2</mn></msubsup></mrow><mi>n</mi></mfrac></msqrt></mrow><annotation encoding="application/x-tex">\frac{n}{\frac{1}{a_1} + \frac{1}{a_2} + \cdots + \frac{1}{a_n}} \leq \sqrt[n]{a_1 \cdot a_2 \cdots a_n} \leq \frac{a_1 + a_2 + \cdots + a_n}{n} \leq \sqrt{\frac{a_1^2 + a_2^2 + \cdots + a_n^2}{n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.487em;vertical-align:-0.7916em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.599em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">2</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2306em;"><span style="top:-2.3em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord mathnormal mtight">n</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4869em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7916em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3078em;"></span><span class="mord sqrt"><span class="root"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.4699em;"><span style="top:-2.7547em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size6 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3078em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1634em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8184em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4101em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.84em;vertical-align:-0.4817em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3583em;"><span class="svg-align" style="top:-3.8em;"><span class="pstrut" style="height:3.8em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0916em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.5281em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.214em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.3183em;"><span class="pstrut" style="height:3.8em;"></span><span class="hide-tail" style="min-width:1.02em;height:1.88em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.88em" viewBox="0 0 400000 1944" preserveAspectRatio="xMinYMin slice"><path d="M983 90l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5zM1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4817em;"><span></span></span></span></span></span></span></span></span>，其中：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>n</mi><mrow><mfrac><mn>1</mn><msub><mi>a</mi><mn>1</mn></msub></mfrac><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mn>2</mn></msub></mfrac><mo>+</mo><mo>⋯</mo><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mi>n</mi></msub></mfrac></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{n}{\frac{1}{a_1} + \frac{1}{a_2} + \cdots + \frac{1}{a_n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.487em;vertical-align:-0.7916em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.599em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">2</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2306em;"><span style="top:-2.3em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord mathnormal mtight">n</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4869em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7916em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 是调和平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mroot><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>⋅</mo><msub><mi>a</mi><mn>2</mn></msub><mo>⋯</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mroot></mrow><annotation encoding="application/x-tex">\sqrt[n]{a_1 \cdot a_2 \cdots a_n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3078em;"></span><span class="mord sqrt"><span class="root"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.4699em;"><span style="top:-2.7547em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size6 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3078em;"><span></span></span></span></span></span></span></span></span> 是几何平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>+</mo><msub><mi>a</mi><mn>2</mn></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{a_1 + a_2 + \cdots + a_n}{n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1634em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8184em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4101em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 是算术平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mfrac><mrow><msubsup><mi>a</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>a</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mo>⋯</mo><mo>+</mo><msubsup><mi>a</mi><mi>n</mi><mn>2</mn></msubsup></mrow><mi>n</mi></mfrac></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{\frac{a_1^2 + a_2^2 + \cdots + a_n^2}{n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.84em;vertical-align:-0.4817em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3583em;"><span class="svg-align" style="top:-3.8em;"><span class="pstrut" style="height:3.8em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0916em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.5281em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.214em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.3183em;"><span class="pstrut" style="height:3.8em;"></span><span class="hide-tail" style="min-width:1.02em;height:1.88em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.88em" viewBox="0 0 400000 1944" preserveAspectRatio="xMinYMin slice"><path d="M983 90l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5zM1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4817em;"><span></span></span></span></span></span></span></span></span> 是平方平均值．</p><p>这个不等式链展示了不同平均值之间的大小关系．</p><h1 id="%E7%B3%96%E6%B0%B4%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">糖水不等式</h1><p>一杯质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 的糖水含有质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 的糖分，易得该杯糖的质量浓度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．向杯中加入质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span> 的糖，易得该杯糖水的质量浓度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．由常识即可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&lt;</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} &lt; \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．并由情境得：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mi>b</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>c</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a&gt;b&gt;0,c&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><h2 id="%E8%AF%81%E6%98%8E-2" tabindex="-1">证明</h2><p>作差：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>−</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} - \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></p><p>简化后得到：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>c</mi><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><mrow><mi>b</mi><mo stretchy="false">(</mo><mi>b</mi><mo>+</mo><mi>c</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{c(a - b)}{b(b+c)} &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.53em;vertical-align:-0.52em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span><span class="mclose mtight">)</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">c</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">a</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">b</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.52em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>所以不等式 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&lt;</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} &lt; \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mi>b</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>c</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a&gt;b&gt;0,c&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 时成立．</p><h1 id="%E6%9D%83%E6%96%B9%E5%92%8C%E4%B8%8D%E7%AD%89%E5%BC%8F" tabindex="-1">权方和不等式</h1><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo>≥</mo><mfrac><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{x^2}{a}+\frac{y^2}{b} \geq \frac{x^2+y^2}{a+b} \nobreakspace(a,b,x,y \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3629em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.415em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.4734em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><h2 id="%E8%AF%81%E6%98%8E-3" tabindex="-1">证明</h2><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mo stretchy="false">(</mo><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo stretchy="false">)</mo><mo>⋅</mo><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mfrac><mrow><mi>b</mi><msup><mi>x</mi><mn>2</mn></msup></mrow><mi>a</mi></mfrac><mo>+</mo><mfrac><mrow><mi>a</mi><msup><mi>y</mi><mn>2</mn></msup></mrow><mi>b</mi></mfrac><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo>+</mo><mn>2</mn><msqrt><mrow><mfrac><mrow><mi>b</mi><msup><mi>x</mi><mn>2</mn></msup></mrow><mi>a</mi></mfrac><mo>⋅</mo><mfrac><mrow><mi>a</mi><msup><mi>y</mi><mn>2</mn></msup></mrow><mi>b</mi></mfrac></mrow></msqrt></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo>+</mo><mn>2</mn><mi>x</mi><mi>y</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    (\frac{x^2}{a}+\frac{y^2}{b})\cdot(a+b)    &amp;= x^2+\frac{bx^2}{a}+\frac{ay^2}{b}+y^2 \\    &amp;\geq x^2+y^2+2\sqrt{\frac{bx^2}{a}\cdot\frac{ay^2}{b}} \\    &amp;= x^2+y^2+2xy \\    &amp;=(x+y)^2\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:7.9653em;vertical-align:-3.7327em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2327em;"><span style="top:-6.441em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span><span style="top:-3.7556em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span><span style="top:-1.8509em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span><span style="top:-0.3268em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7327em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2327em;"><span style="top:-6.441em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.7556em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6994em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4171em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4171em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.6594em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7406em;"><span></span></span></span></span></span></span></span><span style="top:-1.8509em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-0.3268em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7327em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>利用不等式的基本性质二即可得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo>≥</mo><mfrac><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{x^2}{a}+\frac{y^2}{b} \geq \frac{x^2+y^2}{a+b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3629em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.415em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.4734em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>To Make Linux Better!</title>
      <link>https://www.lynx3.me/article/b5186965/</link>
      <description>Linux 的备忘录，记录 Linux 相关的一些问题和解决方案。</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/Linux/">Linux</category>
      <category domain="https://www.lynx3.me/tags/Linux/">Linux</category>
      <category domain="https://www.lynx3.me/tags/Bug/">Bug</category>
      <pubDate>Wed, 24 Jul 2024 09:32:40 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="%E5%87%BA%E5%8F%91%E7%82%B9" tabindex="-1">出发点</h1><ol><li>部分软件未针对 Arch Linux 进行适配，导致出现兼容性问题。</li><li>部分软件的默认配置不尽合理，或与每个人的情况不符，需要进行调整。</li><li>系统的部分行为不够合理，需要进行调整。</li></ol><h1 id="alsa-%E7%9A%84%E9%85%8D%E7%BD%AE%E4%B8%8E%E5%85%BC%E5%AE%B9" tabindex="-1">Alsa 的配置与兼容</h1><p><a href="https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture">Alsa</a> 是 Linux 声卡驱动程序，通常是 Linux 默认的声卡驱动程序。</p><p>ArchLinux 的 Alsa 包 似乎没有附带默认配置文件，因此难免遇到问题，此处以我自己用到的 ClassIn 为例。</p><h2 id="%E9%99%A4%E5%8E%BB%E8%BD%AF%E4%BB%B6%E8%87%AA%E5%B8%A6%E7%9A%84%E9%94%99%E8%AF%AF%E7%9A%84%E5%BA%93" tabindex="-1">除去软件自带的错误的库</h2><p>由于 ClassIn 自带一部分 Alsa 库，导致 Alsa 无法正常工作，ClassIn 成了聋哑软件。</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib dlmisc.c:<span class="number">170</span>:(snd_dlsym_verify) unable to verify version for symbol snd_func_private_integer</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">4556</span>:(_snd_config_evaluate) symbol snd_func_private_integer is not defined inside (null)</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">5047</span>:(snd_config_expand) Evaluate error: 没有那个设备或地址</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">3694</span>:(snd_config_hook_load) Unable to expand filenames in the pre-load section</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">3572</span>:(snd_config_hooks_call) function snd_config_hook_load_for_all_cards returned error: 没有那个设备或地址</span><br><span class="line"><span class="attribute">ALSA</span> lib control.c:<span class="number">1264</span>:(snd_ctl_open_conf) Invalid type for CTL default definition</span><br></pre></td></tr></tbody></table></figure><p>直接删除即可：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -rf /opt/apps/classin/lib/libasound.so*</span><br></pre></td></tr></tbody></table></figure><h2 id="%E8%B0%83%E6%95%B4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">调整配置文件</h2><h3 id="%E6%8C%87%E5%AE%9A%E8%AE%BE%E5%A4%87" tabindex="-1">指定设备</h3><p>再次运行 ClassIn，仍然报错，并且找不到扬声器 / 耳机，只找到麦克风：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br></pre></td></tr></tbody></table></figure><p>看起来是没找到设备，指定下就好了。</p><p>先找一下设备：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aplay -l</span><br></pre></td></tr></tbody></table></figure><p>输出类似如下内容：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">**** <span class="attribute">List</span> of PLAYBACK Hardware Devices ****</span><br><span class="line"><span class="attribute">card</span> <span class="number">1</span>: PCH<span class="meta"> [HDA Intel PCH], device 0: ALC897 Analog [ALC897 Analog]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br><span class="line"><span class="attribute">card</span> <span class="number">1</span>: PCH<span class="meta"> [HDA Intel PCH], device 1: ALC897 Digital [ALC897 Digital]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br><span class="line"><span class="attribute">card</span> <span class="number">2</span>: HDMI<span class="meta"> [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br></pre></td></tr></tbody></table></figure><p>发现有两个 Card，分别是 <code>PCH</code> 和 <code>HDMI</code>，其中 <code>PCH</code> 卡有两个 Device，分别是 <code>ALC897 Analog</code> 和 <code>ALC897 Digital</code>，<code>HDMI</code> 卡有一个 Device <code>HDMI 0</code>。</p><p>编辑 <code>/etc/asound.conf</code> 文件，指定声卡。这里我添加如下内容：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">    device <span class="number">0</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>当然，也可以用设备名称来指定。</p><p>核实下设备名：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aplay -l | awk -F \: <span class="string">'/,/{print $2}'</span> | awk <span class="string">'{print $1}'</span> | <span class="built_in">uniq</span></span><br></pre></td></tr></tbody></table></figure><p>输出如下内容：</p><figure class="highlight ebnf"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">PCH</span></span><br><span class="line"><span class="attribute">HDMI</span></span><br></pre></td></tr></tbody></table></figure><p>改写配置文件：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="type">PCH</span></span><br><span class="line">    device <span class="number">0</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="type">PCH</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>这样就指定了默认的声卡为 <code>PCH</code>。</p><h3 id="%E8%B0%83%E8%8A%82%E5%A3%B0%E9%81%93" tabindex="-1">调节声道</h3><p>再次运行 ClassIn，仍然报错，而且更糟糕的是输入输出都没有声音 —— 又成聋哑软件了：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for CAPTURE: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br></pre></td></tr></tbody></table></figure><p>声道不太对，调整下配置文件：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> plug</span></span><br><span class="line">    slave.pcm <span class="string">"hw:1,0"</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>这将使用 <code>plug</code> 插件自动转换音频参数以匹配设备的支持范围。</p><p>再次运行 ClassIn，声音设备正常了。</p><h3 id="%E5%90%8E%E8%AE%B0" tabindex="-1">后记</h3><p>还有许多可以修改的，比如解决 Alsa 与 PulseAudio 的冲突，日后再补充……</p><h1 id="fontconfig-%E7%9A%84%E7%BE%8E%E5%8C%96" tabindex="-1">FontConfig 的美化</h1><p><a href="https://wiki.archlinux.org/title/Font_configuration">FontConfig</a> 是 Linux 字体管理器，负责管理系统中字体文件的搜索路径、渲染方式、字体匹配规则等。</p><p>FontConfig 默认配置对 CJK + 编程的应用场景来说并不友好，会遇到以下问题：</p><ol><li>CJK 字形错乱，简体中文、繁体中文、日文、韩文等字形混用</li><li>字体渲染效果不佳，缺少粗体、斜体等效果</li><li>终端设置等宽字体会导致 CJK 字符回退到宋体，设置 CJK 字体会导致等宽字体的错乱</li><li>缺失 Windows 下常用的字体（微软雅黑、黑体、宋体、Arial、Times New Roman、Courier New 等）导致显示效果不佳</li><li>默认的 <code>Sans</code>、<code>Serif</code>、<code>Monospace</code> 等字体不够美观，并且功能欠缺</li><li>ZSH 的符号字体显示效果不佳</li></ol><h2 id="%E6%87%92%E4%BA%BA%E7%AF%87" tabindex="-1">懒人篇</h2><h3 id="%E5%AE%89%E8%A3%85%E5%AD%97%E4%BD%93" tabindex="-1">安装字体</h3><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> paru -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra ttf-font-awesome ttf-nerd-fonts-symbols ttf-th-tshyn ttf-jetbrains-mono</span><br></pre></td></tr></tbody></table></figure><h3 id="%E8%B0%83%E6%95%B4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-1" tabindex="-1">调整配置文件</h3><p>编辑 <code>~/.config/fontconfig/fonts.conf</code> 文件，添加以下内容：</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version='1.0'?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">fontconfig</span> <span class="keyword">SYSTEM</span> <span class="string">'urn:fontconfig:fonts.dtd'</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">fontconfig</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 拓宽系统字体设置生效面 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>system-ui<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 你可以自行添加更多字体设置 --&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 字体替换  --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>宋体<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Microsoft YaHei<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>微软雅黑<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Arial<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Source Code Pro<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 你可以自行补充更多字体替换 --&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 等宽字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>JetBrains Mono<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Sans Mono CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 无衬线字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Sans CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 衬线字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Serif CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 渲染设置 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"not_eq"</span> <span class="attr">name</span>=<span class="string">"slant"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"matrix"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">times</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">name</span>&gt;</span>matrix<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">matrix</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>0.2<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>0<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;/<span class="name">matrix</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;/<span class="name">times</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>oblique<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embeddedbitmap"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">bool</span>&gt;</span>false<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"less_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>medium<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"more_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embolden"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">dir</span>&gt;</span>~/.fonts<span class="tag">&lt;/<span class="name">dir</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">fontconfig</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h2 id="%E8%A7%A3%E9%87%8A" tabindex="-1">解释</h2><h3 id="%E5%AD%97%E4%BD%93%E5%AE%B6%E6%97%8F" tabindex="-1">字体家族</h3><p>字体家族（family）是指一组字体，通常包括一个默认字体和一组备用字体。</p><p>在 FontConfig 中，字体家族的设置通过 <code>family</code> 选项来实现。这里以 <code>serif</code>（有衬线字体）字体家族为例，设置字体家族的优先级：</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Serif CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><p>字体家族的优先级由上到下，越靠前的字体优先级越高。建议按照以下优先级设置字体家族：</p><ol><li>中文字体</li><li>英文字体</li><li>表情符号</li><li>Icon 字体</li></ol><p>设置字体家族后，系统会自动按照优先级匹配字体，从而有效解决问题 3、5、6。如果锁死使用某一字形，还可以粗暴但有效地解决问题 1。此外，若字体有多字重，搭配渲染设置可以解决问题 2。</p><h3 id="%E5%AD%97%E4%BD%93%E6%9B%BF%E6%8D%A2" tabindex="-1">字体替换</h3><p>比如上面覆盖 <code>宋体</code> 字体与<code>system-ui</code> 字体家族的配置，以解决问题 4。</p><h3 id="%E6%B8%B2%E6%9F%93%E7%AD%96%E7%95%A5" tabindex="-1">渲染策略</h3><p>直接使用默认配置就好了，有问题再二分法排查。啥？你没备份？我这有一份完全的默认的配置，注释都没删，罚你自己整理！</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version='1.0'?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">fontconfig</span> <span class="keyword">SYSTEM</span> <span class="string">'urn:fontconfig:fonts.dtd'</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">fontconfig</span>&gt;</span></span><br><span class="line"> <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> Artificial oblique for fonts without an italic or oblique version</span></span><br><span class="line"><span class="comment"> --&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the font is roman --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the pattern requested non-roman --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"not_eq"</span> <span class="attr">name</span>=<span class="string">"slant"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- multiply the matrix to slant the font --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"matrix"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">times</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">name</span>&gt;</span>matrix<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">matrix</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>0.2<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>0<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">matrix</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;/<span class="name">times</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- pretend the font is oblique now --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>oblique<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- and disable embedded bitmaps for artificial oblique --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embeddedbitmap"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>false<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> Synthetic emboldening for fonts that do not have bold face available</span></span><br><span class="line"><span class="comment"> --&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the weight in the font is less than medium which possibly need emboldening --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"less_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>medium<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the pattern requests bold --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"more_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">  set the embolden flag</span></span><br><span class="line"><span class="comment">  needed for applications using cairo, e.g. gucharmap, gedit, ...</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embolden"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> set weight to bold</span></span><br><span class="line"><span class="comment"> needed for applications using Xft directly, e.g. Firefox, ...</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"rgba"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>rgb<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"hinting"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"hintstyle"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>hintslight<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">dir</span>&gt;</span>~/.fonts<span class="tag">&lt;/<span class="name">dir</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"antialias"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">fontconfig</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h3 id="%E5%90%8E%E8%AE%B0-1" tabindex="-1">后记</h3><p>此外，还有一些高级的设置，比如：</p><ul><li>调整字体大小、粗细</li><li>根据语言自动调整字体</li><li>为某一程序调整字体</li><li>为某一字体调整渲染策略</li><li>根据应用场景自动调整渲染策略</li></ul><p>这些设置可以根据个人喜好进行调整。我对此没有需求，未做过研究，请参阅以下资料：</p><ul><li><a href="https://wiki.archlinux.org/title/Font_configuration">Arch Wiki: Font Configuration</a></li><li><a href="https://fontconfig.pages.freedesktop.org/fontconfig/fontconfig-user.html">FontConfig User Documentation</a></li><li><a href="https://catcat.cc/post/2021-03-07/">用 fontconfig 治理 Linux 中的字体 – 双猫 CC</a></li><li><a href="https://github.com/Bryan2333/Dotfiles/blob/master/.config/fontconfig/fonts.conf">Bryan2333/Dotfiles</a></li></ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>旧手机优化计划之三 - 流畅、保活与省电</title>
      <link>https://www.lynx3.me/article/4097fa9/</link>
      <description>类原生真好用～</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/">刷机</category>
      <category domain="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/">刷机</category>
      <pubDate>Thu, 11 Jul 2024 15:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<div class="note warning flat">除非您有把握，否则不建议随意调整手机默认的性能配置！默认的，往往是最好的！</div><h1 id="%E6%B5%81%E7%95%85%E5%BA%A6" tabindex="-1">流畅度</h1><h2 id="%E5%86%85%E5%AD%98%E6%96%B9%E5%90%91" tabindex="-1">内存方向</h2><p>对于 Android 11 + Magisk + LSPosed + 小而美 + QQ + etc. 来说，sdm660 + 4GB 已显捉襟见肘。对于小而美、QQ、B 站、抖音等软件，其本身优化就极差，再加一堆 XpHook，性能便更差了：不仅狂杀后台，而且时常会 OOM。怎么办呢？</p><h3 id="%E4%BA%A4%E6%8D%A2%E7%A9%BA%E9%97%B4" tabindex="-1">交换空间</h3><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i>本段教程尽力做到流畅和保后台之间平衡，但是由于 OPPO R11 内存实在偏小，不得不向保后台偏移。代价就是1. 增多耗电，加剧发热2. 热启动变慢</div><p>为了从源头上解决内存捉襟见肘的问题，我们可以使用交换空间。这里我使用使用 Scene 调节。</p><h4 id="zram" tabindex="-1">ZRAM</h4><p>ZRAM 是在内存中划出一块来并对其进行压缩，详情可见 <a href="https://wiki.archlinuxcn.org/wiki/Zram">ArchWikiCN</a>。正因如此，ZRAM 设置不当会给 CPU 带来显著的压力，进而拉大耗电量、减少续航。</p><p>如果您只打算开 ZRAM，那么建议在 2GB 到 3GB（2048MB 到 3072MB）之间。过小作用不大，过大拉多耗电量。</p><h4 id="swap" tabindex="-1">Swap</h4><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i>不可以只启用 Swap，这会严重拉慢磁盘 IO 与严重磨损磁盘！</div><h4 id="zram%2Bswap" tabindex="-1">ZRAM+Swap</h4><p>ZRAM 建议在 1.5GB 到 2.5GB（1536MB 到 2560MB）之间，Swap 建议在 0.5GB 到 1.5GB（1024MB 到 1536MB）之间，并且当 Scene 提示交换策略时，选择优先使用 ZRAM。这样可以让新鲜的数据在较快的 ZRAM 里交换，而当 ZRAM 被榨干时则把脏数据写到 Swap 以备过后使用。</p><p><img src="https://s2.hdslb.com/bfs/article/20f11065f4af3fd39fe1100c57e465231352440272.png@1000h.webp" alt="效果图"></p><h4 id="vm-parameters" tabindex="-1">VM Parameters</h4><p>将 swapiness 和 extra_free_kbytes 拉得较大。这样可以保证留有充足的 RAM 以防止 OOM。</p><h3 id="%E7%89%B9%E6%AE%8A%E7%89%88%E6%9C%AC" tabindex="-1">特殊版本</h3><h4 id="%E5%BE%AE%E4%BF%A1" tabindex="-1">微信</h4><p><s>微信版本复杂，建议参考<a href="https://gitee.com/ww3w/dzb/blob/master/1.md#-%E5%BE%AE%E4%BF%A1">百分之千 / 定制版应用收藏 / 版本拐点</a>选择，并从<a href="https://www.coolapk.com/feed/51351476">酷安老哥微笑渲染悲伤的帖子</a>里下载。</s></p><p><s>比较推荐的是 CN 7.0.21、Play 8.0.15、Play 8.0.33、CN 8.0.42。</s></p><p>不建议 OPPO R11 使用微信了，实在太卡。</p><h4 id="qq" tabindex="-1">QQ</h4><p><s>建议用 9.0.8，可以从<a href="https://t.me/QQUpdates">QQUpdates</a>、<a href="https://t.me/qq_updatelog">QQ/TIM Update Log</a> 获得。9.0.15 和 9.0.17 有多人报道冷启动、小程序、扫码变慢。</s></p><p>时代变了，建议用 9.0.65，可以从<a href="https://t.me/QQUpdates">QQUpdates</a>、<a href="https://t.me/qq_updatelog">QQ/TIM Update Log</a> 获得。</p><h4 id="others" tabindex="-1">Others</h4><p>请参考以下几个视频：</p><p><a href="https://www.bilibili.com/video/BV16P411P7QT/">安卓软件保姆级优化，让你的手机再战三年！</a></p><p><a href="https://www.bilibili.com/video/BV1r94y1T7Xa/">让老旗舰机重回新生？请收好这份养老软件指南！</a></p><h3 id="%E4%B8%89%E6%96%B9%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">三方客户端</h3><p>对于某些热门软件，可能会有大佬用爱发电。传送门有：</p><ul><li><a href="https://github.com/bggRGjQaUbCoE/PiliPlus">PiliPlus</a>（哔哩哔哩）</li><li><a href="https://github.com/huajiqaq/Hydrogen">Hydrogen</a>（知乎）</li><li><a href="https://github.com/CeuiLiSA/Pixiv-Shaft">Shaft</a>（Pixiv）</li></ul><p>这些三方客户端有更为优秀的外观，更为可观的速度，以及某些诱人的功能。</p><h3 id="%E6%89%8B%E5%8A%A8%E5%85%BB%E8%80%81" tabindex="-1">手动养老</h3><p>对 QQ 微信等压力大的软件启动 Scene 监视器，随时监测硬件状况以逼迫自己养老，防止 OOM。</p><h2 id="cpu-%E6%96%B9%E5%90%91" tabindex="-1">CPU 方向</h2><h3 id="%E9%80%9A%E7%94%A8" tabindex="-1">通用</h3><p>推介以下两件套：<a href="http://vtools.omarea.com/">Scene</a> <s>、<a href="https://moka.latestfile.zip/">Moka</a></s>。</p><p>Scene 可以调整 CPU~~，Moka 可以删除温控［注意：OPPO R11 一路下键即可，删不干净很正常，全删掉会有 Bug（比如爆音、打电话自动开免提、录屏时录不了系统内部声音）］~~，强烈不建议删除温控，而且移除温控之后毫无效果。</p><h3 id="%E4%B8%89%E6%96%B9%E8%B0%83%E5%BA%A6" tabindex="-1">三方调度</h3><h4 id="uperf-%E6%96%B9%E6%A1%88" tabindex="-1">Uperf 方案</h4><p>刷入 <a href="https://github.com/yinwanxi/Uperf-Game-Turbo">Uperf Game Turbo</a>、<a href="https://github.com/nakixii/Magisk_AsoulOpt">AsoulOpt</a></p><p>Uperf Game Turbo 可以较好地调节 CPU，使之在需要省电时省电、需要性能时高效。（注意：我们只需要 Uperf Game Turbo 的配置文件，而不需要其过分地教我们做事。为了避免其引起的一系列问题，请在刷入后将其禁用。）</p><p>AsoulOpt 可以调节线程，提高 CPU 效率。</p><p><img src="https://s2.hdslb.com/bfs/article/5b176872d9d21a056c214fb990aa0a881352440272.png@1000h.webp" alt=""></p><h4 id="cuprumturbo-scheduler-%E6%96%B9%E6%A1%88" tabindex="-1"><a href="https://github.com/chenzyadb/CuprumTurbo-Scheduler">CuprumTurbo Scheduler</a> 方案</h4><p>说这个东西可能令人眼前一黑，但如果说 CuToolBox，相信大多数人都耳熟能详。CuprumTurbo Scheduler 就是 CuToolBox 的模块版。</p><p>经过测试后发现其确实有助于提升流畅性；但未经长期测试，加之峰值功率与 Uperf Game Turbo 相比明显偏大，难以得出准确结论。</p><p><img src="https://s2.hdslb.com/bfs/article/589abf4ddc5824f1bcc037639c4391171352440272.png@1000h.webp" alt=""></p><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i>安装 Tritium Fiage 前，请先卸载 Uperf 及其相关和衍生模块和 AsoulOpt，并关闭 Scene 的核心分配与高通的 Performance Boost Config。<img class="inline-img" src="https://s2.hdslb.com/bfs/article/b78cebe362474026d5abdcd637f6cba61352440272.png@1e_1c.webp" style="height:600px"><img class="inline-img" src="https://s2.hdslb.com/bfs/article/74af917c131fcdb2609cf48c4802f5a31352440272.png@1e_1c.webp" style="height:600px"></div><h4 id="tritium-fiage-%E6%96%B9%E6%A1%88" tabindex="-1">Tritium Fiage 方案</h4><p>Tritium Fiage 是基于 CuprumTurbo Scheduler 的修改版，可以从酷安的<a href="https://www.coolapk.com/u/3922059">鱼龄</a>那里下载。</p><p>启用后建议将性能模式设为默认。功耗基本不会变，但流畅度会好很多。</p><p><img src="https://s2.hdslb.com/bfs/article/8a224c202551da98cb6b8440784107621352440272.png@1000h.webp" alt="如图，极端场景（此处为连续刷 4K 视频）下功率仍不太高"></p><p><img src="https://s2.hdslb.com/bfs/article/e279516c9b215b5c4b438be2eb8416071352440272.png@1000h.webp" alt="功耗"></p><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i>安装 Tritium Fiage 前，请先卸载 Uperf 及其相关和衍生模块和 AsoulOpt，并关闭 Scene 的核心分配与高通的 Performance Boost Config。<img class="inline-img" src="https://s2.hdslb.com/bfs/article/b78cebe362474026d5abdcd637f6cba61352440272.png@1e_1c.webp" style="height:600px"><img class="inline-img" src="https://s2.hdslb.com/bfs/article/74af917c131fcdb2609cf48c4802f5a31352440272.png@1e_1c.webp" style="height:600px"></div><div class="note orange icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i>不必手动安装 cu_jank_detector.zip，启动不了。</div><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i>~~不要安装解除系统限制模块。这是与 Moka 重复的去温控模块，并且效果略差。~~不建议去除温控。</div><h2 id="dex2oat" tabindex="-1">Dex2oat</h2><p>手动 dex2oat 可以提高冷启动速度并降低 CPU 和 RAM 占用，具体选哪一个模式请自行测试。</p><p><img src="https://s2.hdslb.com/bfs/article/67d3336ea1ab8de166b5263c41f0af711352440272.png@700h.webp" alt="编译过程"></p><h1 id="%E5%90%8E%E5%8F%B0" tabindex="-1">后台</h1><div class="note green icon-padding flat"><i class="note-icon fas fa-circle-check"></i>这里假设您使用 ZRAM（2048MB）+Swap（1536MB）+Tritium Fiage（1.2.1） 方案！</div><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i>后台优化后并不是可以放飞自我了；相反，留后台会显著加大 OOM 的风险，尤其是在 OPPOR11 等 RAM 吃紧的机型上，请务必适当设置交换空间，并合理使用！</div><h2 id="%E5%AF%B9%E9%9D%9E%E5%BF%85%E8%A6%81%E8%BD%AF%E4%BB%B6%E5%85%B3%E7%A6%81%E9%97%AD" tabindex="-1">对非必要软件关禁闭</h2><p>使用小黑屋、雹等软件，以禁用方式冻结在后台死皮赖脸的软件。</p><h2 id="%E8%B0%83%E8%8A%82%E6%89%80%E6%9C%89%E8%BD%AF%E4%BB%B6%E5%90%8E%E5%8F%B0%E6%B4%BB%E5%8A%A8" tabindex="-1">调节所有软件后台活动</h2><ol><li>在 Thanox 的后台启动和后台运行中对<strong>用户应用</strong>设置<strong>全不</strong>，在任务清理和乖巧模式中设置<strong>全部</strong>，随后排除 Shizuku、输入法、三方 Widget 等常驻后台的软件。</li><li>切换过滤规则为系统，对软件商店等毒瘤适当设置。（我用类原生，没有经验，提供不了相关建议）</li><li>添加模板，仅打开任务清理和乖巧模式（仅点亮这两个开关，其他均灭掉），并启用自动配置</li></ol><h3 id="%E6%B3%A8%E6%84%8F" tabindex="-1">注意</h3><ol><li>对咕噜咕噜 Play 服务、咕噜咕噜服务框架和咕噜咕噜商店的操作可能会导致其它软件无法调用咕噜咕噜相关服务</li><li>对下载器与浏览器打开乖巧模式会导致下载通知冻结</li><li>对浏览器打开后台运行而关闭任务清理可能会导致其一直在后台吃内存</li></ol><h2 id="%E4%B8%BA%E5%BF%85%E8%A6%81%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%B0%8F%E7%81%B6" tabindex="-1">为必要软件开小灶</h2><h3 id="%E6%8E%A5%E6%B6%88%E6%81%AF" tabindex="-1">接消息</h3><p>某些软件（比如微信 QQ 等通讯软件）要接消息，但如果一直挂后台占 RAM 太多，可在应用详情页：</p><ol><li>打开后台启动（否则开机不自启动）</li><li>打开后台运行、后台保护，关闭任务清理（否则频繁被杀死）</li><li>乖巧模式（减少后台占用）</li></ol><h3 id="%E7%9B%91%E5%90%AC" tabindex="-1">监听</h3><p>某些软件（比如 Robot36、Thanox 后台记录、Scene 动态切换、Shizuku）要能够一直执行下去并试试反应用户操作，还有一些软件（比如天气小组件）要频繁获取信息，可在应用详情页：</p><ol><li>打开后台启动（否则开机不自启动）</li><li>打开后台运行、后台保护，关闭任务清理、乖巧模式（否则频繁被杀死）</li></ol><h2 id="%E6%95%88%E6%9E%9C" tabindex="-1">效果</h2><p><img src="https://s2.hdslb.com/bfs/article/5e24560d4bcad132eb0a52fe3375f49d1352440272.png@700h.webp" alt="开机静置五分钟后"></p><p><img src="https://s2.hdslb.com/bfs/article/5e24560d4bcad132eb0a52fe3375f49d1352440272.png@700h.webp" alt="一边水 Q群，一边在微信聊天"></p><p><img src="https://s2.hdslb.com/bfs/article/12ff98d20468deb923a5c073ea5fe0c11352440272.png@700h.webp" alt="使用一个半小时，再静置半小时"></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>旧手机优化计划之二 - Root</title>
      <link>https://www.lynx3.me/article/2a7bbe49/</link>
      <description>类原生真好用～</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/">刷机</category>
      <category domain="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/">刷机</category>
      <pubDate>Thu, 11 Jul 2024 05:18:32 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="%E6%80%BB%E8%BF%B0" tabindex="-1">总述</h1><p>本文将介绍三种主流 Root（Magisk、KernelSU、APatch）的安装，并介绍它们的一些技巧提示。</p><p>开始之前，请确保您已经刷入了 TWRP 3.7.0、<code>1170</code>底包的系统，并有且只有一种可用的 Root 方式。</p><h1 id="%E5%BF%85%E5%A4%87%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AF%86" tabindex="-1">必备前置知识</h1><h2 id="%E6%95%91%E7%A0%96" tabindex="-1">救砖</h2><ul><li><a href="https://kernelsu.org/zh_CN/guide/rescue-from-bootloop.html">救砖 | KernelSU</a></li><li><a href="https://apatch.dev/zh_CN/rescue-bootloop.html">救砖 | APatch Docs</a></li><li><code>logcat</code>、<code>dmesg</code>、<code>/proc/kmsg</code> 等抓取日志的方法</li><li>基本的 Git 知识</li></ul><h2 id="%E5%86%85%E6%A0%B8%E5%88%87%E6%8D%A2%E6%96%B9%E6%B3%95" tabindex="-1">内核切换方法</h2><p>切换、更新、修改内核有三种方法：</p><ol><li>从别人那里要来 boot.img 刷入</li><li>将内核镜像（.gz/.gz-dtb）用 AnyKernel3 刷入</li><li>将内核镜像（Image）用 magiskboot 打包入 boot.img 刷入</li></ol><h1 id="magisk" tabindex="-1">Magisk</h1><h2 id="%E5%AE%89%E8%A3%85-magisk" tabindex="-1">安装 Magisk</h2><ol><li>下载 Magisk 最新版 APK 文件，并安装到手机中。</li><li>打开 Magisk Manager，点击左上角的 “安装” 按钮，选择空白的 Boot 镜像文件，修补。</li><li>使用 TWRP 备份 Boot 分区，刷入修补好的 boot.img 到 Boot 分区，然后重启手机。</li><li>重启后会提示<code>需要修复环境</code>，不要点击修复，按返回键拒绝。选择安装，<strong>取消勾选</strong>“安装到 Recovery”，然后重启。</li></ol><h2 id="magisk-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" tabindex="-1">Magisk 注意事项</h2><ol><li>Wenhao 新版内核由于未知原因不适用 Magisk，将会导致手机随机重启入 EDL 模式或高通救援模式，并且无法使用微信视频通话和 QQ 视频通话，请勿尝试。</li><li>修复 Magisk 运行环境与更新 Magisk 时，<strong>务必取消</strong>勾选 “安装到 recvoery” 这个选项，高版本 Magisk （26.1+）会<strong>默认启用</strong>这个选项，错误刷入后会导致 WLAN 无法打开以及 Recovery 无法进入。<br>如果您不慎安装到了 Recovery，请提取卡刷包内的 boot.img 和 recovery.img 重新刷入对应分区，或者干脆重刷完整包。</li><li>“Ramdisk” 为 “否” 是正常的，是 R11 (s) 设备的特性，<strong>不</strong>影响 Magisk 功能。</li><li><s>使用 <code>Magisk Delta</code>（后改名 <code>Kitsune Mask</code>）将难以在除 <code>Kitsune</code> 自己的群组之外的社区得到技术支持，也不需要且无法使用 <code>Shamiko</code> 和 <code>ZygiskNext</code>（包括衍生）。</s> 不建议继续使用 <code>Kitsune Mask</code>，其不仅在社区内臭名昭著，而且已经停止更新。</li><li><code>Alpha</code> 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li></ol><h2 id="magisk-%E6%8A%80%E5%B7%A7%E6%8F%90%E7%A4%BA" tabindex="-1">Magisk 技巧提示</h2><ol><li>Magisk APK 相当于刷机包。当 Magisk 出现 “掉 Root 权限”“获取不到 Root 权限”“Zygisk 反复注入失败” 等问题，而三方 Recovery 又可用时，您可以通过将 Magisk.apk 重命名为 Magisk.<strong>zip</strong> 并刷入来修复。</li><li>Magisk 有多个 Fork，各 Fork 各有不同。若您想切换不同的的 Fork，除了在三方 Recovery 中刷入 Magisk.zip 外，还可以在已有的 Magisk Manager 中授予将要安装的 Magisk Manager Root 权限，并重新启动准备安装的 Magisk Manager。此时准备安装的 Magisk Manager 应当有 “无法获取版本信息”“必须重新安装”“修复运行环境” 等提示，重新安装即可。</li></ol><h1 id="kernelsu" tabindex="-1">KernelSU</h1><h2 id="%E5%AE%89%E8%A3%85-kernelsu" tabindex="-1">安装 KernelSU</h2><p>在第三方 Recovery 中把 <code>AnyKernel3-*.zip</code> 刷入即可</p><h2 id="kernelsu-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" tabindex="-1">KernelSU 注意事项</h2><ol><li><s>KernelSU 在 1.x 版本中移除了 non-GKI 支持，因此不适用于 R11 设备。R11 设备请使用 0.9.5 及以下版本。</s> R11 作为 non-GKI 设备应当使用 <a href="https://github.com/rsuntk/KernelSU">RKSU</a></li><li>KernelSU 在 0.9.3 版本中更改了管理器检测方式，在 ColorOS 6 上会引起卡二屏。请使用 0.9.2 及以下版本。</li><li><s>安装模块超级慢的情况暂时无解。</s> <a href="https://github.com/5ec1cff/KernelSU">MKSU</a> 引入了 Magic Mount，可以缓解安装模块缓慢无比的情况。</li><li>KernelSU 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li><li>KernelSU 没有申请 Root 权限的机制。在授予应用程序 Root 后，应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限！</li><li><s>KernelSU 暂未有较好的隐藏挂载点泄漏的方法。</s> <a href="https://t.me/pzqqt_c/5837">不建议使用 susfs</a>。</li></ol><h1 id="apatch" tabindex="-1">APatch</h1><h2 id="%E5%AE%89%E8%A3%85-apatch" tabindex="-1">安装 APatch</h2><ol><li>下载 APatch 最新版 APK 文件，并安装到手机中。</li><li>打开 APatch Manager，点击右上角的 “安装” 按钮，选择空白的 Boot 镜像文件，修补。</li><li>使用 TWRP 备份 Boot 分区，刷入修补好的 boot.img 到 Boot 分区，然后重启手机。</li></ol><h2 id="apatch-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" tabindex="-1">APatch 注意事项</h2><ol><li>更新 APatch 管理器后需进行两步更新：<ol><li>点击主页面更新以更新系统补丁（APatch）</li><li>重新修补并刷写 Boot 分区以更新 KernelPatch</li></ol></li><li>APatch 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li><li>APatch 没有申请 Root 权限的机制。在授予应用程序 Root 后，应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限！</li><li>若您使用了他人修补的 boot.img，务必重新设置密钥！</li><li>Scene 及其附属模块暂不支持 APatch，请勿尝试安装。</li></ol><h2 id="apatch-%E6%8A%80%E5%B7%A7%E6%8F%90%E7%A4%BA" tabindex="-1">APatch 技巧提示</h2><ol><li>可通过使用内核模块 <a href="https://t.me/tbthoughts/25">Cherish Peekaboo</a> 隐藏一些挂载点。（作者：GarfieldHan，暂停更新）</li><li>可通过<a href="https://t.me/apatch_discuss/76157">特殊方法</a>使用 Shamiko，但非常不建议。（作者：GarfieldHan）</li></ol><h1 id="%E6%8E%A8%E8%8D%90%E5%AD%A6%E4%B9%A0" tabindex="-1">推荐学习</h1><h2 id="%E8%87%AA%E5%B7%B1%E7%BC%96%E8%AF%91%E5%86%85%E6%A0%B8" tabindex="-1">自己编译内核</h2><p>如果您对已有的内核不满意，想要自己修改一下；或者等不及更新，按捺不住追版本号的激动，那下面的内容正合您胃口。</p><p>编译内核是一项较为浩大的工程，所以我们用 Github CodeSpace 编译。当然，您也可以选择本地计算机。但是，使用 CodeSpace 有相当的优势：</p><ol><li>自带完美的、几乎无性能损耗的 Ubuntu，免除安装、调试系统的烦恼</li><li>Ubuntu 是较为常规、通用、可靠的 Linux 发行版，有助于避免在一些小众发行版上的问题</li><li>编译内核很占 CPU、内存和磁盘 IO，会影响本地计算机的使用</li></ol><h3 id="%E5%90%AF%E5%8A%A8%EF%BC%81" tabindex="-1">启动！</h3><p>Fork 自己中意的仓库，建立它的 CodeSpace，各项配置拉满。</p><div class="note warning flat">注意：对于不同的内核，您可能需要不同的编译器！</div><h3 id="%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA" tabindex="-1">环境搭建</h3><p>首先，您需要准备好编译环境。</p><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">环境搭建 1</button><button type="button" class="tab"> 环境搭建 2</button></div><div class="tab-contents"><div class="tab-item-content active">~~选择一个合适的位置，下载 [Linaro GCC 4.9](https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz) 或 [Google GCC Android 9](https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+/refs/tags/android-9.0.0_r61)，记下路径。~~GCC 老矣！</div><div class="tab-item-content">~~选择一个合适的位置，`git clone https://github.com/kdrag0n/proton-clang`，记下路径。~~ Proton Clang 老了，让我们使用 [ZyC Clang](https://github.com/ZyCromerZ/Clang)！</div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F" tabindex="-1">环境变量</h3><p>设置必需的环境变量。</p><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">环境搭建 1</button><button type="button" class="tab"> 环境搭建 2</button></div><div class="tab-contents"><div class="tab-item-content active"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> ARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> SUBARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$PATH</span>:/path/to/gcc/bin</span><br><span class="line"><span class="built_in">export</span> CROSS_COMPILE=aarch64-xxxxxxxxxx</span><br><span class="line"><span class="built_in">export</span> OPPO_TARGET_DEVICE=<span class="string">"MSM_nnnnn"</span> <span class="comment"># R11 MSM_16051，R11s MSM_17011</span></span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> ARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> SUBARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$PATH</span>:/path/to/clang/bin</span><br><span class="line"><span class="built_in">export</span> CROSS_COMPILE=aarch64-xxxxxxxxxx</span><br><span class="line"><span class="built_in">export</span> OPPO_TARGET_DEVICE=<span class="string">"MSM_nnnnn"</span> <span class="comment"># R11 MSM_16051，R11s MSM_17011</span></span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="%E7%BC%96%E8%AF%91" tabindex="-1">编译</h3><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 拉取子模块</span></span><br><span class="line">git submodule init</span><br><span class="line">git submodule update</span><br></pre></td></tr></tbody></table></figure><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">编译 1</button><button type="button" class="tab"> 编译 2</button></div><div class="tab-contents"><div class="tab-item-content active"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make O=out sdm660-perf_defconfig</span><br><span class="line">make -j$(<span class="built_in">nproc</span> --all) O=out 2&gt;&amp;1 | <span class="built_in">tee</span> kernel_log.log</span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make O=out sdm660-perf_defconfig CC=clang</span><br><span class="line">make -j$(<span class="built_in">nproc</span> --all) O=out CC=clang 2&gt;&amp;1 | <span class="built_in">tee</span> kernel_log.log</span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="%E6%89%93%E5%8C%85%E5%86%85%E6%A0%B8" tabindex="-1">打包内核</h3><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">打包内核 1</button><button type="button" class="tab"> 打包内核 2</button></div><div class="tab-contents"><div class="tab-item-content active">1. 提取一个原版 `boot.img`，要求不带有 Magisk2. 回到 CodeSpace，依次展开目录 `./out/arch/arm64/boot/`，将 `Image` 下载下来备用3. 下载 Magisk.apk（适用于 Linux/，方法为解压后在 libs 里找到并提取 x86_64 的 `libmagiskboot.so`）或 [magiskboot](https://github.com/PinNaCode/magiskboot_build/)（适用于 Windows），得到 `magiskboot` 备用4. `magiskboot unpack boot-origin.img`5. 用 `Image` 替换掉 `kernel`，保持 `kernel` 名称不变6. `magiskoot repack`，刷入得到的 `new-boot.img`</div><div class="tab-item-content">1. 回到 CodeSpace，依次展开目录 `./out/arch/arm64/boot/`，将 `Image-gz.dtb` 下载下来备用2. 下载一个 [AnyKernel3](https://codeload.github.com/WenHao2130/android_kernel_oppo_sdm660_4.4.153/zip/refs/heads/prebuilt_ak3)<br>注意文件夹结构！3. 用第一步得到的 `Image-gz.dtb` 替换掉 `AnyKernel3-*.zip` 里的 `Image-gz.dtb`</div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h1 id="%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99" tabindex="-1">参考资料</h1><ul><li><a href="https://github.com/WenHao2130/android_kernel_oppo_sdm660/tree/747c8b9cf5968d20f155e6e7853d56d3d2e1d77c/.github/workflows">WenHao2130/android_kernel_oppo_sdm660</a></li><li><a href="https://kernelsu.org/zh_CN/guide/how-to-integrate-for-non-gki.html">如何为非 GKI 内核集成 KernelSU | KernelSU</a></li><li><a href="https://github.com/tiann/KernelSU/discussions/950">[基础教程] 如何编译一个 ARM64 架构的自定义内核・tiann / KernelSU・Discussion #950</a></li><li><a href="https://github.com/tiann/KernelSU/discussions/952">[基础教程 2] 如何使用 AnyKernel 3 打包内核・tiann / KernelSU・Discussion #952</a></li><li><a href="https://apatch.dev/zh_CN/install.html">安装 | APatch Docs</a></li></ul><h1 id="%E6%8B%93%E5%B1%95%E9%98%85%E8%AF%BB" tabindex="-1">拓展阅读</h1><ul><li><a href="https://github.com/osm0sis/AnyKernel3">osm0sis/AnyKernel3: AnyKernel, Evolved</a></li><li><a href="https://source.android.com/docs/core/architecture/bootloader/dtb-images?hl=zh-cn">DTB 映像 &nbsp;|&nbsp; Android 开源项目 &nbsp;|&nbsp; Android Open Source Project</a></li></ul><h1 id="%E9%B8%A3%E8%B0%A2" tabindex="-1">鸣谢</h1><ul><li><a href="https://github.com/Wenhao2130">Wenhao2130</a></li></ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>旧手机优化计划之一 - 刷机</title>
      <link>https://www.lynx3.me/article/d654e311/</link>
      <description>类原生真好用～</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/">刷机</category>
      <category domain="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/">刷机</category>
      <pubDate>Thu, 02 May 2024 11:18:32 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>作为一个信息学爱好者，怎么能不搞刷机呢？作为旧机型用户，我已经遭受绿厂迫害数年了。一气之下，我便把手机刷成了类原生（DotOS 5.2 Vanilla）。在使用了数月后，有了些许经验，分享一下。</p><h1 id="%E6%9C%BA%E5%9E%8B%E6%A6%82%E5%86%B5" tabindex="-1">机型概况</h1><p>机子是 2017 年发布的 OPPO R11，CPU 是骁龙 660 AIE，运存为 4GB，闪存是严重磨损的 eMMC 64GB。电池是原装的 3000mAh 的（现在只有 2200mAh 了）。</p><p>绿厂只给到 Android 9 ColorOS 6，连暗色模式都没有，根本满足不了我的需求。于是，我决定刷机。</p><p>OPPO R11 目前主要由 CY 团队维护，故绝大多数资源来自 <a href="https://d.cyteam.cn/">CY 团队的下载站</a>。分享链接有密码，请自行加群获取。</p><h1 id="%E5%88%B7%E6%9C%BA%E5%85%A5%E9%97%A8" tabindex="-1">刷机入门</h1><p>在此，我们需要明确几个定义：</p><ul><li><strong>底层</strong>：是指基本的驱动等最重要、最基本的文件，即 “底包”。R11 (s) 系列底包版本号多为 <code>X.nn</code>、<code>nnnn</code> 或 <code>nnnnnn</code> 格式。由于并不总是能够提供三种版本号，请自行辨别。</li><li><strong>系统</strong>：<ol><li>字面意义上的系统，包括全部可被刷写的分区</li><li>分区名，通常指 System 分区，可能同时也包括 Boot 分区和 Vendor 分区</li></ol></li><li><strong>A/C</strong>：为了避免歧义，本文中 Android 与 ColorOS 均使用全称而<strong>不</strong>简称为 A 或 C</li></ul><h2 id="%E8%A7%A3%E9%99%A4-fastboot-%E9%99%90%E5%88%B6" tabindex="-1">解除 Fastboot 限制</h2><p>由于在大多数稳定版系统中 OPPO 对 fastboot 进行了限制，所以我们必须降级或升级至合适的版本进行解锁 BootLoader 的操作。</p><h3 id="%E6%97%A0%E9%99%90%E5%88%B6" tabindex="-1">无限制</h3><p>若您的版本号为 <code>A.01</code> / <code>170529</code> 或 <code>C.17</code> / <code>1170</code>，恭喜，Fastboot 畅通无阻，您可直接开始<a href="#%E8%A7%A3%E9%94%81-BootLoader">解锁 BootLoader</a>。</p><h3 id="%E5%8D%87%E7%BA%A7" tabindex="-1">升级</h3><p>若您的版本号小于 <code>C.17</code> / <code>1170</code>，则可以下载 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E5%AE%98%E6%96%B9ROM%EF%BC%88Stock%20ROM%EF%BC%89/%E5%8D%A1%E5%88%B7%EF%BC%88Flash%20Through%20Recovery%EF%BC%89/R11_11_OTA_1170_all_PDZfMhjgV0q1_b68a39.ozip?sign=IY5sogNDdcsn_0Y7V9WT6SSAK73dy6YUPLk92BpdWnk=:0">R11_11_OTA_1170_all_PDZfMhjgV0q1_b68a39.ozip</a>，在<strong>自带</strong>文件管理中打开，升级至 <code>C.17</code> / <code>1170</code> 以解除限制。</p><h3 id="%E9%99%8D%E7%BA%A7" tabindex="-1">降级</h3><p>相信决定对 OPPO R11 刷机的同学大多数应该更新到了比较新的系统版本吧？如果您的版本号为 <code>C.19</code> / <code>1190</code>，则必须采用降级法。由于此时手机处于严重受限状态，所以我们只能采用最底层的刷机方式 9008 刷机（这也是售后修手机的方法）进行降级操作。</p><ol><li>打上<a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%EF%BC%88Software%20Tools%EF%BC%89/%E9%A9%B1%E5%8A%A8%EF%BC%88Drive%EF%BC%89/CYteam-Services-Tools%20For%20Win10.exe">驱动</a></li><li>下载 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E5%AE%98%E6%96%B9ROM%EF%BC%88Stock%20ROM%EF%BC%89/%E7%BA%BF%E5%88%B7%EF%BC%88Flash%20Through%209008%EF%BC%89/R11_11_A.01_170529%EF%BC%889008%E7%BA%BF%E5%88%B7%E5%8C%85%EF%BC%8C11%E3%80%8111t%E5%8F%AF%E7%94%A8%EF%BC%89.7z?sign=EjY5LRISMx_UXC7jbayarsYXffcL_IEzOxuSgBCMpto=:0">R11_11_A.01_170529（9008 线刷包，11、11t 可用）.7z</a> 和 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%20%EF%BC%88Software%20Tools%EF%BC%89/%E5%88%B7%E6%9C%BA%E5%B7%A5%E5%85%B7%20(Flash%20Tool)/R11-MsmDownloadTool.exe?sign=hKnlxjiE602PHN3sgJpqSm_El2EMBhrUt5QAVEyPug8=:0">R11-MsmDownloadTool.exe</a>，选择对应代号（R11 的代号为 16051）；手机关机，同时按下<code>电源键</code> +<code>音量+</code>+<code>音量-</code> 进入 EDL（9008 模式），连接手机至电脑，按照提示刷入即可。</li><li>A.01，启动！</li></ol><p>切记保证数据线连接良好，慎防数据线意外松动。除此之外，基本不会出现什么问题。如果出现诸如 “握手失败”“握手超时” 之类的错误，请尝试重启电脑与手机、更换数据线或 USB 口、重装驱动，有条件的更换电脑。</p><h2 id="%E8%A7%A3%E9%94%81-bootloader" tabindex="-1">解锁 BootLoader</h2><ol><li>打开开发者选项<br>打开手机，进入设置，找到 “关于手机” 或 “关于设备” 选项，找到 “版本号” 或 “型号 “一栏，并连续点击数次（通常需要点击 7 次），开发者模式即可成功开启。</li><li>打开 OEM 解锁和 USB 调试开关</li><li>下载 <a href="https://developer.android.google.cn/tools/releases/platform-tools?hl=zh_CN">SDK Platform Tools</a>，并解压到合适的位置</li><li>手机连接电脑，重启到 fastboot（或执行 <code>adb reboot fastboot</code>），然后执行 <code>fastboot oem unlock</code>，终端应当提示 “unlocked”</li><li>重启，手机应当有一橙色感叹号（<code>&lt; ! &gt;</code>），提示 “数据有危险”，并要求你访问<code>g.co/ABH</code>。若有，则解锁成功。</li></ol><h2 id="%E5%88%B7%E5%85%A5%E7%AC%AC%E4%B8%89%E6%96%B9-rec" tabindex="-1">刷入第三方 Rec</h2><ol><li>手机连接电脑，重启到 fastboot（或执行 <code>adb reboot fastboot</code>）</li><li>电脑<a href="https://d.cyteam.cn/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R&amp;K%20Series/R11/%E7%AC%AC%E4%B8%89%E6%96%B9%E6%81%A2%E5%A4%8D%E6%A8%A1%E5%BC%8F%E9%95%9C%E5%83%8F%20(Third%20Party%20Recovery%20Image)">下载合适的 Recovery 镜像</a>，执行 <code>fastboot flash recovery twrp-x.x.x-xxxx.img</code></li></ol><h2 id="%E5%88%B7%E5%85%A5%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B3%BB%E7%BB%9F" tabindex="-1">刷入第三方系统</h2><ol><li>从<a href="https://d.cyteam.cn/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R&amp;K%20Series/R11/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B3%BB%E7%BB%9F%E5%88%B7%E6%9C%BA%E5%8C%85%20(Third%20Party%20ROM)">第三方系统刷机包 (Third Party ROM)</a> 内下载喜欢的包</li><li>这些包大多是一体包，直接刷入就好</li></ol>]]>
      </content:encoded>
    </item>
    <item>
      <title>网站速度优化指北</title>
      <link>https://www.lynx3.me/article/a63f345a/</link>
      <description>慢死了啊啊啊啊啊啊！</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <pubDate>Mon, 17 Jul 2023 00:00:30 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>在开始之前，有这么一个网站：<a href="https://files.lynx3.link/html/loading.html">https://files.lynx3.link/html/loading.html</a>。</p><p>这里面引入了五套字体，每套字体 3 个或 9 个字重，共计需要加载 1000 ～ 2000 个字体文件。那么，这个网页的速度与性能，会差到什么程度？</p><p>由此，我们引出本文的话题：如何优化网站速度？</p><h1 id="%E5%87%8F%E5%B0%91%E4%B8%8B%E8%BD%BD%E8%B5%84%E6%BA%90%E7%9A%84%E6%95%B0%E9%87%8F" tabindex="-1">减少下载资源的数量</h1><p>更多的文件意味着更长的加载用时与渲染用时，因此应慎重引入。以 Butterfly 主题为例，若不必需某些组件（如 abcjs），则应将其关闭。若不明确某些功能（如 Layload）的利弊关系，则也不应轻易启用。常见的有：</p><h2 id="%E5%8A%9F%E8%83%BD%E6%80%A7%E9%99%84%E5%8A%A0%E7%BB%84%E4%BB%B6" tabindex="-1">功能性附加组件</h2><p>附加组件包括 abcjs，Mermaid，Katex / MathJax，Aplayer，Firework 等。这些东西若非必需，不应以多多益善为由开启。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># eg.</span></span><br><span class="line"><span class="attr">aplayerInject:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><p>此外，还有诸如小挂件、弹窗等，同样有一定的性能需求，可能也会对页面带来负担。</p><h2 id="%E9%A2%84%E5%8A%A0%E8%BD%BD" tabindex="-1">预加载</h2><p>在双方网速足够快时，开启它作用并似乎不明显。但对于部署于 Github Pages 等国外平台建议开启。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">instantpage:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h2 id="%E6%87%92%E5%8A%A0%E8%BD%BD" tabindex="-1">懒加载</h2><p>在图床速度足够快时，开启它作用并不明显。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">lazyload:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><h1 id="%E8%B0%83%E8%8A%82%E5%8A%A8%E7%94%BB" tabindex="-1">调节动画</h1><p>很多朋友为了网页美观性往往会添加加载动画，但正如前面所说，只要有一条资源有问题，就会阻塞整个加载动画，致使网页迟迟显示不出有效内容。纵使是非全屏式动画（pace_css），也仿佛在提示用户 “嘿！我还没加载完呢！” 十分影响观感，建议关闭。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">preloader:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><p>但是开启转场动画可以掩盖加载时的闪烁，提高美观性。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">enter_transitions:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h1 id="%E4%BC%98%E5%8C%96%E5%9B%BE%E7%89%87" tabindex="-1">优化图片</h1><p>图片作为媒体的重头戏，在网页上不可或缺。随着图片体积的增大，图片所带来的负担也不容小觑。优化图片的要做的是减小体积，其方法有：</p><ol><li>手动降低分辨率、位深、色彩精度之类</li><li>使用工具进行无损或低损压缩<br>参见：<a href="https://butterfly.js.org/posts/4073eda/#%E5%9C%96%E7%89%87%E5%A3%93%E7%B8%AE">Butterfly 安裝文檔 (六) 進階教程 | Butterfly</a></li><li> 将 PNG，JPG 等格式转为 WeBP 或 Avif 格式<br>此类图片发布日期较新，有许多新技术以及新特征（比如在保证质量不太差的前提下，最大程度压缩体积），适合网页使用</li><li>将 Gif 换用 APNG 或 MP4<br>Gif 不仅体积巨大，质量差，渲染还十分费力，不如直接用视频</li></ol><h1 id="%E4%BF%9D%E8%AF%81%E8%B5%84%E6%BA%90%E5%8A%A0%E8%BD%BD%E7%95%85%E9%80%9A" tabindex="-1">保证资源加载畅通</h1><h2 id="%E4%BF%9D%E8%AF%81%E6%80%A7%E8%83%BD%E8%89%AF%E5%A5%BD" tabindex="-1">保证性能良好</h2><p>在引用资源前，应确保来源稳定可靠。若其速度不稳定或服务时好时坏，可能会导致卡加载动画或卡白屏。</p><p>应对资源和服务进行维护、监控或选择可靠的来源，引入前应进行<a href="https://itdog.cn/">多地 Ping / HTTP 测试</a>，确保多地访问通畅。</p><p>若确因资金、政策、网络环境等原因不能保证服务时时可用，可用备用 URL 或 IP 属地判断等技术缓解。具体按可以参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p><h2 id="%E4%BD%BF%E7%94%A8%E5%90%88%E9%80%82%E7%9A%84-cdn" tabindex="-1">使用合适的 CDN</h2><p>打个比方，假如在上海收快递时，件儿从苏州还是美国发过来快？显然是苏州！CDN 也同理。市面上常用的公益 CDN（JSDelivr，&nbsp;UNPKG，CDNJS）等多没有大陆节点，使用此类 CDN, 数据包往往要漂洋过海从大洋彼岸发过来，速度堪忧。</p><p>以 Butterfly&nbsp; 为例，可在配置中将 CDN 来源设为 custom 以使用可靠的国内 CDN：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">CDN:</span></span><br><span class="line">  <span class="attr">third_party_provider:</span> <span class="string">custom</span></span><br><span class="line">  <span class="attr">custom_format:</span> <span class="string">https://registry.npmmirror.com/${name}/${version}/files/${file}</span></span><br></pre></td></tr></tbody></table></figure><p>其它一些优秀的公益 CDN：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Custom format</span></span><br><span class="line"><span class="comment">## NPM(推荐，CDNJS 并不总是提供最新版本的包)</span></span><br><span class="line"><span class="comment"># custom_format: https://cdn.jsdmirror.com/npm/${name}@${version}/${file}</span></span><br><span class="line"><span class="comment"># custom_format: https://npm.webcache.cn/${name}@${version}/${file}</span></span><br><span class="line"><span class="attr">custom_format:</span> <span class="string">https://registry.npmmirror.com/${name}/${version}/files/${file}</span></span><br><span class="line"><span class="comment"># custom_format: https://npm.akass.cn/${name}@${version}/${file}</span></span><br><span class="line"><span class="comment">## CDNJS</span></span><br><span class="line"><span class="comment"># custom_format: https://s4.zstatic.net/ajax/libs/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br><span class="line"><span class="comment"># custom_format: https://cdnjs.webstatic.cn/ajax/libs/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br><span class="line"><span class="comment"># custom_format: https://sf.akass.cn/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br></pre></td></tr></tbody></table></figure><p>若国内源无法包含所有所需文件，还可以给某资源设定单独链接。例如：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">CDN:</span></span><br><span class="line">  <span class="attr">option:</span></span><br><span class="line">    <span class="attr">busuanzi:</span> <span class="string">https://cn.vercount.one/js</span></span><br></pre></td></tr></tbody></table></figure><p>若站点面向全球用户，则可选择 CDN 竞速等策略。具体按可以参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p><h1 id="%E5%8E%8B%E7%BC%A9%E6%96%87%E4%BB%B6" tabindex="-1">压缩文件</h1><p>HTML/JS/CSS 文件中的回车、部分空格、注释等仅起提高可读性的作用，却仍占用相当大体积，因此应将其删去。</p><h2 id="gulp" tabindex="-1">Gulp</h2><p>参见<a href="https://kmar.top/posts/7d9fb37e/">网站加载速度优化方案总结 | 山岳库博</a></p><h2 id="hexo-%E6%8F%92%E4%BB%B6" tabindex="-1">Hexo 插件</h2><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">方案 1</button><button type="button" class="tab"> 方案 2</button></div><div class="tab-contents"><div class="tab-item-content active">参见 [Hexo 压缩静态文件 | Argvchs の小窝](https://argvchs.github.io/2022/08/27/hexo-minify-static-files/)<figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-html-minifier hexo-clean-css hexo-uglify --save</span><br></pre></td></tr></tbody></table></figure>在博客目录下 `_config.yml` 添加如下配置：<figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">uglify:</span></span><br><span class="line">  <span class="attr">mangle:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">output:</span></span><br><span class="line">  <span class="attr">compress:</span></span><br><span class="line">  <span class="attr">exclude:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">"*.min.js"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">clean_css:</span></span><br><span class="line">  <span class="attr">exclude:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">"*.min.css"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">html_minifier:</span></span><br><span class="line">  <span class="attr">collapseBooleanAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">collapseWhitespace:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">ignoreCustomComments:</span> [<span class="type">!!js/regexp</span> <span class="string">/^\s*more/</span>]</span><br><span class="line">  <span class="attr">removeComments:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeEmptyAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeScriptTypeAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeStyleLinkTypeAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">minifyJS:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">minifyCSS:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content">curbengh 的 `hexo-yam` 插件<figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-yam --save</span><br></pre></td></tr></tbody></table></figure>在博客目录下 `_config.yml` 添加如下配置：<figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">minify:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">previewServer:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">html:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">  <span class="attr">css:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">  <span class="attr">js:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.min.js"</span></span><br><span class="line">  <span class="attr">svg:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.svg"</span></span><br><span class="line">  <span class="attr">gzip:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">brotli:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">xml:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.xml"</span></span><br><span class="line">  <span class="attr">json:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.json"</span></span><br><span class="line">  <span class="attr">zstd:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h1 id="%E7%BC%93%E5%AD%98" tabindex="-1">缓存</h1><p>部分服务器是没有缓存功能的，这意味着每次访问都需要从服务器下载资源，既浪费流量，又拉长加载时间，而 ServiceWorker 就解决了这一难题。ServiceWorker 可以对缓存进行合理调度，减少内容的下载量，对于速度提升十分明显。</p><p>具体部署过程此处不多讲，请参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>加密测试</title>
      <link>https://www.lynx3.me/article/53963325/</link>
      <description>
        <![CDATA[包括 Markdown、数学以及标签外挂。<br>密码为 114514。]]>
      </description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <pubDate>Sat, 03 Dec 2022 00:18:19 GMT</pubDate>
      <content:encoded>
        <![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉, 这个密码看着不太对, 请再试试。" data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容。">  <script id="hbeData" type="hbeData" data-hmacdigest="efa9172a88d3d45717645e49ee824f79fbeaceef6a86bbdb4ec8e562f57d6a8b">8c83c1fd70b2001f095a68c8e758fb295c4f063044f716f40246118917c673cbb8546c8786b552befa1a76b8c63c3ff1923feb89464208c931300399cee73d69fac3c8f611ceb1e456ec48a19127fc1ebc6dd94e1eb754697a290efbea160fb49825f4bf5e46b90a53b8fb01e5ea6d8770adae7f5f7a847c2ff6b49843b0f46e44d453ea350833e07804a3b439c5eba4f8a1e465cd769461c0e2ec3a4cf403e2ccd4afbc2a7c70a986d1cd57dcd8a7ac389d747e126bb38ab39f3f8b1b4465d2b2214426b0e23eeb4cda61613c943fd4569309b5cda28c7eed2d3dca70db542fafe79cb13aedfee9261cb46aa273e0ef0ce1ff60db892b1686bb6d5a749ae74002022ac3a7df252904f65ce40053e89dc66af611a7b328fdc9ccdd7af8155baa8f088133d93a0610ca880a63e6872026effdf4d9b10ad5f7c18b620fd4fbaa4da882fef44b7ea55de4491f6913f002fe79203ad6b85af2a2cbc364efaf259b351f291d4c3ab547dc028d9b6963a3c41e63405b783620f86410bc92181632da78d6efaca189fe731077d70ac54cdb3fec5f2a8ee9732cf5770b71fc83a6d296da71380eb433e78adebb37e1393823ff9d3ab53e8a60da7194ff9a60ff4badbf93f269d7d115d4bc998363c774dac347f5cab1147f68665a30014e8cf2522c26ba0c6053d9623bc519249a1c6790124d75db0044b3ff0da1bb51340d062779efff0bb015a59f4e62e84e640f424a3a29950a94ac89a7e4bfca3212d941c2536da61ea0ef4228299006dc0b40ac529042f897e1983dfe26adaeb42d8c79480831e070d38b6cadb88a738f857a46d1153c1e85f5b40c8b2105def0f2cb3ad70aacf494d279d20f6fa799de378dc482f77732847469f477134ffe18d55af4d4672395b8badc6373c5597f28b7891b2b780545023a27c609404089ce25fb98e878551571fe97548d1d8b08b1de915f90dbd08518515f836e9582e5baae9127d525a410b1c2491b0b7b3e82da37920f0050167a7c43767873ba3d96b3fb8c32f5df5cd68835655d580860834630221af21309cb52d24ad8fea93202b287715e61d279f00b6541b71a07dc0931f4e4c7098bbe5017e88585348f810167f5f0171b10b2d7a1f106a35062f3a194b3ae67219181c2454a0c7051928195da7defcf076f1cf334f4fdc1cf1f983d7edf59537f6d6c179c946b42f3578de12317dfacc0cdb7a41f9dd9a15e25b615ab28c5d92f0454021528f33e3ea7b7d465c9c7651f970b3030ab81c9a7958085747eeda1771b149086f920d9fe441ca130b0b1dd3e12e340b513126abb098cb97efc348d91deabf09d5510dc6ad71f8d2bba657192aef706a597406f30f8e6d4c1be4b4ee78c8a2c91cbadd1c5fd8fed725d37f9b5500b70c929c6dfdd1fc949faf8355a939bb2f26d76f9831f59a0b3d3ec7ff1952ad96081236a33f67d356a183d5201ce78f2ae292ef3d37dcd463d9b6a46c87da3874446fd121f7262bdfc8a20a1c3f4a306579a0fc3f164a2f3565e1f89e23ff6467466a2bae5b06f270107a7f907b5223960f17b77cf961ec75e9a802fd27131147d98419ee7a503387c0d857df6e8f1872a620bca558ee70f16649f95052d25e7b76ac65bcffd4cf8c9d48fa9f031586df79d56af59c1c0b9488322d33d18c2d1bc805c159ce667de8fb6ed0bdc1d99452a44ba053da54a8d29c8b5defb8311871d57fc8799fd58643c7fd149a69599a8533806afa0862eea7e64b1922fe7989eeffdf8e613d00d2d9baa495aa2aa82971340f8bf64f915e5537f7463eeb5614a6c812e5753ded6f5f50c9b1fc4ce2c7626cb721dc78d54fb245f28d7d661d267ecaad7fd5829fa0e0cc0bdf7919529bb910456bd76332d63e5ed6534b32b6fd5d489518154d33a0282bafb95d7889e245ae918b4b10bd3e7c051fbadc0006008378f54db06f84849f6df63ecf2592989dfdbae325a47f9cf719090c0ab4fcaf7f56f436e5ec35032bc11113e89da0342c48ef84f23d8a5ac390c5f8503a5b57983d44e3560c20b2b01597e39fb3c61dcf73028b79bcec524ceb2d4afad517b45195bd082802ce31fd6145d1b1ae545bae204f2c3f212463d988a01f2320a42c897e935ca655d834f3ddcb2f28085875501e9379cd73e16606ced3f99a1de6161edf0773e6c0c65a9bd183539266804b473c30f1ff3b8c056c2ddf3a45e9b17d61cfb4dc572bee2a6492facf28cdabb87c98ddb63fd6ad50cc462ae5c3fe58e6872670148abe3a3ca3cf24066e0e696341ce2c185c037d332bf722de21934aee8c9b7a27077371f0ff7afde0e56f28a0930f365123d170f898582e7b0c7e0905d37f4e3c7cb8a8d4553523733bda82f0f942d7675dc1a4c017ffc73960718449c0385d2462549e214deb45ea38cd8210896611da2e9e5b112af7ca394fac1a550b267fb5d077b6a10e3c53f04bb113508e6c3bd66ede9ab5cd6490e448bee1ac85040009eae8dd432083c370dbbf0ce49c9bbb71386470e2dc8146b2219a882559a146ab70a94ac621c189da8e90fa62747332dd707cf1925e63f1d4860a465703751a62ea79eae4e910aa3d823d29f44c9c29d286e1f6717ad4f280913a40c8c43b04496fb08043bdc131a77f45e13aaeb731a1f7b61bd7efa323f73312b9d1c3d8f301d63750bb6ecba39605d4ae7dbf7f5764daaaefc9524b094135adf07955c12a43eca92a262263070cceb7e074a0362db06e4fad48a5675e3ceac79b91475860190df7cbde86afc89ebb7c5a719ee4f7f8a5c3af809ee2b2b7a32e8d01babf0ec4297500e75b4bead88bd7260446f1d4604439ec61218a2525bf5cf7e8cf5f7d8c6d1aeabd1465054cddb5407c4c7944ac852609c71671fbe05bd961d7cc3fde2e05eb85a154c1157942b23d29f8a4c4bf8fc8d9f3013463cd0c301f9047141b29ebf3325cf31623e487c4f85ca97f9a37c97911fb69eac7dde80140248f4312ab1a5fa11dd79df2620d846b05e16ef6ae617120396bb23667889ddfc0cf3449fac271e6e7003ef31268fef2ef545c562b388e22d95637c2aaf081e7b01b7ecbaf83f18246c6ce0c9cefbe0dfed9786672c53aaaa1e031fc2e434e597dc30bc494179a6bf9475509faf04fa075366622e00ab9e63d161f7389e2380e8ca1a5f36320633da3b883c3f91db9b9902abd249c4db845efa0db22176b570baba3335c03144c4b0253ebe5bf2471f149348e0b194c29831715ca4d7fa70a123d0307c51626f8245a3512feeb26386dd00666d0053e517fe0b5fdc71dc0dc5335930ed8561c28e4c02621266020b0c657c15df2b782781ef21128f56f837c38acd89b3936594aea0f477ecdd572726cc98e79e0fbb6aeb42e4383b7bf66f2836bdd34336007265b33b74862392765827096622731cd1966e566f4e2fdd6e5476baa7827d77cfe3135846ed31886bb0cda6c764c127296bc5ec1fa6476b8202636c9c4370cb79d2073e92f2be30774fc51ea0f428764c1db5b4a6eb264d2cab377229565fd581675598907205f1de0ce8ca516543d85cdec72f6fdea1e7cb43110aa1726ebcde4311554b1e085cc9510a9e9c3fc8c32ee39946560e2c21a3ad1b4ca7deab64c695bc0faf2f0d7c51b23944016d9a24b7e2fb7921a5a8b2a87e41d13271cd53011134fc337f99842200156991159cf1b0e4725de63dfc799db070fefeaf338dd1aa642790ba249cc7929ee373e424ea91372e992eeca05277a9a6ee663a718c83fe6b0de1e5fc3b993b7172b4c7380b1a0e2ea81fa7327df9ee49acc08276657081cf8f0a74c5a37902adf2b60f78000048517b0822b0261162adb2579ea9ce660c9082b2ff9bf43a90a6341a4f591fa0390d9179a5f177f1cd03a2f1715adf22f8b4397bb091f6f60d676a8013b012cfd9a6e69f52b8f21513d4fec9ae62e4326649a5d4c25fa45462a65d3a4b2317fe9be06b8912a1eac1384cc5c41705d04245adc3b99e60b5d9cb4accd94f799f30a76c180a946b3e29cd7b100db2add572aa2e4c14a87f02119e3505fcaaf4c56c1acf9775e6f2674e311772c95174b62c227f7f7a5c8ef6403914a7442b0622fbaf384523fd5f0803c1bc8e42ee14b8eee214531d88739a51e681b88bbaefc92c826f2c89248c807fc4cac92ef120d550e769db26e527bea15c671e9d4f751c0e9818efdf9ccc5ec2c70fbc2a6f8d0f28d0fe2ae7feea47b85a59479a5aeb2dcf640c22dc68759253e1c240a3fabfd10b3721efe683a7c0fe0142593abcfc2f5c08dc7465d6abbc9b9015cd29cb53fcfb048fdd417f70a078069c945d10fcccf4aba4d4a94fc311b1ad2a625dea426271ea7cfa07901b90e866c5858c0067bd6e216b900a8d8f8c9984d200e123faf42fc9c720ffd557d86f1f006890c0cb0d9390a05d0ca4795f0fb6d82ca270bf6b490781cd634a7203ce387b1389112ed4b0db3797a8ea3d19fd2813ebdd39a9a0ed0399881595640ea72510031bdf88fc0feb73330600c514f36e5fec310a92f641420df8740e5f208ab383cf697610dd56b2270a8e41bcd63c708c45bb1965d5e39d8319b5dbe6fa0b31eda63e60fcd9113ced07c627b4a48df92ad57702441fb9f8069675fc2befbcc1eaccb45fa31433cfee5b2b6c8c2a2ca6c3e5f27a3a75fd708911dc5cf5fbb5db4ef5e4b11d3405fcdef94a0d637503043dce0cd0ba2b0bb28855734924a550988ad91cb46e9e1e7d254aa30fcae157fde67d8b484720c4eacc73bab22929e59f63cfe2ddc15238d8ed4351b9b659e158196935eab02bb62173e73f032b9e55521437ff56472405abdb88d5ddc6fd767a20c57e7833b820b185c6bdfafba142ddcda3cbe22d2bc11f4a3d77268b736978560b0982a3dc5403c59c64f42d5114f0ed534c6e40e2c76da5bf6981088b51f560d4246e64ba2e5f736c6bc4bd9d9a85d33dc430d15d1d8d6665750ab9ca84849310c1cffa5d30edcb5ec93db6c8c60f722d9d6e125925b37e6d47566154063324ad1cc51b5390fe620b72db7da7cc8a0e846bc0175461ed9dddd0e6c69d14b67336e1f4d47847976b1d367d51e2c701e04576a62704740851ad0b48bb0d5dd0440116d268f3e456369ff6be911d16bd23511fb9a793633b39ee9ff449e954ad75497cfefa7e183d9c3637849f654d17114797cd8054b17d38333b6ee44cf73fa1d3a2dc014f883da104bfa766733d75f2c2e71b30107bb520f1aab00bf099fe14322636d3472ea8a41ef9360bc057ee1309c1f531a5b6e2b1d86d0e3a7f34f6968735bef71f4bae811c70cd4c8707dac2cbaf51367779281b86563cdbe59c562f182b81d00d4b761eb1aef755d48aeb3ed1e6cb99f90a38cc30ea2cb4f096a9878da088496735296af0f51db466a2cac68509e78f0ba5d897f65b5c30c353509fc13c75264f529b8eebccff0fae59ec44d2cf31f6d51afb4508f9ccb94a7aee025a7138102a9e4c2e3f056a43463d45b6a82d1fae915f6d67d571fae83d0d76c57f1c79b4cc2f230916f4979b3dce3c584232dfb151853c5ff2a97ae20c34c5f6e42aa84cb254afc00f87cf612f5a30765936f69ace02e85ec4e93dca9a0f4d4887cc8e3e94248ea45c74fa227b86912d432ab60493125c67e6ecc212ed4f7158c550390012185b54be7ae94c98f347f10cc43a2d84b1266e99ba1ade107e6801c38b0a6101fac2c27a1b74a0079459d6f576b03bf76f2d86add6ce909939581ddcd9751ebfa9d6259c36f291bc64020b90f8868c3cdcd1d7d3f01623cbaa3dde5b1c7d42bb738c0ea85af1e0a6d5caf0cc8fcfeb8a7c5a2c5e2d61f8a468dd1b8ac6de00de163eeb37c40e1073d4969e9d3113df7896f4fbfbd67bb0fe33600cc3913e7001758f9b485193afce0bd3650ee882b7ff002747d2eedd15f2ea31bb61a8303d45d5daf729a88d5eb57dbbcf472cd753ae4b5b7f3a3c9d0459f4b98b9c9bde16862329636f58884eb4d221366267585fb4bf4d832472ca0b532797009886009f42843aa2f69ae39ac8d5530f946483b5912869294e9c16de535aaae5ad8b6eb277a692ed47fae5cdb986da7771c1ebb549c9e1a9527a818f089eb4c2097a8d923fce9892f78b1f28128a1fafcfb2c3ef9e356774ddb68d5f6adcb10f9e235dd13022e900d5987cb5ce3d94df15464239cdbff66d0281bb356641d3e40f0c735208fbdb8fcfa87e9ec02b035fe11e77556f10f2a8c08b72edaefcaca658b68bb5daefe2c87b3a79322d6df4d31b18f2297db6ac326d6e9a88c1d89ebeff000a78aa89b948f30840f0b681eec7905390f181684d901ea4f748cd8b0282e40dfe0bf15f9e6037cc51f00fe39a70d2fd2882dcd21dc0aa9b77b18296512d0611c29a8f2c9e44ffc32da41e06a03d80978bd031ca766d9975e78d78f5187321a39cd0412cadd7076bcc74f4d8eda883f94bc4c1d12a63563de159f23fc66a256ededb572f634976b5afc8420ac947d59c9c8df3e280f7f6cad4abacc77f329b769340a3143c856310d66f49987b895658dd7fd7782f24b807abc93e1e59d63bc6bff0ad3c254f1d3db5890991bd08a5f479eb053829e741d0d9b27e463091b95630637ab743d884fa3ca2d0fcb94d9e73930a93541ba2183979672465812d29bcc1665c4abef6df69c03563401e883ecf8867eb3a3ba8a0c3cc32905faf0e87e441bd1d361eb97904b2f288a43c28077f0283e3311f23502b2998a0739f3612c738a83059409dcc05652f02d57ba985881b060d3915e9f142153e4d17ab1cc7056367675e160d9716e7d2b8ed5e192c4a8a029c078394fbde64562ac87c573c893b352a4a4457f6e5fd72da9c695a5b0c87bbed1428b9335d1f7c10e4e2089435ceafe66cbe8c8d65056366b35eee01c4d1b4d6a089bb87b50e5d1bfdfea8340a50899a80d6a6ce164af2673e16b3f80b1febc08e1c8ab0d907e5d95aed6352182e3ab1246c9c6fcbf37f3c8685b4fac3a2bf0a3286ef4f215767a5289a4d0a279757326f41e4eb446d04a5ae7ad6a8cda84926179e6e194fe1ccef4880ac8064125a5d5dff1f2b99336a6137882008a4b25743069ca754627a0707edbcc08ca02a2f35c96b7389293b66743f923f60c60ae8f0694769145be446cef09c7dbbc7df4ebbc06d9a5e91a53890b9f8a29d97c4001356f3826d9d418cdfe72616fad3eb9c03e86c835612370e8188093e7e9c614868a9d5f3863d6b41b426d983357538f428186f6e42d4748fb22c3cd1c0ca98ebca2556e96704b632255bff156e25ea2f1409a2def37f3dcd3e0eccc607de2e19de332a8c7e9fbc8019261582cecf5f21c3098426ebb9a1f43c30b1f2a5e661a7fb05beb57b7f402ea37d6c78027d9afc5efc925e913e375be3da797e557c647fa79629622a3eac89dae7a006c7a43b14cf1d301a9397606fcbed34d2634200058a36dffc6328e9ccef7a997b3fbc6655717991fbf006c34852f5c579f12b3a747014baaab6f1dfa81170f4acc4ef674fc7f9112e90bd8af2a2dd86e707d413114d1a26845ddde418e6b1b2f1ce188376ce63b1b0773980603bbb8e509f1dbcf6c97c8f684903f98840b1d84cddd3774a8fd300a11370a217c834732491c657695a6b6379aa2a4071a0ee4ddbccf13556b6d36ee41032ef243e677831a5da47e60358e7dc1cb2fbdac22bf1c4232a25759eff7e7eba9e04ce842a13cbca51f225a0b67df0d69d01ea3e2388cf26f0c87e9ad8db6142f13f4811925d9f12f5c137ee0cfeb3b27701ab73edd5e05544a994fd201bb71c845ac83be0304b1a3cf1d348169b271ba6d685d5637d9346e86d043d136649c67c56230b51e3f9601a00ca784e5388c347072127132ca4d1550c75d50170ce65ce8b0ab00fee031041231bf0d88e802bae2ea75246b89a5e5c54ab1d53966b052e77a4781566359157ad35ad27c83b6eba0568a061e1d11bcff8d65f1ce86ef92df5100866ce562c4405fd597fce84d8ea05b64406e51029f587f9c16200adb241c0ff4c5fa22e54248c358ee4a656b0bc8542232d1dca8afabb77721f222f4951f446f9471e0d26b92ad80e24b747375a1baece73803b4a2f5c95abeb237e570ebf708b6d8f48df1e8970521908786b3cce377723dded76192695595a11f7a1f5455d8b0b807e7113ac93113f421591e4382d99e744a0db3da99fc20c7c55c39c751707f848ff017be77d42b6c86ac9af7e9f69f2aa23201fe866ff9732a6c8c57fb0f373dbb9b6ed07b475aac1680a16fc0b4f1d8da339b22d14a41336d58e32b308748c0778525a46aed014777d0e8b290c1f31032ebedf69cf0fde2f3cedd7efe0a5d19b03b85e091cbed5f8d87947ff70cce31e6a0e128e95a28234db755d6ab236f53be3f607bf766f8b7057c81186e1fa64f502397ac8a5ce05077d4fcf7fff9eba481b534184a992b350fd0898ad8d197f3d3ddc7f76530070a0c62b9feaf2f6895691c3ea9b6dc1e44dc93921b154a956a1988280b8155d64d8ad09d0da4dc5b7019b5291b6c8fdcf057beb354c5c0023e9bdac4159185779105079b655c10a35d26184ff16db6d3db66133d7052b877f7a9f5671785229a57c4d94cedb09ac249a3e3f650c9b3d3aba54cf1fc412ab60d08b3eb623c726f2ccad8f1f48958067bc191a6d8329dd498e03db259229c6bf4080691f83de08b0761dbcd97bebf79b90216ba4ad031ca1bb8b1846339cc31c69962be51b8826d98e91c49a7fb64ba525f896e2e0e7ce234ccd22c1bbc7f96b30d6ffb4a0a33b57e1d8d5ac9e8c354512c72a01264029d20127ea6b143b1801a0bf3b9c87f23fe130eeceaaab777c03b6dfed9993b8b3abb572f8f4620b131f6e55ba0ea08b163856bf7fa9f1d49c2425749c9d0ef4cea4f9740fd0f06e609b2c3960d701d59915c41b98a8c43665a6db3fbd4a503d78daae5073cb4d4d6cde7a97e9119bc6ae8428ce3331dd0c7fa17bcee9359fe89ec009c92a8616da26f957dba2071ab2dadce64515acee69b4cb9fb5cfe2b626b949576dbf5d5f2d01ab610152b8b27701fa40615c666fa5f5bf507034fb798e231f30c9b4c96691bb3c9e0893f676ab8889b549c15d528404827558ed8b1d8bfebbfb69de30bd9f6b92c9aa199830571af4fdc6494b0bca590f98ecd942a8a76525f4a087f04f2c09bb57526e4bcf6a1c8a0959b1c98ce4a6af205650d7bbdabed8d898686b2cdf2184ab687f092f94ffed7764fd1a42b24c43c1ace0db22a2ffb50e3a02114690a33b0d8de0ffad3192c87a06f03500ecf42c250109e5ff197dc69e31ccba4ad97326f8a242450fa6e941b13a593a638a609b1677e5c8ec6441aa6c1c1af96095c3f196c9d14c465d34c2b3dc6f02417c7caeeb89fb2c73453d8bea3da5bdf281be0fceff6bc47f6d9921750e55608b60b6fef4b135e78ab20b70b39866adb31da370a1a240f66f91c154ba7281df28f28e4e710a447556f044dff5c6a4849ec4cb31cf0badbd36e78267a1b09cd083f8b09872621714376b7a26152931984e89091f98fc566ed5ecdc245a5cee2f750c3b6cc5aa877ef2317f29b5f5ab5542150e533503f057526549c7c863cacc0ad8b4f84361f866a9791342921468e0fab8969c98a53fb5af6c9dd9b95acf4e875c2bb59a730f72911cb37bab2d63b5eea8c224f036b7384d1f6d04c71949d40759039c243d6930ce92f4e1aada2d6b171a3b85c86c5715c074d7ffe34c4c823f8c0db46667b47e0d667341a8df35aa5d738ab9064ad001959ce36ccff0308c721023b83c6b9a531753c0da3a804727bcc0d8155f52d82e05c29c27d5fd9ae04e3e03ada9d87b3a3f1ea2bdadce9e0eb912881b79acb42018344bc36691c8fb8482ddaca5347ff7b910c06dce7388f5f3d360848806b9902444af1d3a08a6f801351d08c18d921e1cf360b4e50950e67e04dd3d4804e90ace5310c7ade7cd15d215d654dfe761096a9b5698e286248ebcea0cb3a2af01056e5237a63012801848a787a5be8243252da35678700dc646330ffb6f819c92b13db696d899491d134f4c9e34e51dd1bd590dfd215440ab1a5ece6b1eb5c97d9584e21691c4c85d8e56826a677db98d31ddedceb3193157d857f1d2a971160dc000e66f00703f822d9f0dbf339a2b3ab352213b189d60bcb1ffe0d0abb45b6e04f0eb6c8de5593ae543b4fb8e8b0e20f2f458362f7f7de0f1295b020acf688f56d4ab513155e55d3c7ab4c214033e69c7d53f104bcbe2cc0324da039eb4e18def4ca5e46bb909c0b79b8f6648f8f38af763655f9cf64499fbd01987335f9073f38b8c30ea4e01883c0cd9923bcfda87dd52c6ae81cfdf542ec40e4d543b797c262857b58b8b6ae8523e07a164528ded4ab836d3bf353d86b2a5820a7c332b66868bf0ec5f5f7b2c6f0ed6ca97f6e4504ba5c673840f4e29556d10478acc1fe903d73c4a072ef5e4eeaf140a233337e56e98ef69a64343ac6d26d165fa4abbb9ea179bbe6bb8333b3fe57127553ca14ee055005c577cced557fe49146a084d1e00d54447f22136422e3b8385668d573d572471650429ee86a98be8164b6e1dc51d4ae04b2432bdce2214ca2a3f0c82ad025ddadaa3c162058d785cf8434f9aabcb35749504e9cbb57b937246ebf89cfa0fa5d91f6c47dcc4a164f4c11f589d8adf7dee298998b99a2842ffe3e5a06fb417e1412ea58acf992c3e524f6e182447a05906db3e76b65a3957839687b1987fb8d6dda20511f0e5ad583b9db7da714d9604de1820653b92a9c813228bd704547018256e89f521e79118a645d11297f9e2420aea4b6484887c51dbcebb5fa8091689911ddc6a4acd850785f651379ea241df7e7985dcce6e8ec94ea62514c935a6f94a6bd6206933b5da47441f47434049b638ec626d7a9447870ab2f2093242be110e4f4c8da92d5c760c10176bb3d45fadca7d7056aa6ccff8f836e9f25e121a045f0d6fabe48d6c66e6c04eef259c45e40ef766fa9742c9db81c2db7ad7cd93d3962f9f57bf3489be9041ba5c2c0bab97f2398269194152c1de1b397de3403209dd530aa81f8f3ae1187713dfdb88c36da50676b2e0e1b3e8658c995cd18b39f8304b79e58d833fb4d1842f5e54e058aefb9bed469e188be865e222ee5328037939c4b4e85412f8ea6cf52aef3412c3c70b39f8f46ae4233fc4c4e5f17df0a6b13faf9121e6938e425aae122a179c7c8b2d58f7eb700a1bee870318a5f9f3944ba3ef7b886f79204ecd23095951258d7e4750e20dd8ac74074d23083b7534fdbaa926e02534097672ade2bc340675a599e904b45bd4923dc3187f1b551658a23ca84928c590867d0ec02677ec934079cb6e73cf6fc6762a9a9817f9c77bec87c5abe8af629a145e48579a083f450e16e9e870e6044358de82e5553f65bdc4863c887e9ebee15b304e2bd8d0f14c5972fd6f2c91a68ae0575cb9c608650222b8386fa70b9ddb014eb30647dc766a6507d9f3d90c656a13b54ef352ec004e9b8bb2c6854743c5a75ae3067c5d90fb1473a9a90a23e6760deae5161c935c7d1b2c9a85fe30014ded4d4a84e3fc71f421943658a2cdb569fad3c19f1560edcb2e1b9d48ffa54fb0aff938b3aa5f7aded47bd3d0dddf4d0df0defca0ba8f591e4ecc08c6d5a27d7f435006d6d9c005a0bf3a0b8e277c0e266ae465ffef50c30b8be4b71f460468c2798c100f2b080cc55319120f46606ef853f0cbf2858650052d9f856b3ffcb780eccfd8cd897ef27043aacc99ab9ee7db952569dca687d70725685f3164edb50563ce517db7473a84a776479c6f05007231ebb7d729f9aae956d3b307e18ed6a88d0d6a958b7a327eb0ecc53233cb493f662370a94fc547bbfbd1dd6c64046f1ada89bd006f9d9ebd6369522ff07bd8855cba5f00126bff43abf045fad7c2b6cb3171544cb58a879c5589a9c615f89b680e9130c3226880623eec1495fa891677f0bf528b152661ca62033f4db60dd921a84c2575e316844fbcaec6e53852fe2c7ecd6708bcd1a826b575f957afc6d6c8250f2c33f7611165c0a4e75d475617037da4b62d4ea0737b74d960207d512444be4098db15d581ce972542a8eda094fb432eef8d5428a182fac8e177cc1ec279e6a4dfc5fa4367026f1c8c1219edfa1562567070c5cba8741c9841a90d551f9990b7c4c8a8c726cd23af8f68df7b5cfd18a8c012d29e92fa149424e8619eff3ae8e84ea3e6882b6ced9b747d34d876ab41786d8e9b211dca11b9345be565fdb4e2b51df5daa2511ea427bffd5256ef5739cfd2ea15703ed0485cc7a6c4655510b7bee14c491629d310cbcf81da718df6283acdaeaf5a689e65604bdbe725e6ed504cc3f2bb0d2b4789ee2a21415ed95dcf878b27748f9951e1a7653b331d74da1636cf1b253c57e6f18a4e53025f06530b68a9c4a5189890e44bf64cffd2bc70fc253ff77a2da1c962bccda9f7fc1f76bc02029a685b0832eaa0e715c11019292e85da82fe75ca5b865f419b3516662c362e8ee33483db7a543ff2deec2500494ea557515cfa1b18c96345252d05f986063ef37da79f2d3a7a0ce54890041931932399e8adba96f329fbe44f537ba6ff46f27d1be81c053b62563a992c686faea1fa35d21121c8636e77e4409d540b3aff3d4e0e015069f01398b9a3f1e4854a1e180d088db75a5bb73b6aed6a55cf3237baf469310a21a98083ee02a7df695873e1bcfc5179cdffaaf7127df2bcb937e26f30addf85cc6e32c5006d7634b7e3ecb1f79005629160270d25396f05f38b134492b251dd873c91a3266dd7cfce11b736d1a7be8b58e76d52a8e8d1c7390e496228eb15ae1d5592b2c5659fdf16f3a13c86ec420555d67b761eeb92898f4ff1566b7ac8d233127a25c7e3a9ce7d666dee38d029ad2d88a560845f66d3ef69c6b040962afd7e485f15657d01e80619bb5882c28b4150962243dc41094f03200edaa65b699cd71a6769c05e46db698c74faa1e88f06018e9e61153d05fc1d1375c177b3242f636fcb29c428450b49776454ad4cce090b52a34cb3eb4ec4d0e6a8fbd8ee143933014adc3857944cbc88e688c65f2d96cff4219dfb3489f441ce99034dae9ff50dfc3ae8a5205664e4445dcb20424742524cff0cfa06dfb7d589e24b460764ce6760c30918db421245a7d44a7d566fe6cc9b4b28de6d5abf3658cef1382f15b2c079894b9c2f328ac9e8dd53ebc217053797c315b0808037715add62c7ffef8ed257ae31219d28ab5a2ee280629f853de17f4360114a2669ece154b6e8c37eac88c3d810a181d1f179f84e7c421b583e8fe3911685a0a65f338acf124f979f4bd05fc32e5f56cf4cf2aec5135e3708a3d145cb95c82c92f85be305ca147f391f35824d98ce079dd4ab163025d1047b5e83ed3ae029e6e2c9464d95f3588c6a6a80869504b160223cbaed8b21cf7bc361d55a612589c2c9ecfeaa470dc587030ab432ba9b1bbc3e4737884789f026d1b4f2d94da85a4635ebe27b4b7493d15501aeb6774670654cbd81b860ad7e5cb4e52c5ac2cffa032fe2f240d435791b03dcdcef2f0872a918b740a73b7d7b66af1f8278cdbc359f26d7d4bc013d75f846e8b88d81917ae81214024c7b4c731fa5421091c29d53ad062dd043876f80aacf43e292e2c977d3e795b40b64e71d8006d0349f4478999b0caeacced7f5b16b266471e4aeb9ec86b3f0e7dd5011f8119990ea263e65414a47724fd8dd7342ce2917419477bfd7cd7f493085d46742e4e5ce2e840c4d6dacf6ec217974f181af7a8ea144b9a145cb157d32a206cb72a4f56c222baab8b437fe5f7570b0b3042b2d38fdb986f21ccdd815c5d03f88f15104049f0936a343c43dd22c012c58f56e234fd05c8bbc06aa0d437e61c04cfe661bf6739188ad56ffb22b02b0038f117ab794a6d340dc06d12465b05803db08e2042bc428c347fb24dfd049031ef326f94f93cf6f8c249e893ad3e13fcfb864299b1034d9e0d185dbce89409603cdfdd7215d8c19edcbfbdff000d8dd78d7471049f88cff4553dd740e223fb63cc01f3eaad515e1b13be950c576ee4427be13963f116ae919ed5e691f953d74f854a8b6712ce7750716afcb5dbea21f4ab3f00df21295e624d75174503f4f57d9d428eaf73bf5706fc31cd97073002e10cc2750902c3ebabe8bd83c7f93ea5ebff8d79c13f70943dc74f6b7e2ad6b6d64a207cf4ec6a22553bfef47904f23dee107d47fa93bfc3e4c516ef3069c3daa3ef0607b6fcdb72e0a608ce97d15364bb77c81578305633465cb046ca8a9711cdac37a37bcddea1a9dd43e7d89cfab697679a5b946533d7fce90131a0f63cd055a0652887ca3593266c5a3e861ac850a37c3cf3f0df9fb0279f4a646a87ddae0da4cc674cef42646dcbb89ce238f8b6a2875f58aa4ba9e068603eb9b685c0dddfa4153cabb2034a7a5dbddfe6fc7ad01f6915621dd94b9750be934cb651c24e549ab288429c7ce44fa65fc6b203ccf8b67d821c3d6c46ddea4d1388f63ec44b93d5452559a6400652028c537b5d1d993c2f35ff096decafc41a5815d55524bdc318ea7cd9a78e181f28d88b74554e69ef63d9666f67c43d95de97beddfe8b67ba6a4b3705e4c3bc49e9d8758ab68a30a6242f0774288c922f1ea1daec8d19b4b3a79ddcceef826faadd8c1c5600e4ec12bd5c5b1c16851ef6b92519cf035bf6a773f3324a342e183cf4c60a883713074858509f40f6e31fcfb03fe1983768cd98d56094bbb4563af66de92d760e557cfb20c4407e66309928c6985f5a57603caca9c5b9e7e71298396881383ec2259333b22988d349001f37c1e2ecb5927f6040773883c2951dfbd1dba6cb4235eac2fed6a94e44a626b0b20f4293a8a789c6001bf1d5b326cd78458bf8c2598dc72cb1c47f4de9aa97813ffc1ac432fb599c47357ea74932f1c487d7f2681c52fb34cd36b01c9b000507b9a9d02cb8e8a9d0a9d9920e7a10cdd9385f0ae2ed66d5baa3bca4a0eec0298e53574f00c698dc5249aab4a5cdf402674313b4ac819424d1cc042b75c24e82ba36168258c7f41a294afeec5e0541c33434a4a7d46282a1fa0cbdda327339744b8b285c5418e0f3a9554d28431c500c9a6d8ebcfbf7753fea67dccb8ebb6b484d2299f095f1ff0c276032e29f759fe6f9ac2eb567cd2b7f6e26325c0364c46155bff587d1942080aa7147536e153669358318690540108ce879c02a7f84e1acf4f1b420f4bcd3c87e081dd30e738626113858c113b314d68623684d3a3694d7666d4ba4d2608505a7a2c8e58eac32c7b21c196b956e1c5284bf618db311efe31745683de31e3d538d80a48eeb307c854fb80cbb956076f428e339cccf6aa3bab9f967d97977594cf3f73d5d47c086c2b6c5a654664488b643a5e7deda322f2093e49c39240cdd2a7cefb891df22cd45b3d5219ad9a004f31108fa1f51b041085dc5bb38a68f5c5accf35b4d7b204cba56fac26f585cb52f8360ef06c6e3bbdd49536be67ded47ec966c2cc274564636b48e7f7eb1f3bcfd7743bd9c640df8340db7d18af3dcaf784370a8eb22c886b36abf3203959970b4a7ed756489552f71a20af72edb068825548f90377f43eff7e102c6717aacdd56e4985b3c62a9b61fa240d68ea63c5db6ac3455b1fba5778324b702e48f6c2a564c0b69d73b3ad9cdd2de8641155d81f1a5aa01b8c5aa6a7918bda5ae35223fd64029862d5e177fea04b2ae7b1be2a08e848fa74a19a4f6109baa4cef355f39458d3b937ca1c42d77cda67e91ff53e415a51fc9fc090cb6a50286c0ddacb141c3e8c6be458bfb957accb15e240b3b6dc566e3159a20185ee9a6ee63a06fea99e403a6aa8ea3106f691fb64cf13043afd9c6caa64a89659c6d222cb9cb597e89fe7e337f52fb3a26c5f08fda72c2a938beedaba75e49b6c241828c5631a85eaf446affb2f834bdd0b957288ddc1fe345dc7dc01f459373bca5bd27d4ba6cbda6d689c1f16f30bdbc481b6d84e12b79fdede78382ede554b0f8e6e1f2696f94ad9e3c541ada709e48a38f69feea8bce8b3e4c631867f9d5c6a845089f8dae3bc09f16b95e295176291ffcb10ef236477fe8f63a74ee0297cc045dac88c2f0087df54e2fe9049f0a8a63b4e89d701a6bafc52b9d57b1d0d6be0e433a21d7d98b6ef0245905a0d8ab88db976f613b764f07132608ff3cc30e8274560861259d353d146db4f6e90b8316d384040a854f90b3d5cfb8d791d99fa7a6354e1c87874d03fce261a54b9db707419e3125ed743b2e9a1f5a0c83ec29ca48bcc24de9ebe5cd95a7f911d53bb4a98bd419b5cb42a211a67bc6418a9e6046800af7e9f127bd5ba3273d9a1e3c846097d768c60aa76ea33ba01969c455a48518bea1e4d6ef3eabdb109cf14906135c1398464cca7d08bde2214978169e7cc2f013f741f3f5c09fc0747edf73535339af8436a2f8e367e86152f2961c1e8984ada157ab98fbee58ece9bb57936daf839d3f34ac31b8b2a0eb6b3d3fb782b728f38a055cd870c86511e5b79ad3db7f8dc5b569d1119ef5dc141259965027653f3bca2d4d0b0cc6c32a75a3df2c76ec83fdaa72d89a7c21190e443295f2a78c5daad4f3ddc6a0d5d4b28e1c84ad2a588d3161e94003c6bb471f27532fe3192a87d71e208c3826703a13435366e703064ce9b2ac2077b9c419ab8c7d378f62e8db3fcedbdf3849bdb106487412a408199a7f8207537ef7515ce5c0822270f3b77297659d4ee283f5f21a09dc40ea81200fbbc47f7d9f8af164f7f3d3d0bbaf5479375f9b24502cf8d0ef6608fb3e38bc5e3053cb569f80b968734ff52373ab7598d5ddc6c01123b1948749b9c01f156126a58607df23635533491ee114c8686c8ec27910b21c19bd6d20db48ae3f07c44bd55972e5e8322d7d3b0d9ec4ca1c9bdfc46fb6984451789ce1eee78a1bb457afb3a465afef828046cb6d133bedfa595cc9e32fe8140e264a768316574264cd1759bf5f7cf27706f05cca1933e03c264105619f3a5f39754816116f5d5d5fc2f18ed778cde109277915bc1bd9d2d80fd3fdafb526ae527f23587ea6581a17250bf0da15745115ea15a0fc2f3fd8eefbe3e60d93769edbd9ba1c099b0aef1dfbf5cce1d3162b4e3e93e42904a8735f3131db658e4ba09a5cd6968186d286407b7ff5a3ccd389e9bafee3dd13437e29c7fa9c011476e20b9ccfd29db819d979961b85295e827f46e51e5cd69645040055f25025c093969ae3d46dc47780f420419268ab72256e19a6f2da4c0c6b26f2310fb546bd55903baf2472a02b02fd1e41f0459eb4b28931ead1b92dc1ab831c5e8fbb662043c1c588da228464be087e10c443f4fb0396a8e7624928b834dba3ccdbf25816ede641a848a4eae06cb1747e4fa3d58f84509d91baa8fd1f4d1903b64493baae9664ba180d25ff226f8d4941987009623349e16f135cdb4080adc6215a16e8c64ef9fa824c07912b365b7c7bf1e8ec6e07d1974979a86a77012f7709a507b9edf4fb14f6b4369c8fecfcab5520adef61ce3a8ff85dd795519ff4d7c5fc7b3cf1b8ee307f624cf9d302daf40a8555cb25c64487926f0e84c71d12a617a139fbb8c1785853e99a646a0bd26c9e243913df1db131678aff57fd89ee74a692e1167f19b5f0bf968f665157a15a243121b4dc1cfbb1b5111fba6fa6f9bf214a8f34d0dcd8341b9f5d79b871248acd39482047beb617aea4ce46f94295e3ae5726dbef99e8cdffc6ff65bfc68107f9ba60f51259525e088af0c245eae529fef8de69140049360ef39919f8cd195ec2286f61c1948d13f44ce3cfd8c8ecceaa099c52ff7eab4b0d1c5368b5f49e56f31e9a55a27585455e5df00506f4d33a72caaacaf72d7297e13fd1042f648177640d3fb0401061a1236b1a09a2532a36f2f80d3d033cc451ee9afc8a28096ab11fb91247c6889ad2096c0f4e50b2becfb920743c3318be3ba82a586528b54cc89b64e27744cf7c9f33aedc3863dcc57b50d8ceb86b3aface5badf5855fa651f326ee4fd92a6c59fe9b4ea47b2ae8037b62d458141ef81ebaab617d87f2698502c52e2ddcc10cf513bcdf3c2fdd86c97e9446e99c3e011e2d4de205a10ff6b58ae4d95ede57759c2186d6a714cb9a52108a7fadb3cc07c57bf65a96ea9e7a9f599fe74aeeb7818e82cb7726bf31faa8fdf50d9dde49128e5491cf11f4f5a550a5bd3a02b00cdfc99eae044abb5953325e3073fdd89e8e9eec24a9f4fc6924d4beba43f398e057e56ca30481c22230730bab04a6e645ae5194984a571f05d7a4c7225bbe9b369981fcff7652909dff1a0dc574fb1b0dc9413711c5493d632397243cbd9c07819a71fdac00ef25e303da8b55b3428daf66fbacc358bfd7ac0b6791b73126e13b4b31340248d4fdf247c8dbf20cdb6ab4593b44b502f1af7172567c097e25624ad7b564a1d0eb060a8856bb6cba2887a213bfcce5c7357b162e82daeb7fcb48170461c7eb909f0ea9631e84b6f7ffbee908c980a105225b707cb117dcea2cb51dd4984b18e96630b1479fe43666d9e6561d003162f0c7731d329d98a8edb20cd4877e91826e71e2f4079fbaf9fdee0363e975fd82d05ab0d7c20c47fa9e8c91100378e03ba998c2f653149e6a73523cce128550c94a7b7dc62c4612a49262d74f2c86326abedec456f761b6ee03938eb82afbd6bc4e167b4e17f8770e3808585803feadd48144c659c07d959812a3d5fb8b82f74ff915bcffd3bb6dde7df7bfd44e2ce4722c616800ef6ebb0581bd9b95641b12aa0ddd9daf643cc7966f1a931a7397f14ed87e0f9a3d85fe8d8c92dc66eb5dba17fbb91830da5d0f52a677f7d9ac12dea7200f0b1328ff0c493d5e404e642017f2fddb0540c461908715ab43ed6d000c5d6213b16f49c14be2cb74c25838de1fd4829efb2a2eb0946498f43b8111748245dac47c9f82c9afba8e99f6770e48cb45f109d49d3a3910a037904cba6b06328ed89aba9e511959ae7529658866bef445886f7e7e42dbdaa057e4e8833b701989749d3bb9a59e0ef63f6b09634006d696698bf7b85001d1cf8a06e5bffddf5f57d3a007ef3d1cbe14006f7061a0dd03207604915c5a9444a242a031589793d3db23c606193b0cb1fbbf5de606e00d3129b5eff89680f7fb9d01d78c8043806ce25ef946864c72a81a4cfe8f0c211c2321cbe4b4ec2b5ae9539fcaf86404ca482c39ee3c3305f3b77f143c8b8b0a380503e555c9ad4bb3e54df132a5d57173c63729186276e8b481a735ce7efb37be173ece5bfd0f1f715e5b608ab29720d185625075258d958556fc8e8e8bb2bdae68c7acc0489b10560524939a30d63dc94a612e1a13b7ab6fa99253a43bdedeee2dc58f627facdcd55466acb8e38c58bbb996b7b90e1579faeacf2d2bd87249ce64691739d1c14ee85e8b35ebd329f3f630384fa4cb3b1b7f37f10e59afe6915557b082c9632001fce9b0a1bc1849f2706529c4674d26d59a64f8f15dadfd2133feed241f6516096dd75d696f98b66d1bf6c9a7612ad4e169eabad212a6706a02036ced97351dbb5703a83ddfe81ea9975b30272e31c4b1fbd18d05a7842d20d1cb44c060ecc283ca3ae25da3d8ee17ea40f738671f12132a2a52e3829bcb689994556526f1601d9f17374a16ae2912b113be62b0e85c765b4ee2a1dd8a6fb24b43fea612dfdba7b487dc7b15f77cce549ed0ab63ddfc44dff59694dd942a611026d87ea9b9b372fdb555e04c5c7c9ef7d86d00f2f6305305e2607024e6f1a4fdbbde309af029f0a65951242afd211739fe773cdd6b98129d272178269e6b7fa2b3b4a5ff454f7eb9065475adca34208d230ce06d8198d040a14fd9b348d4a82e6d19d36c2e4b6b2cdac6c3d738759e7d8c87ce2c8dbfe3591589d2657c93fc3141d06d6a2ff0fc915c1eba1cb80cd24dc1ccbd39051b7610d4277f2c1aceb3fda450c174bf49a83d91c54222681169065b3382735b87245fc1752a6141a7fc57a48c4b1f8aab458e5f1862e818b757a3546f8f4986f3fc994b7c6b5d7c2c484a0940f0c2169801d768f94a8d6f569bca11717d55afd1536d706f92ff259978cb90fa991ca986202adda20d4e78978df92bcd497a847a3ebac7353ba3ecc131802fa1a4b4d18d0fb6ae97939a02dea1a9057e8c88f5b2ecf0b54fac1314f9af94aab23a16942cf594dc7b22baec0b38bbb66ccdeb23f9627d09114d82cb52b449547d03ccf619246a45545132cf8a1a98700e442a8b382a426c3c6039b8cf9a686525c8b48cd5e9278f7dece6d5f6f279cc9e5964b5df1cee4baabf3a3fdbb468dca6b084e47e6c485db897dce65098f3d1d27455712cf613b3355d6a2e54ed14857debc00167920413995c12f91285d1208750a82b9386a0a98fcc5ed8085f25352b96bfe46e0420b21d85e1ba745076bea9a6cdd590313226703a67f29cf6bd47429e03ca3e54a5d3d24638c5c73d2b457849a2521210dd05caf2076ecf313d4c893c3c0d354b1f19df97f716796dbc1fcb0e563ea6f61e2fbe5856b6e43e4507c394b7d1fca0ba7723d3acc9769670185d5825b019bf0d900a339927868fc63eeec5034be8718df9b360b22350146c6467aa35ba852aa69cf81536986f57480d40deb5102492441e839842f53fab4cd59b0925bf486d7b62d23d597c2859cc9514e283b16fe43f30cdf398bca31bdef9d6c966467c2e567cb6fda905460b373a884ac45ad23a1192fc52d04c9bfa91ae47462eeed513381216e3d801593c4bd10265cc9e000c19c660898343d1b4a24978d9f612ae07197290ed49655228c9bfb389e39deed52d0532142c7f4268697b889827676cee5419819a67570420897367a0f5e6bb48e5ec1cdd0fcf40f97eba61bebc4e6ca38ad2db2293cac237a365b136b5a49fd6e77c3b781e64e72fa21ae821e23cb5d65f7aec5e378f2678d3982917b91540cc94573e1515446c5c112298630058395a87cdd77695e2a553beb4cd6f434ddd89cc0fb40e3891703cae7c3640516362eebe7252b599ba56a72822e2e230f4f64f40f401d47582aa690d9ffc2b63bfd113189da289eb3c0f745d6f92af19724926f64a61dcabed4a867e7e7f3b4bdccc26e75ae45706f5b46adcd3a863244f10e35b180ea3d70d9538a38b97c8ed337884459a4e95e43260b774f9c34edb5b56e7ee7b21cf7993220ea06e0ad281adf0af1d267e71ea9be647fb96ca38f7ce936e85107144f55f91050c0c6f535850ce9f71d412a1ad1c26d8809e290775d4cc620eef6b22c58f45549837b17c0c3326a1a543dc4a863a1d20c53255e069b2eb0aaa7647fddb1a6dd8d5b5843f7c541f5ce25e81425b832e3a58d73cffedc2cb59d51a92044e14e244fbc7298f64d4135937d41d5e67217e9dc1729e8b0211a5a74912cdff3a60905af9ac3cc5a0f47929b7d23187e23f50d3fd4a32b8f8a488fb44862ce7012b596ba9642e69172e686d0a6b5af04319a374d80a7a4113029754e97039d4ba2e02ba8ee3b6d070d7be9e612ecb8f534b5ff97e7aa2197c2ca68a2df176761743da553852afcc2e15e90d0ad872f165625bff53283542270f04e15c7bbdecede53a0d6ebdb75157b015ef48a23c5eea0d9ac833667fc52e9da4d746c1e28f2da4544dec39e553494df52d0dfd509a2ba000bb677fd4e648db76887d8d6978b5be9555cda3acc696340f55b8d2e576b0d85458fdc85fdbf8a60f1f01348d9a981fccda745b43f962aff9f9ffe853eeeb84d986774a60c8072922be55526d71cfd4db7607473ef796881d47966625d0ea720474a6a30c2719c1c3cc32b5679a8808f7b6ea594351f16e90aaf2350eb1479081bb73c380646a7fab7f5b1f541e2998b6a62b2262f12707455e95efa333014e3e4458c29251b65c6c15a29c5b8518fb762eb4b9539e09d555c18a0864645712dfba8e9850aa9f52dc44014890a10b024b444d07530ca76a3c731f5e6847e9ffac28a1e99195f6bb5d3eca0ff010e59100da14111b3f9b359e87a3fec5e6c6e8b94b170a229dd11c9476b0633f1119db13fa42cf22b76b4c88638939a219f3287108566be8d3d834a62452f61a9218f2fceae183a5504d356ea500e7460fb2e6a12cf7ea0c287b0d70ffc732b5d6928e5cb1222268d450cc05242009f0f59cce4b13991969b99ade71033744765467bb29a2a1c620cd899aedfcc36e65d3596c667e3654dede32230ef035cbd28df2ba0dd148b6b841a30bb817ef079a918e87851f3ec85034d135a7d2e2ecf804a2ba5c7ad80b5834a4e633263c766b2f69ead661e438bca867bbb7b39280518eae8333a83c2aec1279ad5969ed03945e5992289082bef469ec74a91d72a809cbf4a9d5a58412b28df5aaf280ce89357163f67fc7da779ed6f5ce2721597ad3b8949bb0d9887222ab66b600bcdd11d975f16ea9122f8454191114addab8003ccb5af2bdb27544aef7976cf983735ce10e313d9c60fe5fd03db75acc3eb02f514069dd37d232c12b2d66bbcb8e4df34281b430326464cbfc75c9178eed25281f711c2a20307b61af184f1a74bcf80a701b0fddcfce912da0d99fda010a94da8abc8eec1ab15a4ea4a9b36b4c5ec8d5065b904095f13fbfba1f36d012b32e56199eb6d4e21252aa83054489fcf2e41f6e4c3b350239dff1f0c72904c4de5075e6b6394abb166fb07d5be8fcc75bfb61b532c6abf23e135c5278b32fc7c7eab226eda5916f6e2e9fc02088de7473093d650a4632a00632828b034c4db0779811a88d2e7d1cc93fc091e64481f736fba5d2c5c2786d703622d66ef801824daf62aa3e243f7ac17ad3795156212983565102bab35250a277742e0854abfc2c227c3b19a1376f3f5a2eb1657bcd7abc3da40d6a6b69950fba69d0b8a1f6d7db3ed582d0e527731867de3e3494170d1a2df32aa9d41eb723f448a56b9d001ba9e5c04bef6d49fc7623203eeef95cc18970dc56977648f40f9eff1d007ce552d0f76e52e779ddfd7456131d1486f2f03bbc22226d412039e34c6520b0823d4442e521e9f62558c8df65e66cf0593d1eac9b8a361a78967ced31fb72844b618d7dab37ac2a4a5b7a0b37bb112387a5a8d82b89a9029e965cfa7b7a505cfe80bb7aa5d5790f4c1c5b1ff3a185d67cda709b0c5f12c2e4f9cefb4f32509e068f45f887355108d5d99b8a08f16370f6d60960cf4e5269d91e30a508b92fc3d4f41740277f844632857cecde27aaeed6073bcb9f5af72388e58970c9a2d614ddcfd320ac517ef3af1391117737cfd146857c8c6f3d3fbf962b2689e25d2cbfbadde4e31682259101cafdafc1775523c397971ffd6fe320cb8f63963d1de2c49b1ce9b89b6c783832e0f016202acf016f9fca4ef23499c0c5faa3ff61ae76434e4800a6ba126e85cdc4df801841d9e65b049b200dcd7f73606e9c0bc887f263d7e6db9d38a3395e5603b3f472906437fa9f23ec179693221089dd147f7744177b138de3ff03ffb2c2293f2cefe543b43c4146fa21f1aea595b354dd6bfcedb2bf01cb48cfe42ec2660a31dddbd38050a5da59bdd8a083b0c192263dabbfd911da803d369de912eead8c3b50bd629ab7e537b2631a73f395430cde224f434730915a141ae701f3d2350a660358eeeb5f3da1b0c6297c1484d361738a66daa9f2c28de619dfbf9c5b8fc12ae1e683026fdb4f06b48d00204bcf83bb9f4446b2da92f41a7190194e646c7327089b802607cf70212d4a5c57f5fd3623fc0660fe45d4fac4cda61ee3006e0d6b2bec40e501cd8481d393467df45a88f876526046d1d276c413493f1e4c9da0a92b4d64372f8f7051e7192a3cf5ee397f291210719fb0db872e433b71b04dee4baad76121ea559b8118ebbb050064a794cc3635eefd3b7de49186aa698ee7cfb0353f635acad5845321b896bea81f2e8c8466b50caa85bae609336b47ea3a04bd7fe71048693c2371a761c50e3b1b49872b3474dc719d02540803091d6b677974975955b31e6b162ea65823bb203e7f35125f9bd6b1212222e5c00357c69b3d025414ba47aa4856b80f616eedd6332de66ba568f4aa414ba8875f8314e89853db269d92d61d81f743bfc8e29b2059803372c481d35d3171d758943ae4023d11b004a93bed3079246f0f06abd91c4637ebe5842ce78b2e9e60d24564689e0c2b78ac0cb2a78dd78642871a2bc8bc45fe32436d419025e48d4181105bca9276a92d25d1e3c64bef564832b02090012d4aa0b7bb51801eaf628e68781414be7a634b72ceffa49aae113b14514adb7ddde8950b91122afe0c9c5b67d37c8f7d366cdcc24be8206f3568e560588684244eb55069d50849953fe2ff5b9a2f9d6f3dc30749a3e0d64b1a16a3979854b77de5553e11c4f89dc039b9bafc4cec44d10f04c62034013c941b9690ec1fe8907d3182e8bd7e3fbda49e179d9926bc3fe3b74accd6336a8caa3abecfaa7a353b67f3216877f2897f05e2110f15b3afe799ffe0af3537edd1a44da2e72fc3b3ab99585371800cdcde2f0bfae7507f7ba38629833c0739e494016cbdff99aa1c85741d263457ef20ff66af9f902241cdd04e57747b5f758d85928568c6e91777220c320d3201bd1fa5882b516f4adc856ec79e527e6b4abe5d94d31bd964a6e28fdcc6be4c77b7f7bc0f61040451ff5c0e21fed5befb9371509c93be39f25ea296caf6e80f7f2c8e5f28f1f9a16606247d353053336c7909a83ae4eb0eeddc00458530e050029c43f2bf9333ab95090fb8c02408aea8aec9f7622261168e0076e3d6f0240db3960fdd502f54fb8c1199049b038b365097b1ab793cb2ec4cf1a2c77aba9639abd995fb4c65eb1caa640d9ef844e7d18e52a2c833cd861628ac4c4dd4f080e08fc0e8b243378cce9a9690d6fdddbac8df9080ea1ccf6ef6955b1bb2f8596d72014b4658cfdf672ab995ac83bf795c21a3695ce43ccb80c87376a823ae3fda482fa2bb977a3c59e87cabba7d6e221cfcc95a1a2068e37359a9ce9ae422b2bfc8a71f714234dc06b2b28194d00a8290e5e2d7c7e6f6ae14c9a2a2adc7208a04ff287238c1286daf98d2e6a16db0496389f53b7880680e90a929365f3af3f244df223b4f9afa41f3adbd8c8fd684e77307f4d3481901698b5893aa0ce4c84f9ea67b82c67b3a493e52bedaecb8cd15f24f3731a76a73b841e4216b867a237edb338bfc47c9370fc686efb886572db094994f502db8dfcccc68121cbfb91e8ae9908fb84940c04d65e557d52d780630aa698c9c0ada0dc9fefe293d77a6875b99e5163a847ac3c06c5e4101c1097cf367086a57b2f003938acf4a8ec316e519eef1779d5e7d84bb4479ed20199f85295c5e221f20cc36c4b9178eff1a05a31277efbfc355e82ede3b6fb98b03e68545b29c85e8f7a9c45198f9f6fa07c18ed229966995f775978fe2a96f908f8a56b683a0b23b83d9af6ff515b404bd77cee74c65d7155c5f07bdb4a411b39889f9945eda1e09704251f9cd0634ba2ea757d249f128d5da7e9f8946d941ad6656389d66da98d478fb0b4bc7c3ad5209434e74d725745733ead1047aff1b06c8d64bd261656aa1d5066ecdfa79dad35360b3195b98c52c12104414fcb08cdf42f473450907305a48477e4788b35af13e2f9cf9f66ea55c086509d90f1b4837431a36e699eecbe4d53ffe99f6c1386388a5e5f5b647987872d544bf5ff80d29129d75a0abb34400584263fd92fe55477828d2a1fef370cfaf773ee35bdaf4e6aa4484b84faeedcb31c703140aa5a293f79f0697229bb81f1a688134767a9265eeaa55a24a385030e847977189ad6abdc2a80ac702bef31f224bcb71c180c2510dc5852258e4e6601df38de393b68b676a3ed0f15be8aa71fc9626eaec85d88f3f68b8ae200209f7ce759a7ffb26d3d957d35f44a7790088960e9a4761f2f148e7b30a1e8244bd7a8b19ba1eb69491a98984a8de18d7abfd2afe03c6ac0558d34585bc6e2e774ae67e3bca96c338bb9ade5965e48db60d3584503795597a0b9f758f1ae4e04707becc6de1a0d2718c70171bf1d4ed9c946b7b68ce8f460fb90da4b694b4a6c5b8c5da93e6e79e3c3ba118e049d33b4ecf01f8364d8e638b35b85972cdd156e6e7024a99a61e5175f8a70437791a3a5d77d472270a8f0e3366722382bb02c8d5f414f7942364c6111b4ab5b45fc1c782b1576c93a06a13b233ce93ab6155bc60448304761edea422759f6525a56eec5d77264ec294f5b1a444aa57d22a13dec7f54087221b0b0a3960ae83acc30fd8d92848cf2869d38b27dae0f5d57e3b14cb61aefc7625f784fcc6ebf47c4516f3d0a25ceba57c3cab370fcf73751651061bf4735f3a580261ab9d6f1d68f2d265e830c27580a0f0dd86d5c91cf6d755fe9b143f9596d548c6b60148cc5693ee2e039039c51a7b4dcfb407db9051131ac54fcf4560a73f5e126b9700a6cc1a6bf1444fa1c80508e23810be81475e9f4398da554188a872d3f12c36a443af1993fb4749eb0a00eed894f9826b0f1fe7ccd134f408e7a65ae5dff20e8c54decf201aa3a869962ce80a4695ed8433e1869d0c175941f44f3369807ce3fb2219254f4a98e614e87000acea59a58f12ca0502fdf6357763ff93713651fcd949b83af96e9b2a63a7dbd4c6071be6a968e6e5a8493034ebe93f83aac59d5b2a6499dacfd3e74470617e2c8aa4108c8d08dd76b268964e2588b07fde31fe5fe6a92b41d2bd7ee5c607f2dd931dfa821030f852092019d0f9a7abd627ffc04ae32bafa4c8e5423d99e3a553d25ffa1d9c52962eb1b6b1708722fc70768f9cf6849657a233e5f37d284095a9ee2ee7abdf7383b4e5c5898ad858f1fd9f0264341a12607d9ca2f136e202fe9db7d666570b3a0d5e6fa92b4c3dadfa1237da14c89b9385869cec868aed924dcb484df1219303c8f2cc7fb8ad000920088901c5158c1614ebd480167f44cd37f92099365271310795eb72f80ef96d48c904c2bba287771cd80fa35af89242eefcb933d07d137409d1cade705606b56d83f74c1339db904e5cb39cf1eae6279eae461c952c6a83485da759d359c63efe779c8be9e014c7bfced7ca6ef30fdd4ed8312d5d1b531f6393079fc49436ab506d923907cae99bc02da68ed9b5d67a5fed3cafafb127c309bcb30045eb71b48415e4bd817637548da210e1d6ca3b2cbb69756b3a2b57461d881071e72737e0e310272cd992fc7bea87d6aa1cbbbb0260050d1cc198f8782ec75eb91d61ef410b0772b1e9619841a84a2ff81e5cfde164f16ef7fc5f45d7dfbb6c72eb9e426c19ab1372cd289bc5325d0bea995ac5c688d1d98d3afda956adf7ef19b710c97d0a98cb95890578eeed4060801629a3cbcdb53b4708185f2cfb1a3562f697cf0753c06cd2b38fe24769b4280ee7e968ebd01dc6095ca131750e45b6ad518eb3c3fd576c41e2d4fc46421e77ae0a1e5ef7e25b02e91bc376614ae40e4b6f70dba8ccca8f4556e810cc9f1ee4d235493645655dbef61227c308a47f3ea4d9841c15e3e37c4e74afb924d104a7ada5902def8c72a4b4b7b1a3831a7360dd3fe9f5aa613c7e9ea734d8483b36099f5481881f695d0be5eb266218ba76747e6ae5ac62628f251a72bc4db6bbf5ad53218abfa91b71910069884e288a36ba12e3361c7853dfa3005e31de70c7ec1c577d4e04a12fcd72716eef056eb218c68576ee51255ea3dcb0819a90b8707612566ed4f3e3084b5ca8799dbe00f98ea14cd7af7bc71c45cd8e99c62425013f268b08800fe3926fe354763493ee1f6df0273748f57828b4759614ecef3eb399ecca83f2c2ea821dad9ad7c32808fdd1a2e72cd9e3807881f29c289b07a9f2b471c72ebe22d5c6b9d78e832f04d82acc42a09df40d52240823cdd0413ba0ca8816f285c7c13471f8e0fc944d339d53ea9d80f730656f843e72f503784762e4466c8e79c065d451012a37b78a9431175f6f1058aa69d9b1dc58c6cf56a1fb25836b3b15b99b99bc902e5677726b9114f31f24fd3c05683fef644d15bffe14696a57e26c9df45fd060d52cd96cc810b1b3e7b6f262cd198113b235582822db9259c58183a7f5f2c6af3e783c3b90be43192b3ef16fb012ef4a8b6c9ef12214d5c296f11bd51ac6a94871dd9ba6fa13fbe60f7d48959ca78662daf3e8ca5446a0c5d4e4dfd5a0808152783736b732735583b9717dfa16d179bf0488127a97ddb827b08f1838b91624d4fc7b8fc6eef5824fbbd1f3f528a05df1afe4b4513d24208a013ed6c515f5f614aecebf9c95cf7edee682e7ac2272d70800cbbee23ce1d9da381ad7f65a771a7d6b2283a749ebbc09083683f74bf321eebc5e8e1805eeed6acd1f084dbc22d6cab65d23059edf7f2ee41a3cbcef0afe5dcc63a95600d4cfde2fff8a7889d3c9b1269bd89385c351aa93c6dfd3ffa9d8a8aadf2af2330d03aee978f5de982e4565a1397f33bf55efba23349921b838cf540f680f6990d8b3de5f1532b894ab96893db1b6d83caec34887ab2da34eff58444e58feb0b5c6db7ca2b1b73325af6850ee40f6fe18154decdabcb4c58220c7d06aaff4bb1c03416d04d3ccca99411fd9abf71c01645c3d985b452096d930f3479ec5704c376a3b95a3e65c5ff77f2e03b4b324f4ce3d5f282034563baa40e542e4ee59c17d93133fc250788c037cdd54fac2737eafe2bbd8dc80ea495ec0dce619f780937502b7419d21ac1ffb755247c49893baaf3907da936f6c65d55144d2b9972eafcd3c27b4f3e897640918c1b2e4552133d3bcea451877dbbe95a55cf4b74ec2fc37a3aca63aa68e96a5603dbe0a963849b91189fa4f2d01190314cfffeeebb5fb09e16ef678744e9f8bb54fc263e306c05014ead21fc8a2e53a2202bd9318f78fc6e413244a0baf0ec1e9234da90c1ff0542d482ff2381c6e2f4403c4ee5c9e8728a3173feb673e7f23456e89d0e2d5e42693aa86e0eb50c4197c80b2c1c08a705bd493985c20170f3bebe3ce19881ea6b893789d6a4f5f5ae20128e6f0ebc96c9ce35c23c09758064d6bd1985ceda7b8862a2c8a7dcd0622dfa5d81b1bcc534da173288055fa933456812ca0356facee06505b49859da85532560372f199653cc28de8ec9d541961e4e0be2590289d222d5b4e92be967b6dd11a404494a00da1d056e9358eb7ae1a00ddb545a1ceef7317ea81187bf25ba93f89f70b8fc5af0d19d58abf6a68fb279c5fedfe1042d4de409a8863385d136dbc5b1df5a23b99ce860597905dbb81755d0963d57a33ac47e65218fbc6e375cfeb29a265666519f3a0ec140aea151153ca9865e9fbad172d4b4c205cbdc1ef5e07b5ee91bd82b11d978479b9f762fca81e34f2b55fb0b73fafb6e51f5d65cd21c971d391d5b4286a8244bb63305950831261c7837adc0886aff023a0c1cf3717887e843161396d4b38c45ec2d17f5b713a7cfc8f1eb8a24a7ce530bd3307b8b86bbb32aa1e3591f9fe00d88a9cf49cd51cb4d28d6102f5813e77c42a39005b8bb6b6d53f2386f09820430ea37960c5223550ad1f4548498a642af3ede906fe1a21edf9e362baa1911fc3cdd2f75aec81cba952dfd54ec3800f47bf8c6203809756349919930d090a3a1aada88c0f9bc8d3100b2ac8c7d923e246d4f1bc73dca9766e437f27bb627f9fcb70d449a3adb622df3420aa4baf004b8ae76bbe484c92fcf5bcb82a2e2515bed3a9328465153482a956fd5a45d9f2e2124e0d33145f57505e4c811d31272a75f620ad920b94d6fff60008df97c2058a31565f0564e382ae2f9025e40240c3b2c674db46aab77a8e6335d475f630ce242a23ab21b2d62563dfd61ea1f769a49f529badfbc4b58afacc3ac3ef56171edbca1a9a9ff420ddfd4c08c7613a9c9cc21ce2d39baef63b99094ae519b1dfdd50fef58a378bb4c569ccfd0711b4f162923cd429796a04a336ce4cb6522b221d059f42a2d6b399972ebeedb24e2fbadd0975fdc61da62bd9e15b5904857a567ef53598e4a6214be856562634f5ac680858b19c42a8e1b2fa754804a21a301c85da78299d4d5f50ce32386615652925c229da9aefb092a207317e5f138508a36b51a806b5f7c428a5a56afe222867b9f9b2664ed0d244772bbf985171037240108b9b861cf9a1ea10b0e70e6b31ecb991ff76a1383aad8789f04e2f6c300b7a3dcd9723db213c461ac56154a1ee2a423d712efe80e9db28f881f31e07cd5d2cb283a4b5719950414fb02510504f03e1ab49a8e0d26cd2e772494edb58da5f7a0646da1aabd95395f145f2dcd61df00704d2ed9d84d155206d6b2765e4855e7e0b57da12b61d1d9e53ab7805dac8562f147e2158011c3d9d205e15c5f650e0b376eb4c39bd0ebe1455ed073419875fe076ecf07673380190f6a3cf1bf4544d092dbda11c0086d326c4c8f69c468faf666e30bdcded9d26ebb536dfc5da084b5ede56c3d1375cd5406250c860601fe14d2de1eb6159009fdfd832146ff5638261ffb9ecf7a349875484fb0944d5d238d5884ccca5a02d57a6764bf5a120811a32878bac9f4229016fec26c6f52612b4617d4e57d459891b2940c986d5b69b3addca92c3122793048eb9a1f3528a6355fe2ba03153b6fc903f3f9dd2c6a75fe9326b5b9887036d67f8ed5a05692870a0048dcba496998dca3cd99c711615468bc2b73be59f9037f59294aad5d205c754b357b2dece7bb9744198969f389a70d8f2db03c821834535aea93473fa5f01e4060438170b9e581691bac119004a0b3b034cc99a54b4ff515eb7021275a2c3d28b116391be38aa587fceffce5917f303a24cd73ae98eaea789f50b2ff23132a61283faaddd8f4a0c7d075c5997a986edf065884dcd8e6bf005724379bf1cd9d98f29ce7177dd2b196ec5756c2daa5c0584444af0d55d3b4f8989fab2db7d0c6d54ba4b6fc52b0bafea3fb6fb2e7545b6535ac8d0c2efd18fe59fcf8eb78feaa827610cd76109a0d37ccf428a961a003dbad0f36a3344ed927d653d5ce290883ab4003dbd7b487a9c7097b39ac8a98f2dce9ac08c9a90d5a9a771a27d12157f4581af75940acdf8daed500e609797d12e1316fdad305d6f4f7b33364d0df71fc56dd4393d194d4b1ac383cbef6be6853d886285f413ea6ec0b0b43f501723410005020bdfd8ccf0b2f2da6be046fc7e7e607be9d48c3ffcb1e2ce0d13dc1e9d545e30694765b3c412a413974bea993df3aee614f930f37229b1ade34ce536a49eb93c48274869ca292e15adf6a316be0342fb7883f1c52130e76356030d678875677cb0563226eddc778230c4db70462ad2e27ea62f819dd5bb6f0fc45fd2bfe0ed4e2c697d287c5d339f5d255126cb20604661504739f8078502f746f949332dec1e151b5f325b31b7a6311bab111bcbe5d9c22786d04dedb603010cc64de9103f06092d5f399c811e34ef66492869d6768db05f7235b006e0d1d901d5236664332b6132ef551211e3e50b84c04c2c381974588d37052c8a2dbaa4b1f019cc4fc0cd0e1a1465604675e234f7c981ca6354c598b1f7ed913fb940a647fe48fa564cd96557f2a7320f6df1cc056fe2151a64937b9f41295d73b93f758be689488df4c20e571147a76d070381a5c7e06b8f2e581ba662a5e25c846c181db7000e288d958462537e7917ff0689fc01f60a8af845a2a550fff9aefa0f19e6fc9d6cf0eb66dfaf59a83a0901990c08accaa97dfa54cc69684a4ef84e17d9478ab0d0248d7a549740f23c0ccc6cf2f4a1aa9b26448c27906fa79b73143ddd46d1e39df268f04540ddd1346db3e345aede2ab3b5d621a79fe7241538d7ba768e8b114ab9344202ba3b307cf21eaa5694a29c0b8246835cf7253eaaf9b8241f541a3cdc9f85bdbb8f36848a3976b4e3fded761eeeae2458e2c03c26ad57c48ef14c0b0ceec1bda54ea50b875402d1ff0bad2711eae98e1e85430c9fad0171bcd357c1edc127b7a53bbd17abb5b3abfaa1a6a744c816869e0ac20e402b3deeda9d1ced34a12b87ab0e74f5cd2f9a8320cc93b7f0e25cba539bf48232c16e4d73b2c7a4792567f1d686c6e1307b7b5a0f28e077d05d8d7f9a981f1c33df32e6af59b32354cabe03fbd21beecf40146bd99eb8b8e158e9a25602ec88cdd6aa2ddbb7fe6b039d1b669981041880c1b57e6f7f58744c105f07239eec3c0c55afbe0b999b89bdde607a62e13f4ff5e9869a08b4e07c311ae89665f8d4d853306fdaffe6cb9d74926d1562eed85f8c6b3990e438ae27b17fda140ea8d51b098f8d6948d3fb735a08fcc4f023d2d1370801ae0451439f240d5bdd5f61d135e1ba8991d6334aa9084e76a8acc23b52b56cd4b1e02a26b97d49fb6ad6e033c062e6336b74bb6dd84a251574f7eb81e2ee7eb7101c2cb042b0c56247a735f3baf2a58458cad5f6e4c5072a0e74a3e74865119285c3dc3d11a0e9822fd9d54e82f89a95ac8e7d6576f1739f765578174ef2606b8d0bd7450eb957046270a623aea5aeae7ae3a86ba6386f4d5d97e13780e430d589879446f4d2ecf8e0b2ee854b95d54c7bc1cfc9e7ebce86d0144f8dc5adacc294b2bfa6df7ccdf29aaada05975e5583689741e43f88c33f445e516641d9fc1cae701ad69f5fd31a07f751ce7e822f23e6f8eff688cad95d0373026d1f9fdd98bc92e74b6f12195cd13a497c9667deb57712ae222eb1e35208b4cdc67c8d9acd66e4a53e17d0c7fb68b09e75dba59a376307de91ad4ba94118dd1fb7655fce99dfd08d9872a87be9d98591a022a1a4bbd67cae040dca8ad9e4d14c9c551f33a1279e5d55b063a184519808201551b2a6993adcbc60f6ac504675799d4aa1681aaa11eadba3918d6c97384223f80cfc198a68d38317d49728072a1779250e4713698399883eb3d16ed7befe85f3b6379b405792e4e424b729fb0d1aa1a97b7de8a7261915c2ea4aacded1dd5bc4179c550768ed64f02809852d9958189e5973e00185b8cae2f059df655c42cff01035298ab0067a4d1e5b2e6b9600cee8963d67bb5afa546db755290cd8aded49ca08fd6c83b684dcec4a8d07b610e5800fe4e68c0158e41a839ff5a643b68a1c97606a0a9b5d939933aa403f8a39ea988ee1132f597b744550cb6fca47f860c86e0b0984266dddf955c08375177d04b6cf53b64776d6419c011c628460f4f508d07bf39840000ccf90879c4ae41bd9084ef5ccce125edc205ada9f12085d4736ce6d5d4d6426473777d2c03110f31067264777ba02bc9fa4e582d00515b3c78821f832baa47c7539fd46d5ed8bd60d66ffb39297225819d25fd9130dee6cd1b3853eaa69363e2d7c59ea2890af9e6dd51713bae46d0d2084851d17e09be73c76b47524ffe423166abce7fd8e5aab062484328647e63c4172bbc291d8ef501c2d8b2440b105ee61559722f9781027da4c938f8d07826bdea10cec2cae78c1bfb6d9253b362f818092772c5f57d07f6412a14786ca190b84191e92f648488223bcaad0830cbcc86f68230953aefb6e739a66917b23a784a412945bec4d2845403fd8c3f961119060f01baa3b96b297df835692f602aca47d9f5de846b4fb9b0d9c9d98e01ff34ff4d66a9964c7533faa27c5688dd87016b4c3db152e2eef8802e82058d8b17efe337992637150b7aa11fccd4a6d6350b98b87744494253b5e42d1ab87bd4b3f78b7bc357a7e32ba87f552168e2f51be4ed5de7f2e4a80df5b86c29182f6d30a5299c97048f91ae33ddbbc8e20695cb09b5dc7e850ef41c3cf9a9cb9ae43dac427673d7f2a6bd0a5c268d0191f3d616db55f64daba2b4188af7befcf62500359d7fbdb248fa5c6163b1feb907a082e3b03cfdf91b12482a6814dee5d2b01af05afaadd5c64f89bc0556b5e74286831af98c610e1c3e5729b5c5374b7ba3def31e712347137358ed7b244e2c1b61c26548a164ad809fb93a71f5c95739b6ab4dd322df5feaf18bab3446f97b71c4a3dfefad7fe6f47509945803367d8be0e9f5da93e880722891d2f4b662511db6f7bdf020bf08d4814dc17277d8483160ab91a3ffa4a44dc8b307e5892233e58ca08deebef67621b4a6f4693d9cbd3d34a867f7d482ae22c73e0dba9204becd6ffdc1447fa1fa1199d625510741883a3b2d8a1787cfed0251f0ee7c1c5b3ef984a5a8412e0efe3210e4d6921a412b58a2915de25bd6d53e47515da94b1257f9f27e5861af20964ea75d19a6373c8570ab695ac2f8c7543bcf4b35c2ad9996ab645935bcce6859c7f8ff52b5ea62ea28f78c16469dc5f8ae28958618378e9a4ed2e6011dcaa61e9e99e55f2b9e0f8c3b822e310498d5d92b6b235c3fccf8cd57473ee417585002e55fc63e3909b4ee0beaa11c0a3a830b4719fcf53f66cf042860fd5a4944b80842b6e55e70959fa9e39a070627633ecc0a8b4fc880eeade50cc11701fd1e17e860c56e608253bba11c6b273abee02aef836e08b360669433f2d1c84c7c6261bca642bf2977ec90e3acea87fdff5554c4bb3af4e3625c1364290f665944fd8a72314f8b253f348ac68cd9a3a9e7dca227997da5dd8cca4a7996196308ec9abfa50e6d2de86fa4b53d67a2e8e1bcf394896fc68aff051cad7071c779a046debc731f637e056c81eef2c50896cfde6a3e899e25fdb26d48339f1b4a596f3c62c70dbf5ee47db04a2ccfa6bb3c8b9df3ceae90d7e2930409cfb0a47f8f7111cda278905da0b22e2b2d91528ce6ada6dc8f42ca4a48ebeec5e371ec8f78e6d1bdf6ee056cc8c61f4eb6da9dd432f2d651a0a8e6e3debe3ab47904e217890302c132bb52d5f9359a720ada6d19daa084e7fbd8c2af00757bd856fbf20bf66415e0c9ccdca7e051364478b3767dfd5b006add5dcb5a830d657af3e2849d6f96180cc25d2bed78909ac846fc49f4b2f8657e92490641695b7833bc093b3d646cac25291ac017602545be83761fb7a7e2b4379f875bba4cc62acce09119fbcf704e488b332be4ec1ee9386c3f52ca9d3e9bee628246503c8989374f1402ecf4cc8247f61dc16a85de4eee1f2a3dc63112a6db72a01a84ba01e72913bdc18ad65a58deacf06da5712723d2cb0c301af332a092bbcaccc3747bc0730f0b0cb1270988cf259d12e63d1263114e3ae90fd78504f8733ed343f01d54d9ec8b7d4ce78aa74ddc0a38d07049ec4872092fd6e50d3797c7b157bd62bfdbbfe51aeb4d5f4286ce30a59489a7c84fdc264d32085e3502ca77b66a2ae0a0d43569fa662d850b66faf0d6486472fb38ecffbe0fcad69d0da11fb78abbdc8094fb6e8feb1e0f76cc456f3f31f1a5a8b3a4237521c7d712d1661edfd986c9bf30961331165868b1ec6c412fdf0308dc0de7a2b5182856847d59a6887cd78cddfe8f224403f708c59a295757bb3589a25295ae933400c805410787768544209d700141a313bea4219bfdc45dcd04301410ba766d4a2c7a1137e5889d823bc1678ac2d2eff5fc79638027145c81c0d9e5a45496edf2d4cad134dbdf882e6779202325c3edf29112098f5c063a40c69e94c321c66e3034ffd5f70b7aa3ec10f96f3a6cd60198899ad8f2b0d77158cb244fd388b91623d67df89e3732e9513e901feed1652c4db0e91204caeff86b2915ab4514ff601ec166e3cf303e5c362f41fe2d45c290920ab1a588b7bb89591afe8a28eed8c72a0d3d7a3b978045eba268f60cb9de6782eee9609e706e17b28991aca068bbf64e0ad537ed89781853e76bdcbe70bd14bb123129a3ca3a0229330ff6a431a074abc2e0c8a83dd5404408182f07054e72ab83884c482291656ec923383ed0e02268b7228922e52a1fd908ec13793634492b4c950d25d34d38ff6cb8e4abfc028e4a215961402f5d63b63cbeb6912f36cc20ee79e70c8b3285b5b2cd4645597487f5a9a2ad1cdfce747cf9faa3545243186125d83fbb12476db9b9533c0786cf50586ebe2ad1ed37abd95857d7ffd4769db4399b5a8ad851f0737e7e3beea1216074450dbbea45c19c0c81daf79b47bc2de20ed4978c0107d64ef612c816c6ae2cc2e810b8519227a3f429524b71cf83fd2c57603649deb7d902dbbe13d958f98f48d164876963228e1758b2bf144868eef0d3b9eaa44ebefb4662153bdebf3ae8ee106ca0ff6c6480626be1d692b05982b1607b6f056f71bd4f7a62d2c45207f62fff081e5bcae17fda75a053ecbabc6794d5ed3cf5d5b8633055ca993d4fabd097234079e7e0069c125b8dd7c5e179e4170154df70bb50bce8ccf0597a089a627f6c9e3485d6baba8ee85eb5ff965d7f8386c82be070218629b61e8f36794f28e9b444c0262d99dffd147441b2e0daf7a8768f7b6f2cef9fa577119ee72c30fd5ba0c7682da3ed432688482430eb3af8cbbc404110dfee530e24a8d8cf8d8cdc22627528201a8c8c35e3864b745e5507750a0b20fc04bb9794a7c7b3ca10ea48ac02cb023c687762c1ad73cfd088cf270c9d79bb5344bdb0ae45b681f3dea197239da4cd561516ccd9c3d7c49f1a0c1bbb9205afaa10e49a79669dc00c25f0c254bd57dddd859bcf1981716ded329098c135788b90a17f166aa1492e08fa678dee357ed4ecf326069ac96e4ee47180bb12f4e23a89918fc8a6471508630fab8e4b68a1947bdcfd1e1ff0e048a830f8f301845a08b0b7149b786aca03154dfe936212a9bbccf9ca2ebfa25ff9adf04af846d85146335ea91c9ba56631153d714c20bb1a0417511a30685abc1e2e35c9cd892ae08d0fdb4d2e5335a8e7fac6f635023822b87f0f77a773f9271d54d89c32c21cbf7f29199d46a9b1e072ad2a678633ddcfa04edf105be119a59ea853cff54a1c43ef7125fd6db5f19d87bcb218a3f20507abb1006401c685db7d7c093c8880bd9fd40b73c25eae0abd6cae49bceb9f88106ce64f1d1b1fe6b026aa592e1ad2357dadd72b725cd3bf7d14fa4d1eb0c771cd255134347e7a30538a5d6a2e2706899b83df13d8f8d00f638e76761328f26e564dfed74c2e3833148dacbe7dc8091d40bfaa358aaf9cd78cbd7cc1ca6ca32d19df887d8fd7e6c00d1b44ed4bf05208cb69666c3ef50e5975afecf07865f644a24fd93af01a76fe50b1ad99e670382358022adcbb9eca69992972f900e37f90fbb57bbf4d8e726d9f17ea6ffb05b0beea6f7208ef03cc589da1490ed5e60389e6e9a4d6c32b20a7ad3a5468e011ed5be3ff5857846a9bcfb220a777053215dddba1ec8e32724c2e6ee870e4ed27a2f21d5f8bad4c98baa8b8cee1461ce8eb0031b46b1586374297e52afab5368281e4d4fe86327e80cd2e6d0de28b3173e537c7d05138e73a0f017a890cf7158990699ce7a2883b487ef9e463c1702cfe0d400a5d50c487e83229d6f93554b88088a4db92ea5942b3595dc0066c6d2385b5c917570849655b38829fee6729f467443f2d4bc7a25886b6bdf6c3db3a0d7f02ad4aaa397b125cf8818ae845da399aca746c84ccc3796b7881f68b4b287f2766f6949198d4d2608daced8226b72b549ee138e8b59b353ee1146d0a757db9fface2cb49927fc1b7e2f5b858acd5faee6d08d41c45afdb74c6d8535e741ea026b5776708f21036f5c9402f44d1d6b84030f9b28d3b1519cafbaf4a79dc361743d2f2aad042cc912d4242fa4f0b210a0ff4c4ea596e3bbb23557771ea62172f199c694c60ee28dbc4e9e8b8bab707b064fdc3f0e1244b8433d94c20d696a9049b394692ccc04cb401beb37b641111b19490e8127f4e2cd033897a826ff7651474d7a18ecda273cf19df25454aba09adf355a3a61a91b91f9f4d6ecd81bea4851536150dd2281ef025131fab28913e0f6f052b05032e4f3b34088a1624c0b3d83a6292d890fea19a45852dcbb91b4608d296d603c80765d19247a831cc38a6cb4b40a7fe1b9b1bf7121474b6261476188e4787762b8fd454cbe35f1856d95171658414c5646943a8897f56abdc3d048ed1325c184fc2721a9bf32b4a4640d2e4e7c0d1e51087a8211d64299e62a7f84c1c133c2cdf37ac568d7f03e6ad2ee1c0d3869105c384d8b7f230180d9f15ee6fed7a4570550bd94df1303017f540f1fc252fae5df0f2df0f07a4a59a9f77f02038a2990ac417790714c38c26a756132e422ae7bc27e9cad162b9840cd6d17e1825ba32ea3018769c717260cd23896caae189906717677e2a09f77db331448000d18fcff2fd6e17bbe8c038aef6eb9ecade3658df66751254fedd51ed0b51fdd7b684e6f74f9c4176aecb23b0088957f1d32f76852d594037ee242fc1bc35d5b9a384d667892a6bc10f935d060fc552538a811a64aeba4264c45e117210720e47003ea80c50a960d18c47cdfbb23f41d944c09556ca776f51dcb79dd301ef1a1f080926dc690077203ddbccb56eba9770c258339bff1d7b9f79cf5b446d7bc22496e0a7a12bf490dc9e7618397045e5b32ddf9d0b4269bc410f4f422ba68399f77e3e5785b5121e99f7b6270acceaf06ef18370c9cb34f2f21abe83c15185517f518e61390573570c92fbdc2385e612fe68ef37b4f0996cce88c8f1de13d3bcf29342ef72a549135ec280e624d19376336644eca97815d4f25092766fb099c890bc6fc65bfec9ac4ae237295500c62a7d0e659c592f6f68041ba4835ed0d598ad92cd28eba3ad88e2392843bfcfedfc33823d20929785204a4a103c0509408f1afa4fa5cd4684134cf707b1dab03754c44104f1be6063a3a1d2e11b4e4f5f4b440ba48937071b18a4736e37dccb19493b351ad9d4e9dd1f41aa6f48f55ab1e57cbd2fc996880b8cfba5746fb6a0f91f633f76748f69e41fd6a37f3cccc191cb0c6740b5ec2cd27256f874ba17eb16e552a105fcd704f76e5d1c7678dcb4171953c825e319be528a0b8c69db0de1b01dfc050d355c2f66c7a2484f87cdf5db93268679952daf123f68173520c71e2c199437be4e6c26443159f133a5c1576b55d5014b8b2cb7debfc1eaab8dafb9b0e99f15b408aef0734490890ad38284e6cbb00c71a4afd2a3dca4a4ca5845e291ecd92d595920598cb10e565835c1f06fbeeffc1d2a74cd403a990777644677ca2b003df49fa5dbc774253f7c5fc9df767364715b220c37d4d274a19f46efcd40a7d7581be73f7a28f7b3452828ae35aa79cab5631724743e716d502ed9eccd0a39ba522f76c4ab76e71a000dec205a20e847ea6d6017f8ce992e3e42884754e26b6d98d109892d1cd24f9eac731bf2ff7bfe441035712ed844dc1d3ea862922fd7fc9c87e1424ec1a77d2267168be82e98b4a7a379358cc1800faaf4a8ce44a60acab8c4455deaae91b9bb06670c8aa2f4c10c1bcea301d41f7f02280b5dbfb5f26e6904ef1745f3accfa54a9e526d5ff9fbf3e1b3e07327e6c85304a38d32f79a87db67c65c27623c510c472108e0df7cb7d1233a88d9e9b199a72859ab0748a62aa2f21f31f8203cd787efa9f87c32ff3b4060a7082564dc0b62b8e22f415a069e83fdb29bac6a559df811abecc98e257bfc55063a83701b0efc52d5fe256d9444f6a75f2e3021566895df6a6b19bc47ecc475b4827db023be533813cf0c1fb44c2442b98f7dd68e9e88838327d6d11c6b7fc913422fff1b356bb6ca45354d2dee06c3908af4255d2bf78e5614418b4f0d6d12d9202f53be943a6b2eb3b773acb2a66569fea3eb8a9834878f9d1c35dd2fdc1a2d43a45681de6a356ac9364e697807902e909df9e992ed8261d098277f32cea691b3b7db51c6c2878ceb48440f333bf17b7947661dc74603daa78d8c1909ac267f7a1ca88edd1209b408297196a5461a2a7ba46960564115214d1d5dac690ace4c04dc41e304c58fb6389ede3f4bc4089678c45cfc16cb360a5a4305f04f5ea0ac3e5bb6f63b7c0814c1c372f437608220e114354363ee36a7fd9ddebc41c9b3445211287c04dae13e80b37d74059343bd24e1cec51bd88625f13e831d56675807f9e32f80ccc2ae4f8662c2c0f8c15386377eeb59f795de1b75e53b75f89d54f767289f12c30e07a7cb727929292e788604c34d8dec1391f0c8db6c88bed21210799afe33a73c4b7b5a05be6ea4977f3457f815f19adc81dda632645231d43ae692dccbef17e3dd961b94ae239bd48d9b8f68c65ac281ffe7b700e86ddf25bb76a1d093042d7d8fa9eb489348eed70836b277befaa67a5a94ef03e80a81a7cc1c89b9f0214ca2aae36bd1f90cad933963512ae1d613c172cd59f947b69d435f6184ad91e7eb9a5151992c642430695255af93e8ed66f759f0ac160b93f5e6546c4cb10269aebdacdc3aae92a4c4507a260e5e04cff4e4a5e512e2119046d423d2f4108ef1fb52242b69b410fc1dfe9f683771c1ee1da6f2750d26e74120133584918278607e528de5329b411166c99e71245e12e7b785a9985a5bc2892fca93ac29b5edeb72890a3f153e674477ed024150c3db8f189635162a3683ffd64b95d0d11a3b60099dcf7bad926c7114688e66fa7753f4ed8c33276eb35ce3ca7e1da11b68bcac1283ba526b1f1db8fad58ce642716ad8a169ba757cd956292076126b758e3df4ab05e4fd407acfe90440743d8145486cb96797bfea2558703b574346d43862089176fd09fbbfd966c83cbdba14ca5abcedfa3db12cf6a4305838dbb410c6c4f5a5f7e5b4e01bcfa523faa1388b413acc9b79b2dfc0313e46e6f8ec5db796b0794d7b034230e9f852a3f11283d878f11ccfcdb6e566f2bee04207a4a51012504a585aa6b70cd6106fe50973b8f9a80d2e563820bfa49cf1172ab131592aeb4e0942d9a321fb4fc50d563bf1bbdd126a28fa9b8a05b8dd5e857c040327031eeb26e5cdc83b36c0cf5bcd4ee7a23a844909102c64a74a56d51513a8b327c0f98ce49c048018c107d70bca014a02162eaff7b70e9a8f49bfdea5c08ac5940f6b6fcee6658ee3f51306b7722a858a6dc887bc56aa59992456e9291721d8be15c3a2f26a7f5c847292ecb1e6e9c4710b575ba9140435cd482700bf12663806769d0217389556ee8f1b3892f38cc23090b90f8b19642c87a5826ac72a5f117832febc883fa047c7621f11827849af9da28f29c157291f596f782bc6c2225457042b8fa677dc721be9d82953c836d835f042ed4ae4c41b6a81548337bede8931920d0625f5fa693f6cb928920cf9217b3aa29a509f2fc7cd2767b424e867c9034cd76319b1387501f31f791c592232484bf812af6710bb0e3173284cb3600d056b26cccbfa1f407cdc2b11c8319054c199f5758477cc8b1df725f7d99f361f435b296d9427f20b8d01b66a4aefd12cb57636a51503d4b34f99e211c22b92451f8b5c336d32f99cdcd65f7d373ca9ecb9b05826ef5e5035546aaee599a74cf4086b7d7009bcc6f765ee04adb26e27bd6fdd5c0fe0697ddc30a2f950d513a9d5b63db5537b90faff8a1a0b9af61c99e5e8a07b1d6fcd2f771a93d1a4b377e6549b2441cc553a372169b1b50c8919aace6fc936a965f9cfde5efede91981a5f4ab07bfb25c7f602495b3cc678819392338000982435601ab8a80b160db30908025eb56d1e053bdd26ad3aa696ca74aa454151cbc64866aca2c52be2e08e3b2df51428cd734f96b6973ad9344578284c93e0dd8fb979e135ca365a1a6012198fa43a416a622a0d453990abd4c8359d6a5f72417a8042f670828252bb5d1dcdf974d7f91fc94dfdabf571d3c12c8cb60f5a74a21fc181a961fb94077305c7209a59e6414068ae1e47908a1ac25e7c549419cd159f723aa2bd5c7b4f313e9b2fce624ceac7926c6d1649565b2df3ad419dafca539a03bfafe504f5ff8e95ace259e4438bf02d9cee1a9e2687ec0a905192639980464759d2cea5677575bc1d9595af81773744a1d2f4fab63bd708b74117c942896927cac02d6b56c359d0aa47dc8db26a827fd9ffc7e4210ee6ceaf0cd957a9eccc1566c45298539809aaef7a8c3052facff78254c8bcd50df6aaf897cf26a2615d2e0b265c309dc2f3a2bc7a2fa1adde42552a9395d636b00bfae3639161dc4a77462ca36fbe42d5724356660595aeadf03c551910d863df1d0a576d360fe9dfdb7ed415a73f5bdd32cbc1313d15c18e44da65b5090f0745ca16854eba4db9902cbb2e5f3c3df0e75caa949f99508af81ed8558c2571bb947b2bd8916b61469eda592f8fff586544cf0a1b6dc9cf18bc19dba31622bb73fa81fd3e883324b0490986d6054d7488990dc66cb42a898c32ca70522caeb74b2b2805563c247c68fed2054f015708a368319a2ade84d32a13e2ae2ed200acfabeb815895c635438266ad57e38225baad0c072c0d63ccbf523b472337764045bd25543b52b383d8a486e90c15662f09f3b403a3897c5146e2320d4c7082ce130f34432f25089171688fcdc6e54a1f8a17030883695e2b451b939b58ca84435509667fd8c353f002b97d7eabef4a4a824b6fa8222d07f90b9be0d76f56a4fb91e46ba96fb02215c46bfd845e641ec4ee190a6e88f1d70f09c946ca18f0267968ce984d18de5fd4345ced1cef59c0e264617e8e5d248d005e5edec9cce729b7353a7e1667ef8e7e7ec981e670052815ab74fa90b9558b5084fab045c337cfed9db59c2dc3a3935d6272d48d7df0133efc490ea51e761133259f5846d79dd8003a304801c9bf9685c30482c1ddadbe7d231626256775db6a42e04d73d5c753e2b44a15c7a36d8c55a7c83c5b38bca9c355f733ada888da2751d88833ceadb8c4dccbb94c19e6e9c00f508575c6817280500d7a3d3500f4f1f6e4416b946566353b1843dc0d29627910b42c2482c602b561ece8d63b049b89be0555198eed1f9aea52ebadcdf23a4ef9c8ef29b594ddea472aee2e916793eee046d3fb09c58bcf54a791e7aab9ceb1c73b342912bd6d2b59e8df91d7be07d3a4bd9ebdbab9726e3b07ececca7968d5f14371326ee0146bd6168a09c9ca2e94fabfb2c9a2c6a73c16d04c658fa430b337b95d1b7a7f8addd01cc7b54c8aa33347dd6ab6e83991d99c5b294b8ee3cd80d54aaa0710346904204161ef220c69f289a8c86a60a6840e3aa0cfa0043bdb5e4af37691f3d68f8b6b4b51fe567f8258a8ebe59233f05d84d5e434cde4f029b8db8c8229a75cbe409337b3071277c73adc4d26e49237cae2840959aeb647b5aa0482084e9131f591df346310623a89041b2665a88d4350b26daac686cc4abb3ffa6ac457b205d42d7b86150c69471b7367ead2bc2b2a30d02041b1fc333592bf93cbf03b1bf477d4769a5376e73bb46c96c650716ffec5e10c818e622e490485febf82bd7601c554796f7c7f0512ed19c6e299387e59b10729ec790e108ab662289dec36eae5dcfc6dc53661cf68479bff5001542dd5cdc03288333d534273fce16097bed2187860bebe03db668f3721910ba077a7ce22fb49ed6873ccdc53d28b32849e456347f0a09d6c82dbbfadf2b342f74f04d403d2596b0560fe0884a03471c32f4db6e09bf8f42c070012f2914dc4c29762cd9ddb794b52d69666f2bec9a10952513a4dcdd702b98300aea6064565cf34a518c34f236b2a227b444aa1bc885625ec03a58f76827bf93b5a9fe6ee324bc3e3717d48c438de8469650325aa8e1ed0c4e0e7679ccf7057d36c0b4189c1f4aeb38fe6bfc8d94f2406e9c0a2df1d5298de7af9062b3da83a4f22357db83ff24824524f8e2f77abec3e02fccd10c54acfbfde5b18937aa0c81ca45eba37b4c3ff0e62d49704d768fa70b01bf32569d308900e01396b1e68c643e5fc885934cf797d502dfae6b5cca2a367619a568e80d1c7e7592c270bdb4801da53e090c76e147843619b76177aa549c47fb2f90e9906239db5387bad57357cb4071dbf20f6c91c3d39a9854c3230005a4642cc63f0baad1b48319ec5a267fd4bf5d8bf2c470e63580cae800442ffd760c8dc1e65a21acb8f82f722679feb4f895a941080d3ebfb39e39700ae9beb6e1b2eec2b4d23db6805a768864c4fc4e0a569870ef5e09039b19997cf23fe5cf7ac8c3463f4b79bed34cabc089609ff11faabe9621fe650ea337807585e5a3c1d6e6c9951c06375831669ca16623db4cccf7b74ff7f02beaf1c36a6c65747688b5432620a8538bdb29d59feb09fc7a543c67a6dbd3546ef1d039729c737eae7576034786af3164fb655c8bec2446a0a9f7c000dc71e8fe6f370af51c578263875422a5a6bbb187ffaed1273be13253f26d269ad132cf462dd35539922e9d16da848222f3e1f4eaa2193228c6239d15f23a7b31485122f13bbf0896a293859838e25ad7fec6d46240a392db9df8f7cd1d5343d49172154f4e2c8dedd8b302ab5508edd54965e2ed6896146e786f6f42b54a56f1497bb73c049df21dca57f7599ffdb0c4255af3b1ab9a27dc0b2bbdaa9bf3a278273e8e2b3fe3796b83d578f2a729b9d5ba395a9b3ec0da53b6dc379dc7f3a84dc0472421fcade22494a24e960b7c1c510f6d353c02888b4e1fde250e0cfbe754548751db4b81f386c10b7411fc68169f124e9719a733b6b048efb55a85dedb51b0c742ed1f66759c6b12ec848c23fb17677465942be206bf5b5d1287b537f43597d11d0a7b7bc065638c030f245a0aac7ba0471e263aceb607f02d61175ecb0a39f856a78397b4f624b333b96adf907e623efd85768ef2df40e440215f7f9e83141c86c4e610e59c217447e714f62b3a7bb0e6efb135a3b439a478da0b7815d94007b6d98de2a1167a25c23e8675fa8a0b1cf5a3f71a792933583fd028376721c25f0376df10cc09eb8d30b8c950e7c3a0e53700862b706cf88c9c0acc2b535b8dcd182ab77540f7122975a60bbd9f1985c3780fd7b5580c23afe2bbd2881465f9605b402a700a0e974ec58ac2539897e5a7a5a42f8271098c7199a79d194b10b5a1c3c2870f7975a17e316f6abf14b0c90794d1db1a421e43c40716ab4482abc1deb827f4764e95d0de3550d055ecbbe04c71b8575a302260218699b1cba423ecfd56b0da0b033b2efc5feba6515b45b292c2489fa0b27256b7d1e4b8b76d0d0ca46d98a4ee9cbbc0908b24cd1c1227b82ae92798c15808efb00d35856dc9af18553d16d286f73974fe857a934c4000acb1eb49d902ff7c691791a04d7f5904e3e5b3863ac712cba15f300c9ca567ca2dc30ebc882f553d5bc2ec4e127952c67ed0dffab663f5f3065b41e79fe4a2a862e6e1aad6856078d0c45ad3c090aa79d45772874e7bd8f4fd9dd5cb96950bd38630155c0e70e719bd2ce69c615567ada0a6be0a89c50485956e16154028ff3e6bf1bbfcd1cd3a07ffe6bb938675a5d5921a590c320d940ca90bde695bf9b4c19bf47eee9b8c8fa1d0f6221aa391133871aab152e6c485cc89316857a931b1275c109941b4454e48dbea15d097968b37989a5edad12c6071d4c779985ed2de63bcc339119aa1ae37c939de6605c229f043bd4a0fa34dd804c2b7c75683f741e41bbb052166216627865887c4a1cabfab11efbe8d2b4cbd62942aa56358218ef1fb4ccbbedd1cf0f3df6b7582044b3e795d38dbeac3c015e051e85d5b7c88bc937f190534335bcd2c7014945a3bb42e88a35c47bda518f78ea261bfbf293ac9d5d575cfb2bf78b4266680a3822f6139e9eb68b6ee63e39e533b57c2cae18800392d6cc1e780009ff3b37f88daf7936278d86e42134439480aa9794f244fb3c3abc95edb0c751f6356d2ea5357861fadf9eb8dbef4018442ce8c0a64cd46d50209d1d5fddbbbc82d59e0305af808f895df61ec31175c2cf35b779054a063e21ca614def84bf520d639d69fb69aaf564aa926d2b1fe491d81cd47439b6aaa59935a5f3b4680d749e31d356cebca7b699063a0e0a5f26944f55b34ab3caf1047d3c799e8e5ed9deab51572dba46e5fb34455fc91b639fa1923903486f9e3987c4e78e48342aa980d242a8ca3f9f947e339224e3226a8c8a0fc4da3a27035fab247c33278aaf687683aaa19506a26975383a153f514fcc06c47b6eef18044368d86995c4669f022ab216d14aae4e98c8397cd5b9b357708fd8c843f193cde35b25e662e45f5227c9bfcfbb395524756bd149ced24f37a92b6bc07b3ab3da10f8ceeacbb46448e69c1080c840121d475eb88ebf198c4c946d2fd18da7c9d07dd895140e1204c90f6e2e702258933a36e6e8f1ace4815909af9f1f9b56d3a45d2a39f80342688895208c8d472640af0f0a6ce4e8a3eb4ad44179ade89022e3affbf797238f3a420dd69ee5359a7c44b31c8ee7ec9f7a42d794aa45031bea77e2f7acc5c42e01a342adbbfa3b01535e7dfe4ccff415bc277ad813632ce2135dd4ec7402f86d3883e58b803bc6750a7e8ce41f8c8011d4aca2283ad6e1e4171ba7d763ec2027f7413a7f922768dcca159945604cec34f6366009f1cab10bcafdca22d6c316a26de1d54c60817cc4dd89fbcd47601425efea7ea30e06d0b5142b5641d6dbb833e5c18450e2f45753c232c27503b98c97b427ce0af46918dc88ddd81e38cf847e5616f110c5981b9775692355dfceefee56cd0ac01d2f00d9dfc8ff425215c4135696298d211fdfb4e6a89d789d87aacce4e4393a3490ee3ead4a4f5cba172da0c51a0ecc7ac1ec6327d2dd3f9381d3097da2f74edecd763546ccf4739612bca06688f96fde3863a64fc33cf7124e8d8499374fb97156de5c417d4ea69d14763b0c23e977f48fac124436551aa1521e4803089b4aa2bbb5d257b813090b5d4cb876a1b3d810a256c0370fecdce0e86c81c87061b550310ab7ce9eb142854168cc7688b5124d9ddb20b5ebbacd4443e7c236e676f386195f715844b44b8af0e22b4175b3db769c29d2271f78f342cb755e95d5214efbee4821701189f4ba33da951141b8b53ed1cb0b71ad81ec59063056a92ad539756e79b7227099d549fcb6fcd332ffd9fff2324f125407fe9024c3f87cce16460d662dd8098f93f0efe618e8753dd4e81be3bcd2bf4d906db3b6c9748c4222d019f2f6bb14c0deb465f04c7de6851eab6ca747b45eb1d41bb3da93596259187829d123920c83dc092119f649fd6d8d9421a877a7552ea09e4645b20e46f6e3bdc9d3b6b2538afe86b4449caa79a0b0707e681c1d6d6ebf1cd253d0f7d3f5a8231170ff5fbec1f03d8f47bfdbe2c7233f54e64e776d407a19cf68a849e53da7a8937b3b7dad029c0cc553ed9bba4b7f07b6f20313df74bd187403b75ce443adeabd91bfddc6d86c4ae3f5d00f614444b3a9a09479ee334be3ca478c48011bb44facef4ce5da652f644ad9f0a071b3899004bbaa6b6cf9335d885590c2e527bcddfa73694386a5e88e9194dc53ece0dcf6f7225543bd9123e6b1e61caa3f0946423f6545c857dafc98cd681a0a4d777824465161ce4ec4df1f8faf68ca07be1a2a634efefba2eab98f870da018f1d9786833d5a36b427b8455a2c5d613e56a6de6f26d6d12fc3744e9df3b5b8ae47ba526b42050a452615389922e6eeed95969e1f8b609e881ab622d4db0f02135c7b166c32576a56b6733fad3aaefec17ea0627eab06fb782082b82e99d4e6b2fe23fd7fb207c1c9ab73faae3acfa1baabaec32bd37bf0c0bcaa3e049dbbd273464e9f5e34c8e3e5958ae77a4bda778b7632835c3cbf2fb57c296cdc1761467b78bf6346e9c83b81972593ea75d89e6c6312a21070ce4f9eeb0c8ae356e551739a4bb5a421af41086bac83ae00a2e8af5b8c0e20ec4c8452de7ac1029fd3f6304ad2c6d52a6d631118b90cb77e4e927c7fb72081164f9e2b4a7ecca106ce0276723d9d9149474c3ccf9c5971c367ef3fb9e51d07ac5d1fac2379740468515a93c7e7dee5e21d18f9e9738c27060bf2f2b417d4569804f57add4e8b2eb70b273697cc304e5aeb8bdcc910b5dc581b54707cb3ccedfb28bb5fea22fb02064078f0c6c27b50b99f0d1d452eb3ad7a6f82ddcba10aaf837f7f94f8d2bf0299113b5961f6fd52075ebe4cafd5f301d075840f40f4cd4d09df1a9924352ef3458ecf2759bf919caeeb7a00f1dc0de23cf0504cc2abe62c136d1f91391e077b0acd626efe31193d63a8285c27af7b2310f6e011575c12ed1547abf84f6117c2c8d98a36f1b4fa0c41eb9ecf984938c42c49ee85dbaef1b52452f0182f7f2448994b436ab376f645e5bea624b092ab8eb1d5d4446bf3e64a93f194b48495c336de90e498bef4eaa5631c54237200ac65bca4567cef9519e16411c273d3ed5a264cf5727db2d9600477be8df10168ec8441609f2f39df75ba3c90e24a49c37a0833ee5602fd7362ec6e5d6b2b2b26e8de8c3900c920841aa1958123034855be2a4bef0fd9acb819697e7eaecd8e9d2584a4a0f3e214c867a95086c49122258de39c59c2650c67ee6c06289854a1c26209365c530cd861c2ccb10002ee274132f3f3176e964968f8a78888a5087ec0e4d9db9b200543d585e326f9da1e046abcfcf3f30552fe762e082d8848833a9424c5cb321763570375cecf2111f4d5087865f87e4eec92c70e7296c545fa11eba06a4f0e120c8e6afb3a5e6f528602be3d7b07dda504ad4a293ce252d7515174d8f9ea24c85fe587a61b338471b273ab0864e9e505a1eb45b7aa0d70cbf70814554c6e26982b6ea4cccbe9982cbc127e2ee3089184dfaacfedf9492cc9e3d507f0c7eb3dc7fba46bca03fe873badc1cb33fbc42190091e92bf613ad7f75f0217fb340b3a5c8bd343193501c1693635e00b1f3e0f5541d5d5f838a723e983835ad918916b5c5e5af80263f1efa5eb890c292b7fdf2e08294e72ef1a0c2194722ca2850830e42c7bd7753724441a99719ceaa8f8bfb87fc6997fdd17dff8a24a189503b3715d371108d4f0c96781170c6c3da397d85acc8b0fa65f35aba76ea61d8a978cde5b6e8cafa09e21d878acc4f57c2d5748e4a9b0bb99b659bc7f537f78df1d804236471a7df4f64d2b8a5a6db0681398704a0fe9d9c759d487c2514c68d8fe9251829532781c225efa59942f86339aacb3c0671e2e7e8e27d2361ba17fd217ed21f71c72e496953600a886b30e1b5b22123443613df9e8de359f5d3f8b5d6adb67aabd912d00a4076a94669858b5829aacfac7c09e7d8645eb47ef055ce42203996b808097e82519a7141cc2511d9e5d1988cdb7d082088f2edbf53f04bcd58472ec797d9a8138685ff53c5e42e658025d18e438c18d4e5f5c64c11cc8ed2ee910a6fdd85784497cd534e9e407d4acad6daf8504a2aabf05fd05565d0f18a911688f4a056e9154415447f6243b006eb1d06b4c8c0ed615f9fbca1b4348875c5842f69f18fe128b14df4e64e87c7b9f155ab25835bded54f3d1e4b2ff25e14f745c0d19c54a2fcecfe784c08756b60579c95c9c41e451b6d8fda1e488f928c2de82df9c9044fca5949fee13d7e8bdc394dec5e1c8b64a0386e575a9d7aaa12a8ac39a19412068fa409fe50064c96cb4ac98b0c9a7f5c4e17aca633c931513d3f207fec8ff317f7e3194119c38ecbe9d0df2b0c8bd90fb19ebedf9e576e9c9c134b52aa22cbefffaa5c8ebce9447ac4bc7015178ead926fe778b02ec13847fdd7094a4ad3840cf72dcbae76e6571a67543139519e393793f3d23b733898db3e788b5a1041a24f5d7f81029030e11e6cc7edc3cc1bfc184b222ec0c29df16dfd487a5d85d4ae95722f51b1ccd864489187313232a3aab251d7fe8a814d05058616bb57b0eddbb8c68091a7f9f9c702fe67ee3f1839ba0de63d30182b4b92fb9ba0df391791c2e57e166009b29dc14c710a0622f2e6d03d019516c3bfe4497efa1c5df7d241561e857b4a8a7b1f04c27a09a9d02bfa35913235410b66e56f7c3e169b67560e1fd669ed1ac6ea02a4abcd6362615cb59063b4f46fda3600103114e6749d65b22d0765d63229e0707252e71aecb405b6d00a31c86c9c33d73d11a347110ce9517a5849be0718cdd6283cbf1c7262e19a7dcf85826a7992d72f9c02be67c8be0bf9bfac1dd8f39f6567165aef2c244f1b8d0b04b7ce354d19679002a327d9b9583f94c5b99eaafb4ca4af7fd86a876d784ddb54247548a43c5838f07933db1b311fc2fdc017e849a7306b3e5b720bbfde9a75b293814c54d469609d04809a38853efcbe14555f59e3be6e19792527619f13c1a4a2944b7a8671e68c361b0113df6693854c650b6f1ad7e75acf816f7da4ebfaf7b7c0afadd00860c86149e407328df86dce295113153dc17db11590935b9ad83a02a650afca068c36c395b088840c38289ee7e3d05adf8866ca387da92c3825f5314bc01833fa29203e2e4780dff0f15e1edc757a4d888e8bda9eb031b34e943bcf5b4c8e8aca5394f374b0cba259bc3e6f5889a85f66538ea216640b3cbc39ac08250750173a2d020797cccea5fff0efaa5a77ae0c71b64cb87cbea633c5080a3c434b88d2811505d51a66d683c0ae10ff769e78804e0171f61c5bb60029076f24394264774a05d268ad331b9ade4670f0ccc8b1d535c2ae757dd04dfd9b72222da8bad98c461f0c0c4940bd940cce86f4bc7df8fab05d70e5b665016e7a603b88eb8465d99b8e154643d1f762605963182bac49ab413ee5229c365559f5bde92a2dfc9a02635ecb1799938963955852f8fb0c943b88068fb95b55c5acc653961e7eda619074b4900f8539815e626f2897290979a578588e2cb8d4bbd256b27bfd2572857e6cc5d167ded4a17001bfc69f352722339c12d3264705eb37214ae313e38699f80462d1399126dff07de73ff791ae93365fa0c267b76ea0ffeb5f178d31a01115063f8d651ebfb49ff39fc458b25e1ccf4222327e6520b29474bc9a49b7e63b348d1c4e444bf5ecbb2f17789822f48b1ca7decf88deebd6f964080eb44041777d07bc0f1c1eed77613c03212b1457e3c09241c141a075a3612eaa8e4977d67d10a9d1771b0b7a3e8e35b09f4199576144201abebdb21b914b71347f9971557af4a9625cb05bb279b0e98be4d111b23206bd0153e4b85206a6a3944d7773263bcafc333db378f844bf3850e86ab5ba8cd000273aca41a3532013033df15497b3509ef462a71c610b4766e161bd0588e201cf4be372e6675ba6f6be05f8a8a2cecc4f352c4759666bf2d999e0357215f959a4aaff653b51de1494a5201abb2ab2131a6db0c256184ce3822c998967bb72b1cca14d3a8b07f28c0e200d50391c1ea91fb5fd58c908ef4889865d648d8ac7de7a6ef1318f93d3873819f2cfb8b980d99f74b236f9fbc7f9523b805865c38ed5ef27dc3d93b3b566a38bbf8d1f6b894339606a325e2442e40534c34a35b227fd2982f053b4008de0e60fe4ebc01896ceb42dc66ca4bf5f60410058ab463ba0b0bfa22f2130be84029b8ac19466672321241290dce4e3b80b11fec7feb7a4ffcc97040e847d2827968ff959c53090f6e59c2c00f5c12cfb754626ab76ec2bbb63b940d0767f029805af5679e9928359791cd7607ed8e73813c99d1307c2be51dae595eb5d49028ab9186bd833a79eeba4f92015009c58119804f40349be89be8a0145391828cc656f0ff96d8537d18bca9b561415cefa981f08afcb40435a3f8a353d4ed67637163229449af32c6a7e2a52af04684061a63e4faf8a943f8e046a959a5078eba109150c2b74deaa9d14b95d5919db609248e5df2f8ec46ecd2eabd1c357c35326518414d1a5a848715dd074370fbd8ae744dd482ccd6628104b963f485405e4561b98077ede7dbd5f1e3dba7957ba7a32bf7980e2f2c5fb1867732c490541545e748e51fc302a50a23f1a46274220b393acbf97732326c3d275a65124ebda56a4151e630949216774070fed5ae95152ee23c1870f8bf7bac8867e9d334f905e23c6ff82bff0a632beeb3482b5c78a2226ffabed807e494ad79b5c846e09c496925fc76d7eaca1c455d089d5093b9b3b2d9589f6530e5460f663f4aaaea8ec2909c6a9e8a0474f326772e55d814c93a722030781f68a7204014c54d4c6faa9fe786ceb968d31b9cf255efbf45e903c1b8181d6b4c93fe73cdc43d58fbc9de55a8a6db657023bf5425b0385f615c1b270a61338860e2a5bf440e32c8e4075bdb292e33b87d13e45b86fbe0cee0800ae97016200649be174a8c33337a189d2660b69caf5352debb9c0b65b482732b078416bed9207bfc24889ed5ffd340f5b5754c9aff7a31f4c26e98ca760fe4abf7744fc1a81cbae808bd1a4d8e5b930a018d7538b1cf2e871c0d6292f888effa04fc4e2639d45362f2c8e72be9a9412f01402331c6329de82d0c7902908e34b6fadf01b59c920e219a5f8a00f4f9336254c375a3154d3c1d3fcd641692ddb9d9ea1c26a4832f8ad3d3f64b7efc2749297a30c5c61ce062e0cf5ce3f3356cc87a3211a1582726b99ca666e3e309700f8ca92470d93687ca36bcbb19780edaa1026ae87de753f08725409eca9532fbab267647cf0894a08d5f8c9cc1b524fe3f2888eb70c3a5f30c64f062dc6b42618d6e3c6de3a7515c35dad2129d9d9b806e1b8ea8fa723b01d7dbd53e517f708b8726016205dd5f6619168f36da64923513bdaa2c323ccf6a87135b590a601e96e4938ccca85e927d8710340069c24e4ff9f94f1b9b49434b5b1841defed4c58fb78604f733d0f7463cb9a6ffc90d7ea051532091c2da19e78e33af1c9953a3c071853cb6bdc2fa7dc3e4fd7470a1b6ef68977edcf23407b5d327a469e8cbd491dddc5735eecb874bfadaf8a00b37ccba0025a49de2b183f015dc62e22a3590d91aee0638bbf7116e20e158cb6947e28aa36449b2764b1cb8d11c9e09649202c7a2be8680013b9805ee428a74407d621981de9cb59f89e5908801dae5591efda762b2fc47ebfc3a485b58251ddf0ad531fb1ec859a03a141305e9d7a7a422e08801559c4a5d786655dd50872925c4c7b4cdd21b09e4ff4472d621f1e0f55c1869994475116e812c61b7f27eb4fdff69fea26b7e087f6319cdfafdb5048a8c8f409300ce1b6aee3e401bda3393b572c94b66fc2624c2b751ca8499f1ecb3b24a3f5d4be3a00588a03ba76684811049b962f3d4706b0d5a623d9f40edc9b78bc0b8d9302892bc15af061944620bd53ddf1201c3eb9da62ef7b8399de8b9a5d203af316187b908986e75a4a5219d7f62fc71488af44d7fd3b00f50ab98c11521537500b783608102b55a3e07216de863e6ae21a658f8d111e1f1a518dfd7cd0fd3184726702da6c0fd28f916f236126edbfa04ce450a03c55f36b3f9fe21e6130abcabf832b9f2d11665332d62d07f4509f2a779d112e736ffcb377e163444a70a05e145bc61aec75e4a6840a5455cfd89388695eb33033c2f1c1854924bc206ef7a5fec3b73e36046181dab1cd794a50476bd2615b126d75f9eecb24931ee3730c24df32e902a6f731f167207871794c72065c82fc46c6539842a03837824e3434ea961c3d3d3cad46c1eac469091089a27675c89ed927a4306165d089eaf985335acea42509f796ccac2872b9b03b609e365aa814e4d0eb56e12f9c57b18ef0ffcef4bffea4046c813a8e7b57799fe093eae29554a9733b5b01c3bc122665780d0b65a0bdf2a8657dd2db02417e8b9d69fa64fadfc41948daea484612c5430f295fcb2f940e44c2844a7982716b9c55a097f28c23cacacc737fd7b703df75e0300674a2e810aa5cf06c2899f26543d236e0c41c9d196630f4d2cd672280ebfbd5b2e27feec632140d47b653b525a363316e0ce3f7d1508579ea239c813529da6423651eb435ed68384a48cbf38f543dfef1d3796fff1431318e80b9a93be788815fedfa589e4bb221c975c413bd1fc45a474cfdb0955c35defc36758ec604f41622cd2f4b285a4aec88b97c57cea1273c566ca7a19481f1bbe3692306248c0cc4b6e29ff9e9e55ee3cfa789d86bd4a3a9471d59677239746f1d4a8d44e8916b6fc88f38bc296eb46066dd075411d5e5e2a6efd29c219e15d2a953da3a668df8300bf8fc5a86c1e31106252625bf23115636301ea79181a2f60b1393623f516ddcd8ebdb3f5f39f4564fa8eaea310f755d52388e7dce832697f8b3c8fd09fa457b24bd1e0e56ede7199e378b4b0c349b7f4a31e3109bc72dc61f02c5b46267ad06edb373801a009174c4b95e982a419380e43d7ff449e0d6fea540ee98ed9054bbb34eab10b0290716d2e1aeac8f184906f90187e171ad8ec7fe1f1b11209e4982c638aae126276588db106ea6102ed44e397214872676a826398ad43f09200aa4bd080bb18b206eb01c4ba2f462b3dbb859494292518c120d5534f81b66386ebbff8468679fe8540ed3089ea420af7281b473e030dcb49af60d50626b0c2b336bc87312081dd30be3286ec3d9c0c597c7c46f023c3a02997251892915c91c1e96eb88b4475890da52bf852ea6e79bdc9c97c2cc6fad9529b5b264707abc989b5d9d0808bb9cf6535da6de46ab7b21b5448e82140d76c04a9a308800a9fe8df5b1a8ab2f9414f7fbd176faca004720fb4a4fd224918532102c0198bb6252d17dc19c09e9b1ede0b3671a81445a36d17bbe955eb0a8bb7ea5b2bc06515e9b144d321d297743d231483ca8971ce730932f3fbf4c6c02c17901f288f036fbb93044250fbee4a9f4dc246a867fe4d68be8f6f2fa2f44744081d94a5b226a6c51c937c94b6d7c4d8a10aaf16fc687cbcc41630e8366f0039406ecb84ec6a9fa82b09996e429b012b73634d6f3ca403266bb9aa275816b73ba55624dde7442ee4f59f8418472fff221ff6aedd9f3724c50c141a24636ceddf7b37086ad00c5637dd0596df0cbb51cc554b63a83d63d72e5ce6d6251ac38919bfbb30c2b876992ff265407501d001d51bcf5132691913d25b6eb5d58a95ffc8049c3e7e8724e9bcfe449a126216767fd52017ba5a85141bf104cc8c098ab37a3b28f1de96a4b3df8ba85527f68dbb221c44767d0f6a8f53a15e03616c9054bcde276443ca89d01c46eb83261da49accb476ac973f3a98b2ec0a310273b00b220031f1bd6d32f4a1f54189c810a94d86bdc4377004675b5ec1323cc47e6b1a2b504c657624fa0f023317ab4c1144714622199d3be3a37d2afc72469a3446d89ef2b1675c486991d7e6d13b3a6eb14034ff6de24f3a7fe55a6582588661f08e4cf31a4c96c259d569ab44774297ec363496c234be6b41c5717126ebfb90fa94d4f3b3a5b77fff867de399ab0055c18a154894421c1fc2a6dc97a3a13f47827a429e6e63abb7ec078ee6f9aedb26e28c6ca90f93a04be6a920092dcaa65cf2eb64dfa2a0ee317fbbc7b1205dcae3c151faeb0c7b87953e1d41cdf7e4c1d164d67fdf393032c3199f7bd4f071c2c3220b703c9f29f74f06962febda77992c75355604810841ffce2eef2f6ceedac431ad1a0bd4430f99883aa83e274379d95301da92bcf434e5221ddc92b6e4eb65a7560fabb22439336c4e4d7910e5ce0e00fccb4dfcc5b19bf12a85ed60174c85ccae4a19d41b7ddb751077f705a06b8ca497a87d8433db4e10c728867bf69a24cc5ecd3f71c9260a968f915bde0901b8a8cf66a24919d4af715f329b0273e6e766aa4d689f5e17e8d9de9ed82ae2970528f944e8500e975a3ab3618bc27bcd95a073d5ebd15e087a24aff4689a7fc021ffe7fd9c0e5c2aae685a7aa85bdff4afb130a9132ddace4e85f74e6d42bbdeb5c110a14be94370a0351008cc7a531fd74c97186ac431dc04daf6a4dfe51fa69bd956b16e6ceec8593ad1a4b7ad87bf205a19e00faa0aa50b8eb6741292bef32f67c9ca85889bbdf76db62de013ef42ca6729f12caf97784790a4a9a1e17cc5f5a637be89b344bf4c69d71f963a7e06d63d3490bea41d49e23f059df26723a62cd193acd0ebb81405fc5205bd7e8da5db750f5955a19515d69738b60bd58c7e562c9f69c299c12fdef3350fb9e33ca0ba147800d40b8fdba83cd26a1b33d89f65248240d87b2914751b11c9b8a6458521040309a73a93b055d55e3e26212c831c60d1e56e23f60c01d8e743fb348eff248e852e6144c7f96134c72ae0786e44d50c023bcdc935af960ebca35e3f8dfb5392f39ea8fc1b8c47cd629be873f04b06a9ebae87944941ea6ce4e1fe83d4356a41009317af366c81b07b66bd403eaa75f4733fff67f1d98679225b9205c0f1c6d470ac59d9f3a60f1c96fdf512d972ef1440d75d8cbaa6bf308d20072833cd57dcfa668fae16228e0eb9c7c9c94874bff68874b4ee955ebf99d21f6ed91a25f35c9c23e1a3ff03d047604f215dbf821ca8e1ab8fc7d4dfd1ed2e2f33cbe5f6e3176f9e44695d77431303946bcd6b1fc08cc75fec545df91983555d3ebda948449e76500ba31c39da1399aa7b86e9585b505fa6e6bc8cae1cd2369815b332398810e1d55db08486f79096783bede67d12bf7985deb56284493c7c531b30e4318aae7523f08bf78519f4ac5d8999e6f83373e4ea7ea64ca5d5435cb38ee73729be387f4158bfb72bfb2dcc98dfab3a49bfa78afbe1d863af486cb8d9c47edf7acb9fbb6c4ee9d439ca0c7635bca194ae96cadd7ea1b4a0b9a9f5f4e62762ea2baa94718a47089eaccecc9657f226dcdfa3538cb820fae481f65a9f9ada236035548ba55b00d5ca9565e5666f5a5f24a53a16e2fd906a7ffe2cba98c2b1191ef1018425b781c4af86b4d34a0de4c523881a2afe7e2ffec68055acf55a0ff33993b496efe162b1e5eca7b840f4ac205102dc6629419d235a8bfff76f5851c528530e1e68ca605b392184e75298e4c4c0178ac0774eb01a7745a80841bad2fd45318668b5b23ab23f2cd4149733ea42cee60928d2cfcc8f4ba76e43281bc67230aaac215762e68e2abbb775da433a9ceb99350fdfa30e29d5f6e64a5ce834931bfab38a752181a363571b12479a7578c6f427f22ce7a63ed31f35ac8a593d0a1878830aa74d15b6029089ce7f638bb21f55b8f00792d6eda1674ad2416070a223376530ec1ac42804c8c86b8f2ee04995b399ac272ec6a14b5bb6bd8d8aaf07ec6e1cfb6c64cfe0f2ef19c3a9628c2b7257b8b98ac6b19195776c12c538dcd5f2e88f0fd564ba96768c56f2a033fc5d21f11ab831c007b3c46391294aab3a64d4d00fbe22a77671079da1314233a65c7c2825bb52f5e376e33779ca4bcd6dcda70b7860c2e72b9f55b1450eec92ed184cc04d9134ea59f1cca9a953c21a7121ea35977789873d875652d7118190dd9643855788b9ebd407fb42cfc068d5b0b34e6ddb49703e1a732e23825c39133417f2fe6165ae5d78934b32ce1b9c3a3e33b1ea3489d034a9a470826d769a21479a982e111b70e3a98a57462ea158a8894d293ea10570fcbc0f02c164749537c8ceae964415875ec779d2ab9805568cb83dd165226f1e7875b1fc2943eae912569a4b1866c9e7328db918a18e779d14cf90266b0c51ec472edaa6fea56f9e044998df487d6faa0ca41798936df32b954f322f75faa182faf5b4857c431856516dced5fb8eeb3f20edf2d98b0d93b46f51fe8de6e62df95054b61f6b8b7b59363c6767b56389a4a698b6af33f2aeedcb3665ec41acded2c555844acfea30287ab6a8bffab512d47bd9fd5c678aca4e13d05c8adf7cea0aaa4beee44c4056c7247a02bfe8366d95ee606fc87df8ce3202b696d6f1b354f020202e66e82a122f20ae7d8fcba3db9100b481a534aae4d66af644094a0b76dd7d91588e836d0fdda8dd76fa5ecaeddc330895dcee77e625054dc57cabfbc1e79ccb7763d8d2a2891c53d96a52f6d9c2f5918cc7a63e793c794c766b6349a47c48f7b347ad56d5c98c961b9e7f0eeedc600dfefc8cd820cbc5aa9e61997897f6abdef403faa972185e60d6beeab9a34513c5d098e66987aa214ac3c106c60da80c529196f054ec154f28b0f14b49683b3a076e258e87c66746fdb4112192996526e6822534da21cbe2e294a3ec1ae3932db29502041535d015a3b5253ee0fb0d2a628b4759a7cd9f6dead43b8290ab9331add60cd8303b6c7211d0414efef6aebb2cd5e06d873ced030c6b039667602097b777da9a2555ddbf6cfbf15134d7c76f248b0db6ee5a8023782f734665d18bb05b702803ca7757347d35aff0a5027f8d3582149e946b096b67721e0a999096f0070a5d5a2e8571693179ada45a2aba986d168d5c52b0a220d19a4da157ad1e6e9e14a19f455dadb3e3bd8a7eb8fab089419f03cf953210c4d1836f032dd46113ef555f4151ba611043382ca6c05b072cca23b26d1a5eefa4b9b6e331d6a1a2ef3b4b345a6df270f065beff32848d3cfc4abe8d7fa7131a35517d0bd7e5adcf81c01a78131e934a420d3d8f8dda2c21b4e684e021e805614c1c4ef0e0ac6ddd188144c2f28c0a605cb132e195d302978619bebcf66c43ac0d49cf36783fbd563567b52a618186f8e5a23b9cd48ddda82bce304ba9cac734dc465588a5261b139de2871cc61bbd697baf43e15e62982720bdc30939ae10d7507155f566ae78cff5bb17d77a5ae66fa5edd9410d3fa3aab03bb24189d48f0220c738e90e4dfac7183ea55ecd2efb8f42662fbb074fa9247735e15f3cf812003cedab95bce485395065f153f855e84a0f24ea7fe867db3e99f40eb3c2ed80fc81f88586a403a78c2adacd4d1bb25328f420c1b597707c96fc5d0c17f7115a58b2b3fe8a3d0519be086dd2f763eecd53eed653bfa90b37f363898f9fbcac1aaf2b3dce1c8e9a3e6491ec835a012e7843cef684988dffa05b620f2c944093388c5a90e690382aee8db512d476b13e3851ed0af37e39961fea24c041b9763e75aa6d880d31730255241bfc9d8abcbb91f66f2628fccc192fd229ac61e4dea63047b2b11353447b1a1aae095a38cc6e465a4bb131052d0b5ababb949e19a1e83ccbd958549216e05c0f1a2192ac4e454694f2ec197e31dabf4fe5f0eafd267c9ff00638b571332acb59f30447764f3bccb634e31fa9ba3bf2e5f5f81bf15feb0f0439296c217817d5675d7c32279381084eedb9613a216898e05161a4597324a79c3df56fec793c35805bad66cbf23d2d49a645b5dafa0a8be8c60255db4bfef2d46da4a48afd8fda33e7df46af7d4d01cca063f728f5dfa670b8502c85d36e8bc5e3c54d6ab652d66bf75d01f66e887ce0c15a1d316ae91c011df1938f52191bfcc8ce03886d331194ad20f7200adb5062fe5d448e483d965c4aa117770e5d4e1a59029dcff782ffe90ea4e725f185a1416f27e039e36c474d081a1e1ee498ef06a5c05803c0d3cf72fea76277780f9eb051424b905077a14de5958fca54d2de85e91ae34165181acde517d93490e4415df59dda23ee29206f8568a59bfe6c68f59ec7dffc760f17d393703f7d1fee2790d589cf319a6ab705ab196903bdb7997760265540fee1e907073d09710941d6d07c2dfd3cdc51c6ed873344200d1573c164551a0416db22f0dc8e047cde7378ee1b05fa9353b05efe6a531e293995d5f6acacaacbaf5a028648eabdb140d3a0aa0a57b7c8efce48a3f7a95a44b6571053b16d217b4c0e4f93026af8bc589df84d83ac3fd0eb7e605de8f5e9bfa6c945bafa3bc7fc783e51ca61ce243bf5d50fcfb3e17e63cf6d26ae842ab53308d404b6c41ada7a6f655b4677ffabe58b22cd125a3a99179b016f5a9bac5d8ea34d87ef3b68a449f6dbd35a68558206687bf605d975481008aa7d5e095909867e36434e301a740bf9873ba75fe5a6a9c0dd3d2aedf35ad657cea8e9e22cbc485f0ef7d2118a01c9ba48d031edcf9965002806087e2401b804d66aa3e2661d02941b5b9da8c31bcb92841bbec51dbad98224f744d549d5cf9e37d3d0a692790dc5f09b805f78af2a42f7c11747d1ede426f69cebfe0ad3fdd36090583867ee351e402154f930305b755f3fea485bc6e5cde8c8e471fb1690c61eaac21bf5f6917c8f5b64eb87f33b1eae80c008942799fbaabbe722e79b319ebbbed9a8731c6f6eaad398081041e951210417a94ab44bb26430cd861e33ccfc641255e5c8b47d4b9e9c60c638b440eadd3777d994bdeb2e1c02f23717510cd7bd2a817a7a00b25668b9d81ea7b153efe1a06e4f0358400b90d466abbda9fc5ab05e97756f15a27e2ce64d51a2b064891fce908b5a9a20b57a0373c25baaa13744db86e081173a2b8de7305a179eaa0f31b9806ff1290412d43ede70427dc6b92f8c76996f5b93cedea6310fc00db5cb04f6d9dcb3289713ce8c55b0351ea6e3914e543b15ba4e34078ff510dbff1cfa14586662092c5c7ec1438976b8c60074876a66b44cd8e313fb782b7ddeec156352eedc3f0b77d34dd71d857fcf64d6bf85f50dd691569db3947c8af1989588a384dc62c74471d9890b430ad19e715856c4aa8d6386e3a88b62f94167d1ead26975503b57f4118000091c5f1d40313004c94c4306cc8092f0a081f5f9eb4b9014f2c60f70fd0513fed21b99adaaac47380e80b3261d3b5ce533986cd43df520e1da2e1afddc583552529146fd2e55e93aaba9401bfbee961855494bef7bb6ca060d0e4560989116a28f51ff12e39c79b83db5bcc69810dc98c49c41635cd5b13b232f37204115247083942e437b52c29ab3b68d2df059fe4a30f06d1c7cbfae6ea21f4d3f61c8d01ceddde2960093ad5fd9c76533465a1e3ecafbaea078d2d8b96e4801b6f8a6de6429279fe700ecd54c119ca3723a2e268c9c7ae153375b49cb696963570ea57adeadd21961f01301357ce4bb803f50c71c7bb93b945dd8831b45e82fb59f83caba43bbc93550afe3fb51a435dcc4d893bb11f4a6fa018e6bac06a41aa9a72728c4883a3d74f193297f915a44475bdd74dfbb936f2d348dad9026202f67d2728c3c90134703d346a391e6b8d1b7293762831e7906590436cc3b9172f393bf2db56cee919f0f1742ff8864a07c01b263fb4aeb6fefd223b3f5d30edba89ed0960894cb92fb54ba71686579ea86de08639bf9a10b4766a86c406cf2088b8178fb4cef5b1e87579b483f41d28b82246a741f54dfae75949621f720cb3c670d18fdb4f233e765880f82c43e582e85e89df046863af5c4d3de6bdf4219a780e1d050300dce78f4a525a8070022fcb2d391e67dc6312895f60d70ae8ac2c374f000ffc2d7a7c29068c51dbadaec572d0c6d02fbbc322e08ea33521d100a963ea8f3d5d545095919a9f503101604e9fe841565e1d2c65138b4191d932f075f46454ab94ce7b03d4b10f4195cd08b107a5cbc11233340057f70f2f037259a27506f4f4c72eb02164c37a9810bd636d9fba95e60d3cbfa8b95348cadbaf6a24a7343fbd906544729a8aa98ab644764ceb188b065813503fba659ed807433326edbfe6d1c8b4ff68972ee6ec2b302e89e26e57823bde2e5b193231ffd7a071d99998d8e3f97b752bb129a29981fedfa6feae36e0e68791e04cadb2fdaf8be924f08ac859c11227a9ef55021c3ec0aef4e8646f79a12035adeca6ded1ab7a198f68ede547f99c2ed2ea4692a35235094606f491f7b0fd5d74e42b872201076f4a65a234c6c77a6272219a8f3cc9e95589ff64af32fd8095a992e1fe9fd20e32984a23831dbc837d9ec99ec4da011514e435ead3794a431f39771faf7b60be3916f63f983ef9288549c8e2c65b0723667cd294433b82ed9c4905d53c58a657387ac30f671e9fdade40bad2e782e97112f7a940126ddf244ca7e3ed93b61e80b675a943955f28f0fd76877291bc5bfad0d534286e980983a1262fc84a171e5a2dd3a8963480572bd811856986a9b605bcf03e2bf5687c6ca6ac2e562d509d36c174c92706eeb30a3df483082d128d85a3fbbee748909e8bdc144f51ca407e62a008cb52e66b30dd7d7b4503a9929b400f0c5099c63e20c1902e2a397338f48349ca92c019a7bd5ee76b4623b75912b2c50ace42299aec342c2a6f20f73351c81f9c9b3385f742595d0ee1c6553e88a04365d0e0da7d82acd46f5ec4077afd0e05b80c7d31bb73a8923134c6db59f745fed463971d13e68d2a793cbbbd64c7d9c912c61bd613bdaec55168201f75f46b00ce3d5a088d5ff6b3f75520414af0695c9943e8ed8532f0be729f14385b1c8254b8f4882d584ed34be1c3499d74e8a431fe710937d0ff7ad71b6eb8fa0bcb18802314ab4a70d0b7a923fc8d2c2ea782f3b961b742e14461d6b7a623497f95e1be0942bd82b7bece40628451c0494df752edea1af66c3f26ac096d9ba4db859c8dea20923e4e3dd990f4f760846e4321d82c4c4b11972414a3869e627fa518df0cb7e718e61b211c0a5b093cadc0a1d3200aee6531dabe95e2240e2a4a38c674409de295111dada47724b9a6399e8d51fb6e0344a507e6ec1bcc74c61bc7bd015a4c3882d5a65a9d20760736589db6a43a2323ecb2deb98e23799ae2301efbebd29ad1244b654798561b694fb238370c87b665370dbae93ed86ca635d32e1c3226e2c433430398333ee800d212c6524528cd2d0d74389bc84badf3caf7e28ea1bdad93febec90565fc0858391a151526b83cf2c93dd0de2adb13b3717a718b6de8b1ec0b925db7762ac7ffa921e18ac1d2008c67c74f3aad5054357074dd34590fef5ff7f9a63dddc64abf11d2cbf122db9a1c6ae010d9316ac9109224f3d2d0fbf532e76c0a77fc4fa099019decd5bb7a2a7444cd2c588a1109027c5a01cf1f2f627ae277bb0bf309bb0b65a5815dfa0094b020631d094c6bbe2ff5bab17df4a1c3b3d4d21d0d2f7c9a6149b8c3fe1d5b430f2fe2f40ec8e0da5848b6b04d830b5f9f6340395b33177475b5ec746beceb362becce1d330dd65f3b3dfa7f9be347a1b2f50a85bf88f94c13a26e12b36f988eb6bc3e52e21f6ab5e243b421bdd7117cc393e8345af72e8bd8271284266db2d96a7b8f9ccf50ca81ea479645dd8ce923b7f4239ed10f47d18fd09ee8dda784d5702c76a6130959529527ddd8b5dca46fe36d133d245c23dbf99c07490462865311f3ec4bb837a0fafced6e91804116bdaacd80eb86aebe590e0da4b220891efaa45b9ae1b4b6efa83ae22f5dbbc59d117765e48191111a4c5b5c9b86abf8b0862f09d7a2951e48aa4d4448a203e44d4dc64a0e0fc352e1420f3d4c33debaf4e11d3202371e0e80109f1ddec5afedd600640e539e9040b298ac14853209d2e41e7a713c69c50295314de3d5a259b435dee12ce6bc36740d1d8c3caccd4e95d15f1247ef4bd1d48dc0be3432349b5f84ca51dcc2c70d1bc518cffbf2524a2bc65acfe25f529d7433c253665283b8f92a6eb732963bb882403052c8233fb95d418049aac30ad477bf5eb6fc57b8f975c2fec2254a539eef6e865c84bdb28e31a28901d181b13f21999e7d6fcc65d28144df5220f30bf96a1df153482c310ee514a94be269c0cd9349b9190ed385d1a07dd60cf6f2a9e35bcb16b1e499e0269de752f6f809f4ab7b06ec5b37ac5e7ed193ea1817c11e1e7944ba42d50f55ae28204a253e7643b571bd93216eabb9e4f61f78e0984b57596ba9ccf32b6f69cd8f65380e44745be557d5d2f1cdd6699f0e8a57073a40dc33e6cd7813e36f65967116f94e1b92919b1b59643fa68d01ea11585b0c5bdffa0df924d0aec18c684251965d127e92aaa7fc220a4831d6ad3f128f83b51e529976ecc4c3220a2955b6823ce6f2e68aedd6a0ab594bc4d64dc4ed8f8f8913c40b4b9a9c73a7762b7d28ba037439b6a21420dddbe8377a2fb39f7f0d8b08149e971c16c0eecec9a42fc57bad86f0ef084e176b343e8bf52013925b42bcda13b251822478bef3d954d0bad8c8e8290c04e2e784073ca0bd5d758687e63b82e8b505e91f001599b91020bc24ad478376ca2d6782eaa21c118a3ee441678d9d6c19a38821e2802c14e32d09cdf20da181406aaa374f59f8cc6583060676d8f337e77020a10560f7e647c73861af20c164def2e106a8aee5717931bc4bf3d7c2934a66bf3dd35d038906f8a23ed1ed5b3eb1d635f9a79e0a37d4f6441b565308b5e09cbf4be6bb94ddad4d84b2e57d88e78837f45877bb4442761a0c409dd4bacc0acb90ec62ee602356fffd008c1e522b84bd8631f3dde45bca0fb0bdf116d4db6fa023406a1e1598d80baa8601d35c4f6029912dfd495fe394f663144e05310cf978851a16227f71c82d9e49a119603a39322dd53710f99212df9fa5f265cd3590c74c036593a496cd5b2901175877e65a83864365f89231077fed10eab22be82aa1d452a92871be6b864f566fad85f8684be3e6455692eda892985369e7eb52a5983f382a234d5f1b7de6804b07083e14441e1cf39f49f407b5fc2dca2df13a8f452e8369c791f37a9aa059da846d122f10be7024b1a8bd4a71132fef52fd9a56a41a992ac07c5de577edb39e4110a627dce2e455f9ffb56430d4f1fd90e4a6f74e885b2bd811e9794c3c703f8aded3d67b2de9b326b5b85db007198eba235480e3ec101f820b6625675bc050cce3736e56fd6673e8be18433c66436c34d63fde33b2d32d594f7b5b1c713b5ffe8ed13bd4436b6007709aeb0835c17833f52e8f2718922eaeb1d3935281906aefe25d9410b6e69a2af47a283570707664d3774966b8e5a33bf2f33dffd5e41d76ee2c20adfb9935f77396de551bbfbb41688a1ccd764fb49fefac5ce0da59bb4d585f14a1405b6f55c82860255c5de338819e8610a36576b047390ee383d33e1fa42fc286ed125a4de7aed6ce668d129143e21da394126b416c841ec2f7767cdc536f2d4ba27f8d6f3aa1d6300cf3f808a4dd021286834136e0db1577d39559dfbe6c6d4cc540b1815e8c5359fc53685e0d54dbc49225a67018ed5d4250f30880d11dee0ce4c80748cb5625b6e01dcb49404822ecf4a715b163aaf6dba3dd3bf8e91946b31500d4551c518cb6fdfe08c1d074388dea7724bea606aff0e4885a0f94b602db0ccf5eae8231d325d15c4ec1fc7da91e598a41a818cb8dbe0c149b0f6d8d1db229a09a0014dad5dd7a56b5ea3d8aa39069f62d531cf7171dd8e44f1de9474341f72067e64da94b14041c1dcb3a88fd3769335350c8f3eaaf8fd7e34a71afaabd989ea449e22e6a30bffef36bf069a37f12c1d5dd1c7591fe0930e059a6a5b7f9c494ff683fa4cd05dbee516f642df4a88783ccdfe26bf46d128e23d782bdbf0eac96f2d2907d70f7b8330a5199694d89eaa382b6d328db71c5737d51e066fc77e042ff95b470a663cacce9a99092c736d53fc412922b8f9ea59307ddc93e43d63b760197ff5a074c3e8e775136e63870c908371fcd555b6ac9b69b41a7f05c0d472e51cbdfc47c91567d0ed66f87517726104451fae708d4d295db6a98b646579def05bc8633dc946b3dd10ade8e5e1bbe0dd4400321f07e8e95bdcd38fbaf5e8d33fc718086757842ec750c35bb99ba404a6bd59b5846a0804e4cc6b0def4a970c038b8b46c79264acc08fd54b2a9f5ae2ff3bb4132dd0ccc0fa899b4c5ee78ca8fe02e518dfd38dacf8701636dded8ccac4eef77422e951bcb6a32a317322ca73fdaabc1800940909c63c5ba56e6975fce1acd7090d86fdb93824b8d4dd75d242bb58071fe967802a179ef42cde8761d0d131e66325b040c09e512798da1c899dd1a9126f9e7c59231708090891dc77a42c93ed31fd12fd71c32281101c6f1630fc131699908a9fb571582acf541c29eedfd631fd56926dc6c06c8f3f431d1544b698e66f999fadae1e14291dcb6e1572e8ff4bec99e3ccc529622bbf6a30afe4cf1c9789d0faf29794a9329d50dea51c2265fe1e9b3bc5a31fc349b22d9806efbbbb44e0c275234821bcc3492dca9778366f4682f3c16b430a921e50378541a1c70cb6f0f0c046729cc3a4a1cb37638d1cd80585fbd31167933b1a9767ae10878b9d4b9464baaf8bc20fd36afb5d47f8e72fa30419986cef43e53ab0f148b1c0dffbd1738788dd0de38425df6e793d086f4f3898387fea2f3edda89b19570545794d94da6048d139bd5501fb3c051277325825d113281379202033fc41929626d9fe4e057bfa8c996aee33f1d3846013e287768c620b7b5c603e6d8372629c5ecaa42ee2cc2e2194891a97dbcde1709f2a9612ecda36e9c8b40b20adf15f84597beb682c67fe97af79fe9bdbc07c0ea0ef9f95be55a296846950ddfc205b062805a299773053fd71384a2252d14d1875e92dfd3d6db0d371921213017e8ac33ea4c595107d567e113f2f02f1fffb5ee3410be1f4bc414fc512d53f64c1c78d36ccdf48022c7ae4e0c0a014e9b05b046781a6253e63c100add07a75ba868ce39d0c3cd1203e38c50c1826402b522f353ef86fae4ebccd742426b1c59a2a585b852547cea413d0d9ae63b0a4314fade7c832f4e47259607f365ae165cefe9023dedaaafe97488820fd269ad18aa092527885767f64a2258f7c8197f7aaa6de837ce74588dee68da29b0c75966b3d9bb6d41e6e019942937761ece70783c9a5a9f8fab4ae8a4e7c242f380316dc9e0f3ae5465f9c84dc28a3de5bc60fa784aa69cc33fa70d6fd11b98b5a8c6c2cb9f0f9bdec6666572b1ee18ca117c26f6aeff503dd4b4c2f5080b3fd8c5f1bdcc065dcf990c5df5b9d64957eca12426d4a60eabd4c3c8295f338888eed6b3843c79a743014f07d8bb43e15eb4adfca3bc9a31563d47ec13a99b778937b2bb64fc3cfe88cf8ba7b08819db5ffe9e8b1a9a934094e68edc8caecaaf3038c89fadf82f9330f6a5db8717e89d1bd81c617ce07bc871ef28b443ce94e1ebc9d1a8ce3c77cb5a2a529239595d0bcfeecebcd1e75c79b054f79813089a6e70215ae1e992e7926c866e1554abf6446c0fb1ccee552e779523784097bfa38a5cb88e41a3d71064bc00072f5db66c17543ef971f18985e387f4c0ffda39a61a6f2b0963224c8e6465306480361bdb42c1e83dd407680f6bc16c79cbb21d28b72628186ba507f92aaa4dde7e0df66df89a2044dd23485971853e7925af9901f9f6cdf326a103fde3b9a90d1578a0b85565026165cf0906bddef60cab13151740fef0a16ce65acbe46dd9d942e136b30660f6000e100280bcfadc72e0dfe4910b9c21d89e93613c858ef508b8e7d5b75e681ba7ff7473bcad80537bcfc8ac20e9ec5a58f7c128135dbd97c6871006faeb789bbaaacc5d3ad9772873164379e048a6bdce2b66dae1e5a3fc3c55426086d524f102f4740ccd49f51ce94716d090ac4b72967c4046b6e42c9b70958eb46c1773e92003ef90d9cdb9e719a0f6f97d0a6c9e8b54a0e77d4658043dcc13eb0a7a357d2b513832fb5cecd7a7212f626a6aa4cc6d5d568f261e97309e7c23aef4e9a66abe3ccf0b1978aae3cf11f2ddad45c0152da4b2a8a3c01b92619159c7311ff3f35e769acc3004c8ea3974ee24dbd57924f2a21b7585eb7382050e5050a44dcb9317d638c54c5aee81ec00f2937f86bdf683373ad6e4dc93b2e06918d6f121f46ce3435f47e7fd0a18c420547ebe36b9dd2f967611b5f11fec714bd220a0e162e0b5038976ba05d596060c48c35943076dc93f6209769c0863236a4a14ca42cc7e45431c725ddf91c0522aa75e011ad7c9c1257eacbdbcea348fcc892693c40f6de3675a3c2c8919d8303cc76ce8ae7072da4514c9d1b3ed5385613d329efd8c33098585b7170ab88c5b7d56ceb5dfdd3b5da966eea67599a61d5b3a17a203ad7541cee17360c510f32f2fff2449ec0c48312631263e6a57c231465115f58c3cb6f835051d3680b1cef97043b4acc079a7db14df970c87178a69a6d7973f77350e9af379c17d5e3d9a734b6b39f8dd5fcd9e2df3517e1e1e3db5974c9d119276c48282b867276769bdc86380995e570f82799c306590fbb2e24d9fd77707c6dde19fff568e00b670450bfe0302148f6fcfbf9ec41e9d9a680e67c18971cb04d045e27a62db72aa8bcaac0b9f9143545ff6ae8a32bc09126e16335a4915a3c163e14fd3a913fa829083eac15d7108702696a1469e50160d505e134084cc03f5c8b0ba14734d97c0798c3a41bc2aa8e7baf1b8ef3f240a2645f3f814bbe845f0e71e353601cffbf653d796b110099e9eb9f86b1c1ee347856def07a9566c9ccddc277aea3af765c0b811e34bf786581705035f509caa8c1c2578c15d43e8f8166a17d27f85b4e01ab3d883a1dbecceb901863359325fe65a669a012811fcb4797e92102c8601e2511e20aaa8d8c12c457dff5a0bbd154d47d1f2a7d06675e22020faf8e47e6ef111a4122908d0d05fd31507ab317fb21e757a314aa92f89c3f938e8ce420ac5296dcd9a97da5ba51a269b9ba54fa8960df1cebfce174b1625f170ab0eae3292893955b6a03030f66dc002cbe2e7e23edf887a2a2ab7916bdd36e5d8aa735a2b073204fedb329395aa040d8e24d1bdd3d1504cdf05f8c551612d1f0cce11d72ca4d7aa30f43dc5adf5f44a15a215e08a2f101ed3e35948eb6c64aeeed4f8c30fb333beb53aba0adf9abe19946f92253383e2d19b0f4ead7a55ef56bcacd683d692567811557f00b1bb3fe6ee149736094fc8d12898c2ccd15d6ce580cc9f8be7b97f09e1e2a8c86f5433a6493e8f38461a676dca0ea6fe96cf03edaf1c93b719805e9a269630b7f33bc8e7ffe64f52baf511366200dd2ee704bb737be0569a145b6aa083189acf58d999daddbb68854bc180e8922fcfe10c1f3b92ff0c5af2a82532638dce647e88e6633013dfa950f4a1d854333a5037eb374036e7806afa78fbe8d54c26fba4f109e25d3fe50a59c3d3b46be547935ee29437a2d5e4b0ebe129b5a04bca21ba563ed10bd894ad13ca7f79015a184263587139e8a298330300857219475a20204ca48a0db2da726d999e4c84c1644e6bb11ddd3410b6acb910201e6b2b4602e9ca86f3c232ec70f611d52dd8ea8ccd7bee7985bc982585a2b329a091141b24ad9ee927cf4f114d9404f3cafea777c3ba869df5f4a21a8a8932bac07f91cc443f8e5a1d93f77cce7079ed32acd8501b7758ffbf8c862666e7738de248d82cbd1efb5b2bf89b34fea573919f869aeb97b9e97f3b5bec16a7112904631343737930d9e53eb2b906a55c9d144e59da2a64d89dc9ebc525b8ea14c56235969fb3975522f117617b42888a4a0a07f10e772d334c58054a08454db0a7d2d11c9a6023256f5a249b36c09b4ebab1d1987ebf39b573b9ab5c097ab4eb126b5049429734b0abbe44b3f8a889c0bab6a04ad2fe44e019fa9ff4468cb16f4ce764b5e4040192653833a6213eaa5f1a6140159dac9e4426f23124f24cb857235d4fcd93eaaa0b9bab18e36b9668ec25c4d08249d3a3905e225ebcb0217ff1767a8d2259d50899638fa779f0fe146f741e655806f663b16ac5cf23a9ba2aec908d4d3a7dc1eaca6a31fa6cf159053190309e65660a73314bca4f82d1e0b6014577eb3154654484e8631ee88d8570407d1868a654c8a1cac9a40cd3f20b5d2ed64f4ac6bdb36f16af5100a37dc91381b4a65d9657692cf2de98e8ebe0567544695cf0c2b44051685f48e8f761d0c910f23c13564a603c7473d39226ccf1d8b77f4f57fe94cba559a64bd36bcfc27772fa2ab9d310282328903e772e57dc45ce454cbadcd6b4dda5e35ac5dfb42cd78102adf5b89d3dd1d2c74bd93ec693886c429921fcd0e35eef3cf847bea3eddbf9f092bef8bcd5d2cf12f5d0114693babf2fa75c36a93a92b48e1775ba7cd5500869b29c461b8bb0a87eb667d21b40851410ed713a37189373bb0831a93daf82c6a551fa852667b2df68bbcedb0817e254a22f98b84b916c598401ae5b84325aad06134ed5da33f1e9d3a0f73fbb7325c1e522dfc213f626a43dc9b99ea6246dc1c5dafa346135ff63d065cf802a6963bebfb57ae5813cf2464ee754232e11115b1c771d7a1afdd9a03c6b0a631340aaf11771aa0a86da345fb82fe2130c091e5da9be77e4294202015c64707663ce8ff482635a8738cc26006c85ff26f0dd2561afb32bd3f010821318a7d03a4541e3dfd3db7f6859b0c3beb62a4b55d725c210d7db92a62fbf4eaf176b346790b2a83c7622d2ebab276df3cb113257d7d12572d4b5a1bc8a486af62e52fb6316b9f2f06bb1168ae30f7253cd2e657e39a1754e61457070cd14d469754827a0eff60bec32d9fe7f123f344be5cca42ea03038fe718b7d83a7a58039d063619396fa71d92f5565c82d1fbf89b069ed9e41f7109cae8f708c993a47ff8d52e728dcea34e744119d7d9faafe8f11d1c93bfffb63c0a9598bdef8824a8efaa0457986f1b1733f35d6c378d0189f53d9a44efb55db81989db1c653cc2dd2694bfec5e85dbe697007faffb68c0776baeb3b1dcf9966859290bf41a4d9778d96ca5241a8de0307a1e561e9bac708c22969008e6083ece9933cfdbc56c70efc9202ae72a11460198e93cecde37328e1a8f32308e5ac28c5d5eff4ef05d8fb5c781afe1dba8c2075ad2a1336a58d3b311cabd5030251211c7340029db2865dbd2a904c05c396e217eebf083005ed0b48e5ba2b6a2761629736abf94b36b36bb31c38c3f6195dffca75a732ad07d13cd813da4b5113f5691d3016c6a2149409d55bb581d5e3debcdab8f8039c2b1853185d683c624da3f2da4435ae51b1dc2684c8ddcca39320337c900d45105c2ce20ded197eb458f404364fcbe2fb914d5bfa4a5e97075af9bfb70412d133d5ab26dae9585492266b653eb4b193a1ff9a5863566938833b44adfffc3bce210aae7251fe2e465a4901d23663e19e1443974f39d70b901c02280a6d5c8f90065a336b77b00ef572a5e5f3695d932642cecb22ada77e20b09658b31bb77412235b7ec64135c7c2212747b15f907a6bb7547204c8efbb2f0a081098cc7a85f93f88f92023502b2e3bb331298ef5c636c0f718b5fba7805c0d74d260c841dfb83a36e85565ac0649d9430a38ca3e2532885176784c8841dab1232db28008e3c0054b5f5e7c7af64668d9e6bd361c4f5ceb7f89a5c5cb3f9e95a7a8c5d3c74e509783e200991aa3d135964ba5cce15e1b452a1a39b0056acd1c668473b15764b46be07a4c427b1e8a9f5fdb3bb94f7411342328d21e3b9031e7d5bdb9f84b3e78c99354ea72ca31c3ea2497d10fc6511c38ebf3ea0384c0ab96f3502486a5183ff2d378d3ccdedb677436d5ee827787fe9f9fd1427b2de73e44a9cc5a4ffea08362c1c39aa8be61f81b0e0fac6efda2ba3f39af238c1b5a3279b4433948b689ec9697436a9a546d7015d43dd9a5b8118af1bf65631ccf5f1440ab273c06173feb8dac1582e2b19b4616102684cbe2b3b443dd4e3ce6ae26cde43a22287f3b6654ff88461ad6925f4ad636e1eda14e43873934bd72ce43e327e710403f1357db925814eb620f73d805ee725cabb38f7823c800d2d051a9f5ebe352543097b38b37442911a78f4c45a44b6209a4ebaa2f0d4e995a6b6f2ff9fcc5407c329146b0529579efa20af94ea9be0836c99c47bd7ac9e8171f45daf034a21151534d0eb772d2a921b7d2d16732c300728a77fe24dfe44c519bad393015f80f9022ca43dcc57282c1d6924c4a621c58b446f52ad655b5784e58be129d6e358ff651267a8345dc79025e457775e7a52fde79060dd9553332db1779f454f01c821c746f7b3325f4bd2c88484fb061b381cc4fd0d1379efb6dc1781c1f31998fb4d8d1e09a60659cfec421676577a78cdd61a061faa77da0e03c73236c2848fa0b87ad340ea5750262400b39b1fb713a649f56a1f04edb01c6a5e96bb0f9ca712feada7656383026e89fd2e7845e05a4e802dac83f9fa7f1737826d67ac68cd0ac04a606189fde685ccb393c5144487b05b4a4db93a16c69c6fea025b5adb47d282731a2fe393835dd24b1d0bdb2ecf09539428ae6259b09594bebf32de627462df4fc26ab4d3a992eb340662787ef4d92e7768dc3f80b30e46f1551f15ea16a7caab6e6bd80f9514012ccec589a02918e89d54824ac6cbd6a82feaf7fb8e3c59bb75f6565b9f0aea504627789062946a0418d274f1fc137f9a17ca94e89cab359f4afc07f3435b5f22bf0b7b5bfa336cc870dbd7302575911f1dc6f65e4764f26c34b5910f5094f860a7079082759dcbf976e71d99713c79ad850a62271b39ba593a1e5197ba731ab7bc4c14aa1ed0d4464df7d8c801e935b75bfd50deb2c66c15496846c9c906393418809dafe1b3af179fb71c3383507cd75e9efb3c211cc8615a9e9653d4df0114f2bc514b242fcc13bbd59fe4e56c66b329fe67e4f7bda8d6398b07079699f38965f427d9877ce1ba9e014a46c46f97061f63f9f4f0d5c014bf178c26712cd0110bd5402385a1bfa7875f2381480eacfcf98338f5e3443e7fbd1cab6e03aa8ca7837842275ac583d831ad5b7eab809d99657bf32cf183785f6d77c7e26453cdcd575418894dd8e75efd2bbee7014bb006152f0294d14c16b1a1f02f455719dbabcb1e893ae648f547d48fbe0916c37dd77708e3ed316a00edd6c669ded5b169e94dd1a2f7beeb28191554ba897146f73cee82b9306fdfa14fb61dc82d82dc346a6ebbe412d0babfa1aa91ff319ecb4f09983efe8a556a685d773da00f2a127254dff4e6fd815f379ad1093643bb60c785db9a1596b554e7b69f7734e6c1b33f44731de58f04b02bbb67d6fa4e81e7d5cafc002e24871b41bf9ca80bbf682ba8c42a46154168e6645cafbe18f16b47924232ba0548b06812efa1b443d33c35687c1e9fb44fb4d1e4df175c27b52c348ea094bae88b5e4a935871402083b3b84f88f0cd3356ceef768bcae945eedaf2a1f4858ad32a2bd81adbd824e32e91df7ff767d1d29d148409748e671c0bb9e8a161aa4436989abc93127a1bce9ea49cf98ba0520bde5a0517e26c22cf2feb6928227f1fe6c62fd5d80d781dd21853ca59ac17430ca9da1c59373f9e0a55106099c1c06df5d91bedee2d377d05292969b466b86338d7c8ed3dbadf0d6c1b64a4679fa345d8d41e51805b81608487f5a8a2a273ba768a7eea08ae8fc16420069c21859c47bb54fa03987a8f925d903a97f1f5cfa3b965abda13fbb35112068551011bcb972891566b7cd8ebc38f82de50570029b6e997df7f8deac27d4f4db0aede1ae4bf32c0f80ff0df77a96eb37a2670ff4c200dda3ced9230513690679a2ade6e1abc365c2d02fdebc9875ae362148a4983cb66b65608f6bf8564ccc47e4246a323b57dc739d26521017f2103b44882bddeafe463c8b0b1df7d3049bbc187cb668e647cb8ecdd4f2dc10942f126aff663bf68052e0604f26f47b27211941346759adbbf09d659abf61f97935af9c03dd729a65955b7f8219d1bd27e013ceb0ca4dfbf9104d5d8da9f469061298fdc2df098cc61cf6bf4348a51a403a0a147704f0e3734bb368421c3066719b9fa17dfb215a0a2a9786e3b6180d4760b82fa363f0f65076a1f2bde2e2345786506073bc1d02f603e33efd318b8681334de913b644e0393548fee065df1dd7a762fd2d9613458eac84e89c8267bc19d4d289a49e2c641256d70f775c1df89f24447f0eca894e6b56b6a8a472777ab579e0cb629dad0eccd14e4919519374a325f4717c067aa7c79369385f4b55f00c7591acf9a0782a0692032872ead98dedb36c21eccc886ecffeeb241fec60e00bc50648cc850b92ece1ea4f1becf0db2ad8f62d7eac62b6a034f4667110fcdbf114b3051294cbcecdfb3416a6982c8dac154f0fefe7df4a96c5a5ed08bc719728020d5d085c55231e82f0cd79c132c63a5f01a1e04682cdc704d2ffeb948fad4b8b75bc9ba1c4ba84abcf6b3d8d6a6276c7637ae42bb75efed8e894988a3c24b3250cf04a42d2e848f6987f4cc59af96155ab4648c1503030d7d07a548329766a5bcfb91c641aaec7f6955093bc50a1f0bfa65df798769d536bfbc48e0ffa2882ac0200e0b3497dbd4deb95dc3262994e4d01e90b717a704cb654f4e0b29a96f5e233dcb86cfcd2908674c8822e0cbe2f0e8065330aa18f98b087377326a58ae9bf91220f8891b9a18df3fc1071c041319184e0f373a9ed1661795054409546cbe0be798886a0bed83b196869e03424bd1114808682f3a5eb47d7904eb7972d222e19dca5ace5eedb08928668a7085be3c3cddf2df0490712bfdb1af05e71a261480bb2b8233bfa05097098e94ec6d4a5bac6dd3315f56f44db2f0c6026c25e6830c85b5e53243854c7763b4a0cb381db21b14d7f8144663c503a9a4b34af1d8b6e8e00ea8da573e5cddbc18f7083e2eeeae5b230943359171457874deff5ee93df497a8f0f058972d68f8e47ccfb7f529cfc53cef56b597591715d39aa41eda4948eb9b223dde88100ee1d75c3a4157873a42a9e9d8e8768d7062eafdd56fe5861d6dd4bf90fbfcfc220c5b67fd809aca71e3b6a3f5c4e6431d9859e37a57c4d99804dc0fb6aa378f6fc6c5db946c871a46f320a6afc2dea4cd5a9fb6a40ccdf43807a41814ce476e56a32bb45667bf5c165397fe07653b26e241c19370b169b8196354bfd04a99593c39d8894238e8dce18ebd9d8e81e38fa6fcbf32bfff1a540d899dd10e10169e403765c0db852481e94233400b5eb1bcf20285084d8be0eb3ba89dfd789139acae9310ee60c2a8d0a00dd1d0c224c223835e1e9fdef98ddd67e7c83b2d2daa448ff09c6b04924f41179c70f6715c3811813c5df48509a2c34e3a3e8d7ca304da2d286c69e792181e13850790895745afc0a1aa575fc7feb7e82123d811e7931151e761ec559dd05e37ba127031ab51fec376409155743d3cdd33febc2c82a570f1042271a48af61c1a2c338a920010ba09663538e04c5e3eb7837e0ff765459d811cdd1551fcec9e6f34bc1987c4737e71c02e3d7e4570258a0452c35880745b0eea34a64f3a08f5797d6a95e7fdbd617b86f9f5aa439a2059facb0542457a936e7cc804268edc3b8432a9af6f20bb28fdb04b69ec969bdb06a879461ef284760399d54bb27aef575ef2a0e13ec83421edfccb5d7a22c44a9a1f15e404f41b4939168f9031257bb770ba5842a1a5fc3735c2b6ad47fcd88fb6e2f489b763c1f06bf7522d6f6403d038facd78171caa1bfe493127c03d6504396e99a0af9e7adffa5c0aaf8ce52f59338d616f6991fe08b0d693e92ca6d5be34c95f54722ba9c1dfdac3ae0a5d7fd2b01cdc9b33225489146451c6137ecdc8b345a7e7190f4b3d5ed275fb60978afe38d72ac3da39ffc73a92c61c016572cc4546955a7a2a1ee293098fc57858b3a1b902d30d2ef73aae14f9ac1a777373a57cd95f010a973adaf37ca04910dc235d1ac63c1e4ee0c9a1d43521dd3b0de59d4eae5e8e5597b51a72af3c454a7c7181621f4fe1c30feaf3cb1a0abcd9991ab0462222b2c22044c97be08ca55f9242413acadc9c3c7413d061c218ac9aface22e235bc50c64a23b63f40d21870d3043c12b6dcd846f11e1e8912e1fe9d8b257db2fea84fbed713f475210171d63eeb4cf8cc0064115b6a5e5eeb88d3b921f58e215b8ace20211af5ad62c4e07473fcd090b0a60c717be7f6623f2d4a24a86d0a002e1d87c9a0e20b044feda9d463a5250dd9ce34dee803ce56ab18761b1644be862bb062e94adc2b3551597b3811b855c10e6a3745dc77597f3219c46c5914976339e9eff5ae434d38eff1ac10d49fe51b18860f600c9c389a282877b3f8c391528e110c9a0e7e4287b497d7dce9fa56b4951112e0cf3a5809672a071fe543ee54064a3f2c5606dc7746e57c302d7946bd3b41f7bb3cb746479c5b2fba8398d9ea61ffe01a9587f35fa19a3edd6d2eef5c2774952ac3caa6d9fc153a933197b8030b31c13ac61b9af9e4843563f78e401a1b80a5bea057cde2176bd0cec8892091d069afba4f1bbb7e2821769dedbe36b8cc9d4ee5e09c19382b300e8e72e2f44851aa4c4e387fe2c7f4156c5367de7b12918dde46a6e4abdb3ac6d932776d819087889d76127740cacca395844474bbc83e271de967db6b9926a6b0bd2a74466d719c4af5c1da4e50b2c6cb5e4a3773ea2b25a20c9772de07e3122e6744107f23ad72fe4996427d61c31451fb7b403a213368ae62a2082e7c2c15d277405565725af1308ca3b24de1790a95f19e997b46922540a38d5110da96634327c7024b4c2cd07ba833fa7c1a5a9ea477e70ceea90fbc48a0f62dab06043e28d2f9be61436d3038b3006585dd07c229fd19357a828ce7ff9bf39ccda6e686843347e257fffefb1faa90b29f182921e2839de672531c35b663111a1fc05c834bd26140b1d9c487233fe1e6537d26d8d0f4e34d6d6e9489ccefb0c300642e8a676dd5d72d7df04d2cb0c5c56fbca815f1baf6be7966b7baec3894e3928d421cffb132e1eac662d3a6fc6700dcc06e36d98cf8413c017df0c566e4b11ef4849b021c479efee5ba4c072f93b9fce309f244aba16aecdb852ac7f152adc803ab70bb8efa1df1451f9040b498f9b50ee13854d03ef527fbcfc24798df02440c895e11e3bdbcdaa58480fb8626d8ee2ba7f650c655d319a294996f068c1c7c2418566ac38bbc6ae0b27b609acfea52ddf0dbe4bb2276ca8675868b093ce1ef04917a016f4b1a496e083f0d912e0eb9147ecc44e0e6ef0c5864c346a3dcdc050ac92f087600939e77dbcdb4905e9ef8add7c7daf23a5952064ffb82639b1a51f2119c6076ae015fb990e7642c15d37b56a52d7920d2b93ce615d53a489551d42f9267d6e8173468601f2f65a4ef6ec358144352fcf87d0acfa1d283c40b9478f2e7d85882b325a1aa3f03ea6bff2805f7a6f04c4ee14b86023bf26df1ab60268f2960c11c5edf1a2332b0d037409ebfb1359f7dd1911d090e8b0cfee1477d8c7523c458ef0e1065a65653aa278d9f18582a01fc36c039a4284f934761b1015d1257f9f55bba4b4427133c75f7282c24d587cd9d6482d9bdbad268b7630037775035b747866c74e9ba32260c8818ec802fb92be1f35eb55e1db20a547c085f08e077ec90674ef8f25977cd40068885bff4f79fa45279442555f1a8413031368cb545dfbec7ced1ae8a4f41b43ad3366d71ff0a62f7140cc82328cc8051d72ba7cd33b64773a2cf212233ec8869db2563cce57a5ef3ccf736164c900d84edde272ae762973ea7c338530afb8002ebce539a98fdb2a20d9935970f21777b201a7eae7022e7602f0dea23e27ce2f6775fd67265c42ea352b663d69e423873150a15b25b347c33973c55f5df17a01385539be677728ca3e695ac9a2278bb48eba7e0f641898c05b39cb5b308d2466e5ba34674ef47045eaeff4509b3e542e84f9ed85c7332214d30dfc01078963a3754038019dc06639acfb1303489f709959ef134f9ba1538731a7238cf55f3440af15e24906ead4aa435b91950fc19e0f66f6157fe0e274337ae008f019d9c242d3c0984d8582c7427ecc7d09393d0562fdc50c312256dbfc5b385d6f7b1a1cc1f05d32c23436113148c6f032b5370ac9ce30f2cbbf69c8e977f445d284e804fc71ec28736f89f3b7ab99e28ca7f2d61b3740dddb7d4d8a9e8ef59389a2796db7894dfeb849d2bfb7dd11f033ac5b0c5f57cc5c943bbf57f7e3855c235e89973eaee215fbac30206e7c13178721d7e717fa422298d8e763e09ccc5065851efc4338f8a242457c75b397cf91064fccc5b7e6fb63d7ffabd57080f89baee64bf2e5862f485617bc54a2df8264194f1437e8afa29ae4007c522505ccfc4e1925e2dceaa79f07b70251c3d5ef034cd5202e87ea8de5136d1a966d41f3313b9ac5790831166efae43d7563cd034d3629d00bcbb04bfb70a0f10fcb4aac50f6b51ed20362d6d5f9912be5a6c03297ea87964dbdfa465579b56d9b7854c54aa1d3b622fd0017ff0661adf3cd8fd5da4712ffbebb44d7bd5f73abb99cf7dda02ad5ad4e99e6f0be28236ab636420594d0c2e57ca6049ea29c5ac719f35711aeab7fb0d6a67242579aa8178a94d5d8d47e8ff1200272e9bde2591681031b77edb7ae47c4ec7d23d7289ce199f838b76647abfa8a47ecc41d356bcda7a19f179cd9271ebcd87712dc9e08a91ec65dd98468a46f099068dbcdbf1d9839ac313096907b662001fe119b45f9a4d476426c5b385931ff4e000a1723966ee5e4c47ba794d2f938792f4bc546a9befd9c52dd8fd46136f0a15bd207298b74eb68e9a224f72bce1ce686c2d907a35dfc2113140abe4856663461974586e01a11d2d69342acaf162accc9b4226a9bd43752839ce57eaec0905ad659cc7366d9f59bd2f5ea01844d7070ed41002266980e5b5f3dfc00b592e922f37343ed4f251070cead00570d00e1e543e96f5eccdbd0fe3276b31deed09d4bbc8648cd202c1000b08fd1518ad7f174fe28b7d93f16de33713a119155cd8315059e0071d2bbd27a38fc5ecd76b3e3ee0000b80443398c46063bbf70005f1b0c5d01ce5ea6d836e17cbe80ef0a6676dbd0677d5fe1d92a5191801c505719c2d1cebb81b00c0d36beff953938f854ee6aae36448b8a99bb4a796b3031c2f459413c522c809b6402e7634c6bbba2a020b9a358f2bd427722869fef85fa11cff5bd805b2a61b643df375ab309b9f3717ae8181da14c7a4224947e93d5928e8823640a2b8ed4746fe0507c2fc5ac0fdec11071f0da25c4951847c85791f68bf5866c182fb1432d3ee43ea965351319d01d23551c0f51a763542eeb2134f67149b5a35e7556c7f7088c75f32ca46474c34d663fcc390cbf589d9f7ac6ee1b33b7207717945686006e5625a868f2f0afe9f00438ac8a7ff42fc9cee8349b488217e5b1a5de2a312fd75393338b691d01f80a1da161e4481a7c4883202db652f4fc78d77bc6c48b31b1e5d3c2aeead28abac5512537154497ced794fdcb14ece3ad72438a7eb30104156f19c9e676ebff58d14801f6f6bcdda53ba9e2e542e2185534c038d9135738c7ea273bbec134e2a02676c8ab8a2f8ded64f0675a125a4dc2776af7b684c074583c94bf02ac42161c7b2e7fc1697c9e150513b6673f125f5cfb9d747a556d909b8b69eda7975f2719ccf9870b596de0f0a76059c765a7d3adc7da05eca0de95e1bff6f08ef291fc7640e52a7595b1801b0fd05c10cb82dc077f47e6f087370b94bb56b82c4942ed75b382ef035bac8ccb6cd0e94d192bc3bc4b7fd5e3c9db413452965122504685f592229d610fd4684d1425e56130425228692c64846f158e7b34e2a2947663e23838d66d4bc23994f14f06f88aebfbd3d6faaea2e07c4c450574cfd12b8f57e8549c5e6dba8f5a430de28657ba63d73b0cec7891674e9fdc1f820de76efe59925eb93353526768a6e390977bbe5c2c2330ae02dcca78c81c7e89a988bf8ce123ec903da5fa00d7728a7918576efeabfe31ccdc16470997e3193a99d3d8347a59ded33e2eb151451d95fa7315b898c759ad9a489d428207b71d0c109fe5336134c662b8c7b8df1b62a5e3fbbbeb73df2619174ce694d5730bb63407a9196fa5499f333c51994def1a041a69c5c1c5d2764b556c89b8234aa66174bc9fef92b7955bdb666252888f0873636d0bb71502393e5856fc74a380a696051ff845617f77057a880ef97cb7047dca540d6239048f3c06c8ca740554ce76b0c7563919defdc6f5585d5e1666808418e619cd1aa50b99e5562967e2c0e828284696113b4953eb60bae85bee3305fe7cd7629784a857b3c9eead50683b185ba7060a2da527ac79ad15eb0f0169e5d7b183cbd83dc5ad8b4ac91b30aa4e208bd4bc75ac4b5fc2fd818e75e70fb20745b51abe3ee5060fa7559a913df33bcadcc8d02d7b501a43266929210c8d8fe7e7f08893fb7c4762c52f03225bafbc398b451f909e2230789509002e4a063c002045d4925058826fd052b16bd51d89ec633f361ea14cffef1ba5728678693d4fb5f5115e79ad3e12d4b806db821f338f984cc5fba20eb24c2b91bebe7067dc9952d17412fac6ddeafebe1836a672ec9ab02b0f23404460754f5cbf45669a3a63e5fbe3116073c3935811e659851962e8b4bd02f70ea71b77fa0c09915d70f68ca18b9ae24de73d8081ab04afe2cf5f26e43168b77845a10fc1d6a8776a4f08cff45374375b21ecf59066f1f15075c653b7da741149181c0fd2800cd9bb45ff4591d8eb2c4bbc641494a7fd66edaab843abe0390a96585c690aa5d6845e54f162da2a1c5a689633b2f4edd533664fccaacda210a946b77ddef553e145b602264badaa999b70777f8a79a41cd71d6bf1dae4e6d35bd231f8cb187cb6fbb2b33a651763a47f8690cdb402faa5826a3e864c23112cf6eb81be9469023e4a49011acc9905b176f2dd6d1465ca2a95e62ee0fb8ab7d515e31dc549967c3ef29afb0b0ff9112a82e02b3fd605286a16a6e2b5ef4180b1be754c561fb607655bc1a44fad08e5be07de5ead2fe569c67d6a50474fc299484e2920f7e207af11189cd8d515d2dc7e32e411e3767de5449e4f1cded25d9a13fc90439474b354b7e952bfb6f24decf611f41ae3a33f54f44405db62eea32e5f5d71637406e87c9f535b00e3e585c607c516552fba8e44ac35c3917dcc409abf59d53b74eb66c532a45f258aca8bbf16f69871e5314315b4ca5fa613b5c94a75c96cdb130bbfa79be4689d9c2862197925d6fb6bd4798628578ef5fd460910813a12850b81d2130a4282534738a993ccb4042a4adb097238b51dae7b9cbae94b7cde449fd171ec945a5c199ae68e193fc1b857d328a01622f79b98c499dd5622aab50f8d8f16d6e21a3d039ea86dd918070198f0e3aabd1f5f43df444ef38d5d66eaaee9f29d59f4975826230e876436eb6d8fc2ad27555fa6484f028dc28591e8b616b541ab15d0ccf56cef510baca05501a44ec7b093448de45f8e9a58934d2c5fd211c9bf71621742f9be278a2ae5984628cd1904774f31c845c2b8f864e439ca8193bc3f283e0be3601d2588cddb2297a6b393b4ef52629db02f50d2aad4aa202d6310ff62acc4f70d6368a7b8ffef1a7f5f3e8197f9171da271e8100d96a02628ff10aa02c83858adb332119c275539de4ecda72a026bcf425563c553829e3738b85bc465c109e10ad0bdb8c376b7351ce023a51f3ecb4a6c1957826e55f14bf4dd52ae4cb1291726a476dad3103b2aae0c85adf344cf037ce2f0d4b88072da30f9d4dbd29816ec45d7cd5717748d787ac1e10caf281e376d215c58e81510d4682b3a936c0db2cf5b156be43d4c90480302fba636e1cca3e811fcbd7798ee3ac286f83616a3ebfc3b2fee787da407664b5ca9f73ecc7a8eaf7bafaf369ee00b555a86c51898efbc12f993abe45caa2c1ca0b2cb93899d43bab410a5078f595b475ed3a5476bc0aa62bd19addbee0fafdb94ff970d1521c92c84483c28930c698f19d22c1f58ea98c4dee1dc6c98e028f91e4acd292d28dac56d8abc98f4140d0f9a9533252a53fbb4e979e9cbd376fc387b22f2665ef4a1ecde38232526126380ff41fd6f6b8f4c3e468799c9740b4eb7d943866ed4a9f919e634bc980f3b6c462879ae260402403de0bc247d301a2fb42b20f1c33c255984a939ea8e03f088c77325e9cd14355fe195c8482aaf6f969a5f03fa670d98470723bb7ac31d672fd206ea3d0e6ce1b78b08de66e0e7a0a78cde8589bdf73b3a3f76538aaf2d5f27d6d454ba106590930a0e439a5749da55150b90716e71a5593d07960ce806c4c4e3a239123b7c777ef9338e012278c22786f10141ff7286f415798a3118bb38e959f04bd3a48974d7c2d0b7bb3b29cdd97334f83be87e36f4d02dc00ab43c04d379243e7224b8dcbc8a85d689a27a9969819cc4f2dcc4d4cd1cb258fffc227f53dce9a5bf7d124e2a5fdda4f7162436e3d419e7854c00cde3934fd86b7c7b037fbdcc7ebffb72254c329356c450698954986ea09700b8d934fe65c326438e8d1cac659c8429c00ee287229072b21ecb42919bef227666cab93a98c269042a8af46a2081526e89b78064a55d1c1efa6947d95b4b1ce97be9201ae1d9b0d054056e696cba94b4d52fc2648e41530e140e837dca0981bb33e7c2aa1b61f8fd19485d79dd286c7211ee3f9c857d3569b96aa5426801f5ccfb22605c286fe3cf996b525a159c870c5620292fd60f14d7ddb61eddf140a611c1943988655d8756260c91fe65b6c0c03b8626a4841b4469ec6d3498ec376d51c891d7203f140d89ac07930d48ab0d9bd89ef1b48faeeca2ba1e8a90afc35773065fca227c1221e4134e1f53171054e020dacecbbfd33611583beed7aba45a6cc65c5fb7c7914d0867f8f8fdfb6ffce5e9762734e862fcdb757d2dc5503ad676cfa9ee87e923a0d57d321b37ee207f9164f227a9e230073acf35f7ea90528f1881f4cc3467b3e6372ee445b29f8e5fcfec76a42d7e003d24c8c085658c4b6ea3e533da48bd1a3fa18f44ebe61beafb35ac40f99ffb6e1d29ca8b7b7bc055e55fc9bc6a332cac2f61e16d85bcf92e0c7601d34b14e8db28161ff196cb6bea455035f63671edf8e29271a14ba59343963cabd057d647b9913722d3e747ca832b1e8a6e57b22f24a39161d55aa845ef3bd93ebb29a3a1950c59e1c2f1e672f2d726b2f6d62e23866d677d63f2e1c4a914b944bb36f6471ee0402d72bd9f7d6982bdb7fa804854f81110fadf3904045058ca85d19b7187b59d19e9037cfae1d2319af1f9f3a932c171e851a5fc28b2b9f81aef895a9fd3e63fa0bd381233d5c3e0e5d03a4d1717bc66812be2536af1433ffe41bebaecbb36e7cc3c2b9f16d7445b63b5f8b70ea259a05263059e185dfb84e2db2bcd81f0d04bc72b5d6549ea047d68927546e46daba0df20b949af7920a76bdc83fa0462d75a5fe9d7748d7c65f9f5d2792b05335e44ca7f87141482e71f5d3d9adf13b0444ea9597f217bb60ceadaa5a8bcc784b34129026a71fbb56608b2894e65d5cfceb0c99312694aa6c172a1dc07f6243ba6f6c6f1d666129acbd99a8b0ca2fe958f8e67c4bda16082b4701f34972a43c06d620f591949c45581dadaffad19d860af76c1fae5b40f3a55b7483b2e0dd8ddd50051777266aa1643acb5d736d7a53d3338b7d779d616046658735cd07aa081ea037ed89b68fe286e00147af2f8a0279d57b3f2abe59b7e0a73d5984bb7e40bb12eb770aee571703fc6fabdd38f1bbd0686cb96be25af920b8fd2d902d3917414fcbcefaa9ea3596406f24cea81d961c0aee8f8e313b417cf1cfe449c6f1139bed5f40382561a48b80718f5d5c20b008b28617098830ac239ebf38ad3fb29a1e92acb9290f1c20ca43b913d4e502642fbe40edb4ab3b1a7353fa7c0432dbf9be13e2918068532472ceb479515975d6f8a61952057e716418e08611c414454ddb7bd10bc5d9f6800d2748d582cedb8e5804640e8bbf7d75457aee078329f5d4e2da0d9f5444f6ed8c395cba03ad0870165ae2b21d9da4857404b79b4a8fd0e2a7afa49fd8e1becdb8f3b06d11dcf32a29700ff0bad2b39ee883c1b059e9146b2e12031b081971e94d3399939a98cfcb0268084748afc090d8ac47cce8d541ca77d69cbfb965484e93259fa2a47b5ebdc1497a98ef1011230475a93bd5086f39f06441c8e58e7860fd5d6c62fa30c7340dcc649901bbf294c4cbe49d1b5e410436dd82c70351bb51f5bd61060afec580b72e2ad192f6851642f20cd7f4d2a7037d45d03824060bc05db420e5de40b482e7338123102c83b9746f55cd401d13e73e6178dee50d8e56dd34130377d2208b1140e1d1351a500a1ae8cc882cc49cf0754b9e1202c9ce834a094d0426108ecbdddf1c4cffe577c0620a6e78a55b89a78998376ff1864625cd15bf0032655dbaf8e89abe57f559482331e008282913b80ff48ca8a88cc3bd5de970edcdf0fe340f9e74a46885d556177f5296742acabc74eadf1ce05d5f96313a2c3dd6e83e56e718a2256b7f6ddef8cf301383fedfad5ebb2a7d64cac869ebd20b45ad28e9805efe8eedb79ea373e9246e9eca838ab2793adbf5837d175253fc3aa68deb4735b239566fdad960d3172c03dd13ddeca46cfbf465230b899e3c4d293b7c28cb91a90a78777c3af502536be521c0e4cf1a9d1817e186f06098cad836f6120d75f628d6c6184fa581cc0b310e3a53f701d9b7a69ae6816e5a9712ab91654879fd0bb594258295d458b7367f6e267ea5c5bcec6510b20a1caa7dcbb0a3a355ec9951d57359b9bd3aaed40cc9ed962b7be1db7ff31dc8f532e51b16485e99cc4c2fc72ee0fc410f1c1b5df3e786e715edbb865cfba389deb74c34633391b48a191c0ef00ddee55231f61e5b1676ac45123a0160f380480bbe5cdcd2b466e0c4c480a1f8ee24ae262f924dedc5ec256d9cb6774faaccdc788b9b34d2dada83a0ef44672b0ad0a8d098b878b7f3cf27f2791faf8d8d4d5dfdb13a6a45219b070de1d067d72fc9fa53267cfaacef68ce940a551eaeee5fddd12a6ab10a06b6052e675d433ec8e2b0fa53529c711d36d849e68fa31619c1a5c8c7e52704239640c4c68e558ad0209546324e30c6bdc8d005bb9b2139aabdfd365ee416133852ffeaccafe1be353dc26a1359b6fb47b5bfc93d98e98080011e9ce286ad86ee4f7bbf9a2ed08c3dcbcdb6346f5903c304c5b54dd322487703101ea220d5255c3b9c13213254c1fcfd4d0c5d54dbbc6d7ce7c76ef3b7668b9b5ecfdb40a6b4b80423e03d003cf61cac54c0182d22d47a6f0e2a3419094bda952f54f98b3d1e3577054f695d6524f16911a8db418a4f1f4051fd710045f04d55d00fd912654087e94775e1dff5e53c1bbbd0c3ac286f291acef167bc2a9455663bd645105c0d15a16727fdb50e47ae943c4daa27019c260f96ba2285865ff9c19e3aaf14293905f9d854f462bbe8d80bc464f2d84ec5a846415eeda61327cb46d816f8cbfa59c70cd0d697a57e7e7fd3368965c1515d933e53a527c168a8a912ad379f14b22e8c58f100bfd4a154c31dbb5bb49bc1d87b073f55d76cca5755eb82b017524afa2948055b4852fb996c0ba9c9cf1c6c1d8e5b8ce9039cdf13aa5154d180e3e32fa3b06f3f38e25bb29cb3e166af7ac77ec7992c83f7c80d264340a792001c66a2cce932ac28fc3611e5f85012dd2737c1636523d54db71dd788ba5e290e5b549189fd1a5da925d0b32a691cceb6106038362b1e300324ca62bf5799cc43fde3041b05d470d8469169d9b727953d8f4cb13ae2e4648c18cd4cb64e5dfea4524cf253664b27df4a1fb7e4fed8ec6375f1ca0c9a03fdcf6cc7ddc705d15a8ac4f21d6971a0dbf94adbca818ce17ca2373bcf1fe7e39c988bf92039aececdf79f722578fb62520906627eefe9147a856da5b30c867a88a8c660746e192089ef67b5ca5dbf7b525b960b12e14e7ec9f3634f990191f382c9d0bc34d651bc5ab9d74b4251e0a6ded4af137a40d068ebe0ccef697d3ada16c53e9378380f36b011be610f91b07cf50408bfd0d31e6662674cbce12394001f913d438d4255ca6e5c326827b95d3d8cb4ea06855d7faf0922f1417ede676a1c663d2d07253fda3010a24961a3c592e06e90866238b9c895d32fdc5d2d7b008e382e68ec03bc9e52cc413a34c07ccd5084b60350d1b575f0b6450eab3b399801d55264f476fb58d34a5b30de690c03e35e261b6fa3feb0c20f2e100db57cb1913ab1876605bae97b4abcfa84321596f9fef88bed678e39c092a64de0dca7ef700e6ccf40922ec93a37432966c0986ea59779d2524bb7134f9486dbd5389fb47209092b687fd5742730f92f587705cab88c2d2f779315a372036adc62c827eab94165943acbfe5a5ef46def8e0f1de8c6fc3c774144fdc63fae0261ead991eac288151e3209df518f94ac11dd3592c1eea54e75e1455c364e082b5ec5b295a6bfe80f2422ac170e07eaef83d7278a5c191b1cf87fd4432a891512a68ac037d022a479178c90f86c201ef21ef2b8d9471ad7dbb46184c51c00518d78f9cdaaa9c51fd5b1f46464e1c03cbea62c4e78e4aa4e3499d0cca6b2c1cf6ba0c7e27bf61401af60146034dd30f6238debcdfc23da9512467a30bfc2d6974312c2cc196d1622a714eca559d1bba97ae1482e3a260bcf0af73d6c0429b9a9359e54ef07735cb03c2f2bea7d2da94de36aefe4a7202b856c738054666f06a6c5ef92709f07023d1f5cfacbfea7422a67ed70d6364dd275626065ae55fc0172cba9f3d2cf76ab6e37ff300c78b1c1a217d7e23dc9c021c1ea2cc74c516ee3cf40bf376719e8b6c80e293b503b15d16aef755c9ec2d4c3773f8bb724b7145cbd73880f0ce1faaa9b65804addd43caff879f5d0a1c267af73416579c1774ae45416006013dd1ba6505eb69bb16dbb2930520eef1f406242d1d5acfa86bb09b1218ef0b24db4d3c16c0bd42ef95a188cf993d84382a6d07fee8bc103e9da500fa9b10cdc78590ec89c795b286b3599c8671bd9f6725e02175e6bdc4e66a254dec444b577cd43a34c71bd856b4b4aca7809f930ed2607b7236d8b28a31fd261b60daebe434b00a13c2c13f315c36ff4e64cc42d3e70927db6c7b21fc35c94d21cc9c97fd2e9a373151c32982dc55ca006b8cdda16b5ecdcfd950a9f2e2b3588cf2d73ed6d8ec63f6d9cf7fa4183cd36efe4379e74c79326ac3956406ac3955b9ad70bb3f666a7a8f42a5d9d27495f46e5b3d171589ddc77de5b89d525a06ad1e2e29baedcdc0476adc9f2c52ff5883b32a63b10ecbcfa05de32786e454e1265b90ca418c30cfad11d60daef0b1c331c5c6b02df6279e74932857ddaa94c6077b5c2c26a7fcab8c4422c127c926476f13791af055ac915f6722e1a0a8751e8442c12461d4656604816c30a22a39802bab5c11ea99941412c29b62d545272901b13206f219a4d327ad074cd721ac9850b935d271969a0d619f772cb0e2013e8444821961a82fc74206791d0455b9806534096f83cbbc2596c6591af884873a14f0398f7b51824be329ba95b323a80e4f54b08db71ed7496e1e59dbc471c44dd6b94ddb25b91afc6eaccf40e2bc31452f40c884aab87138e104ee6d351456d695551a8dd270e6e32d6014500026af9930d788601501ec5089e28565379b75bfa154c4409a45f23ed67728bd1167554a2bfa85c8b9e83576501d6078f1530c2816e150063a35fc335fac745b7b1ef5ec0329a9d0a5cd35825793845b7602398c16b3f55c9547245bf0b39456dfd173a9404a1d6feab90cde8ca6a28c6aca0bb80b42da2274ffeb44366358891bb5dfc13fd0e2f3594e89e717c71f726937bb1aa1d4f0e462c390393209a60cdd048e049c5e7b075251e83524d8139cc521454c2a8912473a7e6c36181b5b819a9f613307f7140a7938daa39e32b7770bbff8242c2ad94f57e9c20bdbdc635f1d985e44d1fa63b5138b79f6fc606bc0042709a88b4f0d909be90dfb3a8e57487b36045683358e2579d07e15b15eeb4cdac3103c4bc360c21e3e96d1bda18fc26239aa7ba098924489a92d11030bdb84b3de6c7ada3114a172c6f48fd27610ae4ed1a436922fba5166f8c6143667ce92c1adcf9d3882d015e47ecbf281091897caa1611061d06bb6441b9acc30efbb756cc85dda6b10fab3377b511b2265c018dbaea2a6afd517c6756764a44138ca641981523fc5b261093c3fc8429d1fa4e0b62f7b2f2aabf4b1a8659629ce71d873317c69e33e722570edbaf679be7f17551951372257d9a81ed53bd46e389ae75cda3d11ffb17a3b6f843336e41f603a0583bc565617040298681be2fbce30991f97b46b0793623d7f7afa8cbab5cf83ae091c787412392e43e2100bcecd2948dc6662a3d1d9b4b48b20a430cfa85b43bb6415b4cdbf1fa6165166f41651e1cc925f6a20700f109fd0b59b5367a7e4319b7f36f150df6e863e4ad44b4c32913e478262ece97ef6697ff8c33b96061048dcbe36f72708e88792e8589dbfdb224e484fd7550f6302a8b4c3e2dcd84f40265cb593980336a14865c17bc9fdd920d178e84f364d785cbc39e90071d0bf3b07d805aafe41048a6e981a5315c0bc7ddc7e8a803875c208f084298d72e2e77019ab98b864445e0adda0d3e32e7705e14ff0f270571d18a6019f9d4d92aa8a158f12cd7da929518c3e0549617fafb0e5ea874671ab7c2faf47c418d18b3bfaf1b7a5dccb938242a301906ab2ba4325d0368d31140237299c8c3832a96af56e57b948f260a2db2771e5d76f7868dea83df98a0fda129aa2154f58edb51316d6deef766ca6d6c6a086aa9973a650211690c794cefd97743a07aed9bf4a8a5549c9ecd9abfe063f1c120f64bd78327693c30fdde0eac1c6480db125d5ac28ea835178d81450a987aea2c0ecd7af443ad53cbf57ac5f45dd575afff66afba42e63494d145a60a9bbe2ac8fc4ddfceda8de1c34edabec192e0a41d980aca63d7f9558b7d067287b6dba007961be2eac5d8428c9acb8a8223e0597fbd5f45def78b54a7a2294c465afa24e05552cac09683642d59aa9e062f9bc81d217cc97e70744b08d20c977508da508d97a989c43634fb2437d1fdbe6a321c70afe9d6de51a80a19ded38bdce3bf20cd09fc0b1430810c4c2f490fb57a81720df844ebb4d9610272ea3e659c67c1fce95a8eb1928006e8309f30f5b575abb073c74d7ac8441b3c1cda37c513b0569cddcf7dd787335a68de37bad7369bfbf54f01dab3c6d333edfbe99f5b1746e25dd401ae49bbe6205286c21f9f40dcfd4fdd4a78501a58a3d1b3b2db369b57907151807752efa399bdd18efb24d99c978097686dd614fcd5605b54fca9040df4732b73b7adce9d91f1856119f730c0f50b0e0c3a6f9d8b21f730fe6f6eba15a406b2bcb5422f083013323abe8b865e79f5d13311622f9b5a7ed87ae3eb6fb8173f21f5a3a045592ac328f229dc6d31145073c5ad60f8b76bcdd3c450e191cba82931297c18e95e3711339be221cfb6c5521e29ba35f48041ab981cd04a93ef1b01076e69fec35fa8bbceba2debbcdd70404240b94ed106d11ee3f22399e55875ec49b9cc18f79c5f2b0bb180ae3ea0df8198fa115db6f4d75e3f97f7d5686291825ff839a7ea2e49dd3133c2ab9e1934a1e903bb038cd60277227db144eea79e8804860b107e1589e86ef9be54cc92d258557a9d92c175ecd970d4ed5c150acc88f777fd75e483104ec2cf9af20c8c51988c6250e5df9eac8acdda17a84744f1ebd60f64c2ccacb3d357b71f55c587e5f0a8b0594d38b11d3e4150a35bb4951e46ef536ee0f7c063f87552045800bb70fbb3f1a06e142bdad783ae08a3d79d2aff2dbfdd5988e051aaf18e372512443289fc51ba2b597b3bd1c8d376df76efff519a99610f0112d558c6e589031ad59056268b585dda91a1d49aec684e22b614414bca1527e3d2629b04aff19b3211dfa2c1c6dac11c01063b694447e9c182983f889a6192f1e2f45c8b167d56a9d6fbbb92e7f384cc70077cd655a54ed6f042af47e0bfd5888c30ac304c774813afcbb9930e4f64934237fb6491b8f7db0016febdc33eb4b4df5daad11bb66bcae0dfea8b9c36a18811a22852917963882442a39f75c578230686ad2a599456176f6ab17845b5ba8513fb1320a992dccbccb4fa09919549b1678388882776600e8f32920682deaec2fcf2d326402ae5929c02458d2ae84b336b829c202934a89e640c9cb83fbf348bfd1900c80face2a8894de3c33a0edec52142b8b1ca1ea8c8e964ee179bed7446ef7d5cb4ac90f45458d4d1638fdccf2c9c4b9ee6f66d1aa32a563d63cbe2909873bee96dc94b0f634c913b8d5e9e84f6512babb08cfe90d903643b926dfcda32f910420a4983dfd34ff6fc899c3cce50da91310d1a1864219774701f3a614bb7d899ae909fede225403895130fdd4281adf084bc41433385922625e39bbbf23b6c552cd5f5e4e764ea51dbf4b3370f3fbd6aeadd7f5b86c4f16ef1ef960f9a843104aa5b52eacb4716f56e9b2a99799aa927599c0e208e32db885c38ef388079f81bd76a61f481ea90c2b58f424c7a52e7682f66840d6905f54e98eb59c5b5641103e2982dc4892c84f8af5f25ed432ddd71e61d94e8a1b82a4d7948e8339f97ca4f54dd104f02757ca18df6b263c61dd7b402dfce2a8deb5e3a0c280707e7cd5e9b145611456839e94e756e0daa4e80e2a584cb3dfcf2d387bb54304d7960d9f73a8d0aadb09fa02a2292b2534135e617c7baa63d9234bf6be48c76f2aed8b896a535477eb696073285760dd37f6dbd8100ab7fe3d5029db7eae68e75639d630e279cbbbc21cdcf5873e1209188fdaed1093f2818707c9738f2a2fae5aa095971f9934ed147fd597078c279409cbcad6c8e3b3a3d73f262a7c02d7d0920f4090ee6ae298a7de0997ad859cc4e060b3f3022a005c58fcc218822251944643aacd06fd1d62d6aaff67b8cc929aeb63937b9bab58a520f8090ccf48e1f30e1c87c451c0250d83cef3b72f86b092127e384ba0258c73e17c7724246c2f93429792bad9e79074b3d3ee0363c9d400e4af03d4304b2b7fdab23864c86739aae9c0ed1e3c847992b8df62fc9d7af20f3fff07f3731fa90e10bebd1f0292299b1ba1a6386c03ebb7046ff40054f7c8c9ad31c00f79cda95e4f55be96d233801cb2f0992fd52d99cd3ec5224eb5bcad54e7ceec9f4bbbffefcadd1b3ad2386f97b3a84e8a3fb17431a3ca63ebc19006d0e6777b7db8e257bfa910e5032989501c0a9dca094d53bdab6b92e4808582a451388c28ec995645c881049af27dfcc069e09a356fe0bb123b3c42706a3906bb086685530891c4a54537084aca64ccca9d7b9a35992bcee40256ca93cc6cb3f2b34bcf4792655fba60fdb87dba660c27a9c5b43846b71c84cdce9fac2725c8226725d9dfa3b4951e5b2ff0eb557f0067a4f9c3d6dfae7713ca87e8b580a8001f911dd5c05f949440a458bdcf85cee3a5576116e37cc66b7f444939b3c00c86a604ac1f82a99773535eb8c1c9af42a48335e2dc4f3d886cc636b972725ef6362bc2469e76c220c2900516b932c85d7b00723b9efcbdd1c97d2b7914de1fd96d6294b498cdd5fa3814a3df52b98ff204f7e0474e2ad4a32567d6264359e416990b6841255ec399a8f1d6dc5c910d08b0bee7d430800d02c926f8a5e54f8c574f33b23a3cdf20c81848fcdb3351f155ef43f8ff0cdf9e9b30b5d05d169002f12d069d979a5f27a4c0b04a03821b9d3d9872d091e3747270b6eea2418475aeb2f0c9360c738955a355887d17b03731bf43c8f787424feeb4068e28c8769afca9986ddee9c893a78e6bf237f9a4d617ed175579a54fd6a9a4a19efbb19428a8ba3440707c010fae9858b975e4fc58a170d29a92738279978c1e79077ac26689970bf29ac1270bdc1fef812446591a1b4635220b3b8828185df8d0dcca06722e1da46a4d8d330a058fde341f34dd5e1ffe887050e59adc4efb5620bf6179112df6c5813b61b56f5d4e6e9dec52263a57290d399378bfe61e8dec481d71ab6b0ca146d876b186f4e5885111a835291d6c741406bf7a779bbf042f4c335673f35ff7a8afc1bc3509a39fb8241446a8da30e038fcbbc9e541eafb4d61ab867d36289c0235e9641ef993174ec9b1a1c7a0597a6d79e2b0f2efa97d993e324be1e2c82419c674fc4ac4a74060532d5aa28b8ff159a6ce117322d0a85fa6ede1148684bf8b78a5f256189301e97161372fd624e03207ea9dbbf0a7e690879d6b76da194151fa6b9296a89b435cb2902546746aea4d2247dfd8c04e8b25140e6aa9926dc29661a38d4fee7873ddfdf38019ab186bda071aff87b5f9c356ce5f04895445fbf7a7cf436b47b17a223898279aa0e52d3f1d8c3006b73080bebb27040860ca9f6a601b6dcf1870273d4b217542e5b9803e5fa94be64dbb6cfcc55df5d95301f56cedb5cd592a5f61f6427c4cc50b09b69465903939b05eee4f845302bce85d2fbaaeec5fe12124f6f637eaadb4c032f3e3cf75924c5f5b311f268316d792f3fab63926b0c8ce26307756c59ca609c6dbedcd4444b11822075ba0e941744cd29667e39baa9c59e70f27c83b303d3f0e43fe63a0902aff601396769747c1b91b7ce16ab934cee82bca0ed4e8726d68b28af0713ed8a4e8b18005b651cd7583db8bb3100eb2cebf2fe7f9b4d16cd70ca9b2cc3a181d59689bb3d6afef7ef04c5698c4d1c66eecfddc3bd7b428a1719f84a644e8ff8a415a8c9fc73fda4f28048c059a508f0681c5317efb4f248ad8da900a3eb338400511623d908a99fd33678c155f5baba66747840ff2608bbe4c75858a29fffe422d727478874e558025dba5148609a2e9c8977399d3915fb3c47bde757e05921a1e43a7d27e1a101cbb1e4471b2c5aeecdc892938758c54c57c1ce9f000602bc720b502845c5d4cf82e2fd3500e2ac16d5285527804dd3e71edefc5787a298dfa8afe000cf119a48dd51e1754215299e85b35679fbe170a9251c13069b9b9d8ed7bbbb630ed0a183981b7a6338557ea57b646e8620317223fb0bab27de814f24710d0b8304d11c3b794359ea05e8ffd87b2bdddcab6e413d787f9583c0661df84542a05ef21e1b6e8e9a8eed687313212fadc2646026f9831b013db0b88ff9925a0aed78b7b2c6605348a94ba735ff3621088f6af4703e9579b581d82732d5de36f79bdfe666f5bf1df02203a88c4a948e8560f81c9348cb07221c63b35cb9624caa0905bfe83604d90c2b45e668c4908a0007194d5f18680d50d148af573dd87c92f12951f5a1d646e9186a3101b09c6c844b3af84c21f9cc26d301a5f3d3d64be4bbd383222050f2ea71d690b0d231110af9938632badbfe94ec0fa8d356d6ceedf00dfcfa8248be45433e1b76457883e03a7376b014cfe67d3bd4c870cee524c8eecbe6c7e010120f7a157d0c422ef9b96ffa555c2b76eb4c8df55cedc2751e95aa1c31eeb4392aa3eb5daa4972e3ba9202af7932f66e0d91329d63c12e4949058653937a84b9effc0eaa06b3bdeaae9f58f3669cb4eeb3763ca56dcbe44bc0f44beb1a7684db45d8cb413878d3222aea3334bcba35d205c9b2ab8a06c0580dfe30616d0a1aa55907bbe8e1e2ff86f746de7128faf44f6c135ea0f487e15b607e2fdd2c84bc99923bece41be56e8d083749ec6932ed356edf6acfc7062b35108cb7a901ba32a30a33214be4a5d67b78b854ff6061d06b235065c6470bd3f1ab472bfc52e49682c4aca16af7ed95c0dc6b0f5b66123f05ba7547d50d845c21a61b82a90c84297be4db47c8ba94263ec11100691344182d9283265c1a7f66e91996ee21943e143a0381ce7ff6c3026d01e224f6f1fe4c6f6e388364d669a642220855bf2e6888e110893a13daaf7cad8572030a30d03a41762b2daf0130e90971e3fa3887cb245ee93914e6bb9d57c4db6a07d531cdee2bfa30c462c9fcae2cb6b12383d04e3ff47c68e23c646f13a432ecb623f2dacda4a454b87bb6252842ed9b074d3ae8b8b7585720bfe0016e4733199bda21b55ef38ed0d4790e7447c15a79efd086b1ad077331d97c7eb001badf7df47629049f37ca4b0c0e909806da2d24e042a24dbb4b191575e891b499ab6239fead8fdf9ec6873953d38cebf210aa0cf85803954b0b713b1f1a5ead08fcd65522541f062d6138f6a35885a855cd05d684eb68d47e2a18b9adafb2211e2266347842e8b21b2b61c238133c4575d6bc7dccd7b3963a1b61bb2b676095f1eeb029be7692ac254d4de3f8e889295180a690d6f8ec9051080d5b6725e68e570b69552cf2a0ff553810edf8b60f4671fda70c4d21f4500751d25847de0831ae4fa3411891b7257a09d963cc7677b6e1afcbdb9922e66aa5ecd096bf8b3a7611713b6d99df6d78dd5f707051f2163681f0069502a4a958bbaa5d298e2d3a913ad0a5fc3f293d449cbb5f8834ca9d25d4c24ceb7d136184133e176d3e474f22faaa103bf9b206903521797c370056802c0fb44437735f651ee6ee6d19fd32ad40a8e641c3f72d47dbd35a07a7c49221809c4e39307d80c87d6dfb2db345141040ee985e3c18fb1692f2f8406c3e3cc275223736b4f90b8c2d2c6ec9dd96220356ade9b30c06f1605516e5c2df1fb1077a20f376532e63d7bf64742ee23e6ec8d15356afc9e5b1cf4dc4de594a4a6eb152d314209685826a8e25406134f6ce8ffe28b11c6c75821b5132b85742dccf0a3e73f8ca949aad732f5cce07ccc90ab74e799afe475c2a192a06fc9180ef35e01601b24d2b3496b5708bc8a098661b885ab8fe673d19c9b8e5d00d050320a2cec2d50b1e9ab34f5469ebd123202aaa7c459a1441033d2ea7b3598efa5ab9ef1229a61aa256476a52294abe1d932a1947a0dd62998b70cf09a0d7387f35b2817a37526c830ceb8784cb6d8c86252864897be705366c5e1c61881e2ab95aa9823c79b722df5be6cfe5937de5abe840b6d38cfca140e92296cecd22c58d78e79f826b1604d3fdd5e15fa18e7998bc546c8b9735277f3d1036e545b55ea4b4e3df1f5e948b62c07ce13b458862eac20fb79af0ce7cf14572c04b00e762e53c9dfd044d573aabeab92ac125be9b5773dfb25669ad9e18bb41bb9aee4566abb886784d4d3077679458133dc43438a78f3210bd43027f27e4812c8b7de9d16fbfd6b5ea8077cfaa2c80c5ff87ef6b683c03bb8150e26b774c1749a50ed43fafc339486747ca1d41c4febd3a19c312a84a7e19ba1c02b575ef1b6dedfbd443c659fb1335f0dfeb4eecb39866a923cd35d09e5473f5df16b0ad58633715f58814d83de1eb3835fa6927f537bd3095f6294041557ac840b438bd3be57a4c02c66633aa59dbe95154a7a0d6c69b24cec06961976fac7b93d2ba81d1966a2bd82961a61493b0e041c2449dcbbc51f44df13cab49afc10814b9ece3b25313bb08449c6e950890e14c7c8aa52558a6cf3cf1172e8cde6fe3f566e7e1423293157108477b660e7e6d1801837f4a4a786b9bd228aa8620f15cf7d2b4879e8bc3f8daf14c249b3721579c58d3f91daa4bb3d2e465b45ce30f220fdb18fcd4d89c7e4531dcb112aecaa021c89f9cf81d27551ea30036cd6fbe3e389cb3279cc33f2ed265c467641ceb52c7ea42b8457a1d8f84726688e8af086a05b3126e56ecb29175ebc819c5975fa29a536184c95d3e26336c7e6bae0fde57fee85d7a2743c905bd64dd414f19dfe225c90e0a2882ae96beaffd4b18d6c42ea1c86b12db50fddf4e1cd131f4ed44e768f90f6fd52f502fc2ba6a4afd4b0055d6fc56c6f0ef061fcfabedd40feb5995527f2d0fb4b06955d9dc195d0167e4e015f85e0e3d885ac63ab89aba2ace4a43c22af9dafb72c2787824f28c69f387386ae9127fb7eb86b73e8280d281894f176bdd4d6e74dd890482ab0dd475af782ab94474ac56473330cea0bdb023a46d6a7419e21c3920864cdb51217018cbb602bbeae34139bcdcb627b7db6218b70e52605a237e2f266900fbc9ba670c9183900cb5c578fd2ed810d4d43c048de2fd889924407e66c74722c65bc7f308b8077290efc12332379439df8fb6770eca0586b67d64b51479e87092d9e453bb79d401a4ffcc2de5b94a10ba49e99692bd060cca2bfa315163fb1f02497835bb1425c3563914f4cd4fa1dbb02fb7c0e3a836c42e19f05388893ad4d4444ae3746b77a4d8e65094c8c644b46bbd4b7828bd884bd8a8d49eeb067e996fd8137f9745780377c961a66d127ca2740d7840980e1471fba34a5f7afa4641927798b08f9f0c82c19e06aef4b17ce6455892b5950b9993dc563335b0beca54610669a307a596c0a7ad36120977582ea8117594f6a6ee6284305890d8dc4b26da85a12011e0964acba332e4a265f6251e6d1e6dbc5bc063ad73d802925cc9b6bb32a82384a52642165db0a2f2bb810d762c900009fe9b661415cc02045866a3dbff288acc5943d26b39785d566bc735f6e8fdb48caa10d5a25165f0d09e1f89a4bfc910397f4fa810c6850a73baf300d81f87910ad6270cdc2db676c1dcff20f1c8946bb9c7e94bda116e8e901ed66cbae5d048ed672b57d3a109546326d2899e926a3dfaad8a5dea36af43b76931d3409425af08dd197a2e43cdac86474743afc80f0585e3c5394849c08000d57bd73669ed7a02536149f3eca09c9d6910fa9b96c6609922146d443b93f4784fb057169536a0c8ba03f89d0bc56808abf91150742c0abad9705378940c958fe80c8291bd7920be81b2005f6c67e930ce268115ec5b7dfaac8785da8072742f85b638a6fd8e15c13db7d6f4da73847d9e6bff07ca409b2eab4d3d55e4c77bd6f1168d420cd30ca005d3d0242d433ef080cf319300289a02aafbd48443790bfaf8bfe75e8d3c8986cd9d701a320237a872bb20978746d4946cc58c05c4e8babc265ad4f4a4b5a96b13c490b48b614bff7dea07702e88ced1d9f8eac9224f61cba8f07d2af9ed12b12c4c9136ec23573c3ce9963b07edf27b7fee4e0b56efe8a69d39bba296d32855b7c01c26065375681100f4fac561ba54651f2714ca72c19d378e749615205f82789c32e7ced254ea44af9077d40d7857dc6220a55da59b3ab50a5f06afe8cf372e9dedcd1e0c94625f07638e23d7b6559abac707ca7e4ad06f0dbbc2a9d4e9855d93b63e3c48d8f94b8fd48356ebd530c6a103a7f53424406a6e26eb49c1a35276248d4f535895632f0f54b212128481edab310e8c4673ea9bfa1edf1e56d81365c7586313eca9c6415397afdc4ea280185de44982e97be2195c67e37675453f3237468abfdcd0ad9c54cc432ca0bf6cdb476ad790e3c62df1dd1a774f79f714387288486b55409495da752cf9db6aa5923620a411676cebd34da418fc679b2575e5563e7d81ded738a0b5b997c0dd21078a068cc5a17adf11451ae4dfa539c303e803fd299a3653a30c1b1b172580abeba7bfb2c8ce30e3834be1dc65baed2d1c6f43f51c2e1e6c31068162ee7d8184cfe54056af2ce74d3de5fa0631a15190569a2ed701ae9fff30289991a341a744aefb84dd9780b53c3a9844bd88742eadc45b78e58a5467bbc594819145930bb129faa88c2916aa55ab3a46cf2321cc94b1c9a91abfffa2b6fd5c9a67cf10adca8ed32c3ee8440656d5f9df6dc366dd48a04ae7548d370620aeb0584db07e3bbf107bd45dddd4406c03d3648aefd204deec101ee3094465861fc3541a4c977d8a0f48a0d0963a34f2833c8eab323eec1b5a01e7712ec0ea73ef44cc25694d0b02051e5c82fc9ae92abb5dbba82ea019cf218e1e777899be3a8bc971857479e8ef0c60164a62c8d7ba48301a60c4b880f42b89e8513307d5044826cd0db651cefc059c57b65c79167773655db1d258882f38d700fd57a5b0a7a03ecdb68d541216cb96673834c812dc7c847aad87dc2e3f6db5a9f380994460251e15e91f93a8faddc88c57c218fbf876fac0108adbf67c99aa22968ca4c5e63b74a7b2df5713134323fdf5e8c3143d41b13d720621c49240bf515bbed314e15009dc8155fac91cb4c280b7d3ca052aaa067ac4a2e1802404e70bac3a5bac94ef4e556aef0bab4d6159830f486a894da303b03809af3361ab134422561cbe2ef2a1cd4904825a07cf7f3b5177015d6a3f6ec0cd5c1b0d89e0961c54dde1ecfc843bcf7e326c2d700268c7a8af889d9d8c5cde878203c995ad384c465aa10b2143f73ef82a6ce6e921f0395d96a99f151e1a936f548faf29621f236c3eb8f91333cd9e6b196ae6d9dd1cb544b3a3cd001f8e4332593c79274a22304240929cf44c8b4bae20958804485eb73423df4dc087d941b85708f759419094fdf42968deeff4984d1cc5e355b62e09a4e9a9d0c78d25ebe2ad988f5230eabc9e1e538bc735b8652c6717c70a8ef51b1dbd32308ed0ae18eb54151c917b0b457ea776aca6d162d7e4536a0b037d776025b3842fec0a574bc9ad30f5604bed9c4b209b03df777dcef5fcd06b40b1597645386cebeca65c96eaacef0e99372951b14bfa95811f00e6404135e9a602e53c6c73a2a578ae34c1cbd18280d85c9db741357ceddac58e4cbba378acb1f66cfe7e841fa55c7742d7f6fa8747206bd4bc55a7822550cd89d885f937bafa042172208990b51b41ce193b823797081755bcabe1a3a8700581a04aaf79e312d9612505ea370968324f67c04bdfe3a6adf7f9ac642a0330fb08b940ea0960ab0236e97f319428739430f0585894aafd8c6490aec63f9c5c828961e69c08249e24df2c850e9cd57652c947397cce66582f0e7f4865360228ba1563fe5740377c0bb83ad5fc853e1e98021e4977c318953f93ad7a58d69ce2349797c172a59f09eba2cafdedfb59fffd1a7d8fcb3bae5933040f7757dd4167af960603bb83243af21702f0b54679c0862ad2a07d50c474b6f38a6c2a97a1666c28d94a04fcdcfde67856c0b7fba63b631c0a6a95574b19a33f039611c27e68e0fa88e7f4219b18d1e824b5126faf9b5da5b527bec7d90bb9b4eb3d15311c624af30c8cf935fb08ea646afd4370d330f24044e043702904eedab3aa0dc01445c23dc9c4070f0816c51ba98e39782776f3bbf37063d3a81f7f918ea7d92114792d4d5189528587e43afd3e8de07cf695b4ca8efed4695409c89283de51c459cc709efba1659033c0583f2aa61885e3d994c19982fecf7d63092fbb3b76c6058b16a888a6ba67e51013c8f12be0fd88e73690cbc6300956b495e2954d1a6284cc86abefd9ae192f1be435571bca8dcbd5986ec7f536ac849450ab9dda1a0316e595b40b50cc23b196c3cc5695303b81ae81c51a45a30a8c6706df8b0dbee14fb0a26b23233d4b7baa4650ff16221bc9252e61ee101f3c431c088a20008b759b79752a1b0e9557b4ed305ade214819859fbc4d2486a9c5456d4d48b7d218b11ea54593c97f47c7f54aee39e7716855e6ca3781421921c73b99a9d0e34fff8b8d296887201cce83008f646a35cd3f06c83ae92fb14ee719bf39639647356bd95b26fa8932531249fcaafe9adf789519180012179fd26a5e8a60fd186e65799d342e6098e153e81a2f755d4cb5e5ee1ba3abe3a8f9938223411646b0a0cfbf82e56cf1baf4759726c2622a17b9acb1b098be3c652a5ae055fbca8ffac7f35349b9aedccf112e4b188058d4aff2aad1bde84f27f6531659c6cad2999eb3a67a21f4a1ffa4021f8229c752d4ce07dce7d3161e7c79a76e550dbe0645ab60f7e1844324bd29358c1d077de752145e2596c4c49d00353d7690f136a10d5796453efbcef18df1c69c71512971e8b941f276f5438d2403114c3e23eafd87fd1776362d092ed86135724425adfa27b5c75f8e808b3ca9b336d01acbf355b7b21d163ecbd2d51a81d99f55e213639a709c4a54701e11906ac3ffe8e3ce5d33a0ce56dbc162b22005b2228ff08d9e95aaf7a657d9eacee22b5584f895edd8c29138df6974ab41335809229502927c3d5a54bc0e3415a9324bd65ea839aa7c8004f89977ec806ac40bd540783bbfc818f3d7da1929968fd1ab246286d957d265c2996498566a18f15f4e33ed3d38efebb2afeed9dc2f2ae009bc6e2e1db1cea62a6572f0393cf8c947f0ba656354dfbfc06713a6a0391297a1dfceab94b31a5637db06c21cdc99952aad857e3f405392b20759c899ee0fb16b4f49e8b8a4f24b15c1c4b65302b8b23feb571460ac04a1c9e90896795c9c31346d8bd85637abd18c32d12409260817ad2f2a211fbd48d9df81f59569e8067cbf50a38aed5dd0bed82816dca07e4cecbd4e93be780658113c6806d93b2b5160daeac6f79cef3e61ec830fa6c6ebd6f63534f3d0ec607040f540d05a66a4eae8b291171021092ad5f13230d1fc4c55c6ce48f4df7865c4658199b3d37718d7a140c186c21a6456e0dd50aa24761b0ee20ebf524c2b4f805bfaab4892bc43ac8ab22bd864753d55cf338a7f7f13da1906bfd2c0de7d10e58740e424b3447cb66355381d89ade1bdde130c8095afa0542ae90333f1dd9c6ea75ad428e9c8d3dd1f8d43cdd3bfb11bf97f35b6979d4a8964389da1090bc1511f90d213cd647e6623fb49e8869f5c79fd7b76ff6dbfa47b6583d04ce2534c048a123cd1d4df4024ff8f57f5b2d6b0c5756e93b4e1933414afceff96b94dcce7b4b843ba6e1c814826dc2f5100e92044d8f048a2d80f1d39af2489a8fa4e70619c20d842fb02302965c57750978acaa03c27087ac18a8b210d42ceccca50971f616cac953af0199b860a666f73fb0ea2c9594250c728b573ec630dd75cbe38b5e6cca694dae0f853106daf2ccf4ab5f965eb4eba0e6d9081f05498cedd4fbfb368247f87d42f97de1afd61af609ff25def52b026a29e31f30916952f3283db37853b590c39bc88abba120b1bb5aabfe2365cf5518e9565018409057f7473aac12593e993437b2cd7f98734e620ee53cd8e7722218072e791c5d8af3b98d79654f7be782db537412eeedbd8b9edb0d9cd3190e8be56086e5a0a5c05e9efd1f415e986eeba9cc2fcffe9ab7d858408bab5333e72dc04d4df9a950c3dfb05e1f6cfbe8377416d80248ede833b4df4a2a4e6f8b46f422988704ab173e3c35ebc81e369c27395c5b6924f71c9df49643b63632eaa3a966f8063965e9efe67ee370fd5e62d2595ad930e82ab06c02e2d17fc5b1669c3f0d762fdff7b9973417e2d0e5981800a9bf64b2564f40ae11a3342d20c5222e89264baa573df62482a8f88167457a3d895c52e9963daa355519599a08c9714f71cfb29e8bf2dd63cf12c4fb84d4ae116d770dad70aba61f23ff946275b9b004a7ade2653eda95efd0c65cb1d144d1a571d322ea9c5458fa6a7ff4bf0e21a0255b101935057123bad8828ff92b2ad0ac71862d00a2cf3f5d55f9d6e81751501e441e7c904a0d9ceafea0a20c6200795d6b755a955119b58acf9f34ca3360b75a5eed2f3d1b306008d17171b22220e9dc6a1a92409b8398d2ae52f30f9b2019a928755ab6e1cce7360e11ac709a44d508df8013f1acefb2f4284880de6c2ee60e6e9f45f3f3d66ae1b3f372b516042a0f378dc4739366c59fbcc56fe982a7dfe9478723d9a1f14bcb89559b0e94f0a7fde8efeddc9653747dd10072645a5ae1b2d36be66ec8e4421ed0850e8f603689bbc3a50695c19f6d1d7a8ae5c43d2f15bf8a8aa8469522279ee48706a751e94a8c130ef0dc90d762ec5e6c0272d408bf6361c308f8116d4aa383a9d952108c4e719b1e78172825ba58ed5f9c8e6c2a497a96b88931007c32c21a5a0546caebda367defe90a47ba4456492a199808533acf7e13ad2a904956c2232b10809ae28b4c14e620ed3331edc5e06808df36ce84feb35532cbb3ef534ce8f645d6fa4dedf0389194323c7f89840494ae84e93efb99db31b02be3a9ed2859ddebae1d60ec5c0ebc2f7fdfa3b8b11abddba4def2de425cda9f2170775dfde95d0ec9e756b779f77729b79c7fa9fade8f610dc69ffd8f9cc12a6dc97b9a2ae7aa351f3c22b571ce2914b91991d89cc94281f06a9b6a7fea64d6bd8a8a777dc02f05dd84d0028f16e34732e83322a88ae75b91b243c9a1df195092e00dc7475e647633066f7b0000306d0ffac98a969e690237d1609cfc5bfeaadd7096b58e3ca1b7e521533c4f699b265ed1d1115cb4499d934a8ef9b20e8b4e7b991f42251209beee5b005ff98b8f60ae6fafb3b3512b340c258d28fdaa98a19a16bca93ed03b417887e87f5dd3b88766a07d6c37c62625035c56be98c4ff021b0c91d3eeb787d2b2bae7ddcda74abb443e5b9dec40ace95457e1f0a232dbab4dec99aaab5077b7e008a21b82429d5b0b1408bb1164cef7780e5495c05e8d25b82faa8fbc04590d0735c2e1109c6fa31919a09657ccb9989d445c830e244cecf1cab5f6fe111b68a601ffad444cc3e2964b5ef720aedf819bf361cc0244cd4392b5400ec15524716a3e76ea0f09a1d251891e809e4906eb524b067ff503a7b4791e05bbbe6c49c2a0a4d972a79c8d81c432b5172ed8f75addb3bd5a90ed9a9e8e8cafb64c3c2c2bf1ad9e9be9030890b403727fa9d9ecf616d446da440a41553320bb43dfc64aa5d9453d7c1a5ec7833dff59bf6d0e7666197577983e9dadb1cdbe09adbf284d5090eaa9af2ec142cab08730fda05a6820d8850d0d4fce6a8cf13cac1d40e810cabd5288b108410452268f603610cea3ba6e72792a36693abd9dfe824bc1f3b86b362a23263c03ae182e6495c055d41e44ccd23f82fbda6463ccafb90c843d4703b91eb390cb0aef31d77583b59561339995077d3ffe66a0d721c0c1944b2adf876745b809a462d405cbc468382b1dd03834df3ea345dd3721552b0cffddc8163ae208e9599f445f22ee4abe3f5dae72bc403c2eedc24c4e7fefc0b12fa9b562f4173f63dbf834e0ec214764f4cbc78e88afcce13bf3810018d51f99d860550315a2e7bfcff352ecf025befbd6c9bcc4f9528ed611f9768b6fcfaf71518c1f0527f32baad7a4c1c9885417adc2203efba345bcb1b6f13641438ce785e183038498dde1ddbed30b6addf512766917c396554d01f22f49ff9c091b99563f6df3fd45d662c7ae3a02077cfd8c164f0fb52360b02a1a5f49f20a8a177f2b6bf16c8191083edbfaea838ae57fbc3565ce33dff9dfe259acf70dc7d0c40b9297794615fc5e65fbf2f40f8b35956dc53bd7689fdf30b31ebed376d7e2a485a1b8594079d61a87f66982239fcd604c8843de3268400270c2f6751d64448ebb308ebab180c9d56f789a67406af8b5bcd4f6a348e760328cfe46ff60b2d95c844f770f2d45a6a14d10944b8c52153f202468c417cf51655eabe46d7536b4e93e561402e61ba415262a042580ca8c476b3eef66ff341e42186fbf8e60cf31c8c41ec5332a2dc9e53625d6093fd9dcfc263ee33819d3b5241a4159071c76cf9dd7cde42f5e959f63da0ae1783dd7afb8df7bb88204151f25e6f690345cbe718af3592d2a4c520664ddf9cb7ccac0a35e062d9a43fd10d4d6b2f07402c2b6f8627e75b36494364c8b259507aa83f4109577cab7f4d5d84147b2eea9833ef8aadaba481cbe2fa79bf3f347d4e3a7f00387f6f428ff1ff3560b290062cf41ffc5e3d75bde9b70a8fd7c9bf2570cbeab34dc0b632d00e23496a9ab79ef88ec0211bda49b334e5545274ea57b0a0e91303f64582ac3f237085fcab8685b73b04ba846684e807585fc188595ba785e1440230755376d71905b617f1d8de6577187de9fe2f6073e8fdb8b6c9dcb94d2550d2c08899970c7a2e175ecc803126c1a5917978c8b6fdf9323c0689cef9462cf25dcbdec001156e126f24d1263ce42b4b16f369cda534b6a586612fdf8fabcd1d8eee52d2e8b3d1e19a1e55bdc2d6d68d2aded617f4b1adcb3f7257327c12a4252c008104e54459b4fd5e684c9305a4a79121839bbda2b9af0cd8b767b0ef296d1acd2d930ad0dff21c3edf1095f19915be9cf314a73876a59f81963ce62eed2c331de32b831986c417cd00c0f142d6e6dec5a3c68fdff96eca6ad9e8fa940590032f35c1bfdf2e82dc24bcccf3ffb8720a19c36761c945c375b248ef9507f28f6dbcb95552fa5fa511f5f66f71c1396df833ec1773932c9e91c8fc0287f9d08bf0df582fc497a88cb70682565e7bb5c50a2f6a5e539c7cc32cef8ef5a3eca68f1f58de59855ce9123ddc3fb9f191941643f4f214228e8add0561cf7049f25ce2979e007a45b2bdd8b9ecdd8efae0c47f4c17234f27e6c445e88519387d6c60e2cbc747536d2a7081f24dabec1586572a4055b9f8ff6c55869540796731335c81435b523e85147e091f2bc2bc32a0bba4d9784132e3e222fee6df074a13e8dc64329e24c29ad4b6c677c65f5cf2a66c05cf034cb63563ff0889a1987d6c76741cb46ef7c097bdda47584d077c8348772e4e5b57b7e4f1cd1ae0a12d4a5dcba376559325294cfe702a005f575d9e366e7d5d92a9be30e9dfae9f8d48e8961ec5822fff2041a21f601a538d68cedfe3ac5d44d1133986c0a0b7ebc5f832cdf648cfec33922d9eaae0a6fb15abdfa50c8370c0d8f28cb97516d1077d083b83e79b9346a513baca64e6c453228639049139257f7fff4c607730740bd1ca79fcc8b49478ef4e3edb2fc356f454d031a702a2d1a884f2845b3a3b08ddfc49598689d7c013903e268e89fe57f61e8acc738e0e85e6e2b01168accc7581e27b87bf3ac3e546eca6995cddcbdfdf0565efae3ba19a92ddcde9ac4af9676d02cb25165a14e1956a8b6e8642897b7973e298f134a65999cde5c45837c82c39db2ecb85eeb6b081b9a60e8174687d61ef78faa52450968d3a8de35b5700165c44a502019ad5ede72f93c9151be1bf7d87092f3229b6a40184951ea9b7084deed2ec47ad3230f032aaa494860229952e8f3c29f2bf3111f777d2ac74e3f3dceda714b2f2bb23090f5452b7220c4986528c807bba24098ab9ecbf834461310210af37f3a60561400a65cfd5544e6c18d23a8137be60ceeab33246c96d996773c0febd16ef9d9827aef9ec49fada048ab420a914e0d618117ed2b86e6c5cbc10dc8275fa7b5485cbc870a0b1b9e344e77b784ad6d9e044e7dce20526b84d49653838c9971e1c014de488f44669d4b10a6fac5fcbb855dbe80527c9fb10a54e6d7392028b226b16a3c3b807657bd8182e1b3e4855c12742e8f951b4a2a9b835a5bf23bf1ad6296035e76a9274f974d0b80b2d333097fea5ad7a1e62c404c86d1f1d9d3a4019c7fca9fa3c550d0be6de603352a3ea599d08ce07752aeb919507807912b217052b7bec739281859d971d220ca4b86ab397aac062aafd4ff3ec65afe9b2da865d9979b04967496063800f3e84c73d687643cbc1e8ab5ed4b4dfdc52922e9ac1cfb56c2e101d3eba77c1d5ad826966ae1937735add0d983169d1f794d186b46531be7ffe1c53fced8db929a1674831146f3279f9c72b5f5cff47e4bb1ed23e58aef9ef936b705131d2cc5fa856e87a10f178dcf28ad0a183bd3491bd9fbe9f3f5df28bd717bc1d0529878647c4a6f924480301142d52eca0c44b25adb86bbb116a11669214cf5330082c7825e9bb72aa6648ce28fc05ab77e3d2b80e18a54f350cec5b03be99d5165fb4719ebbf63ad47044fdd8e3133f98edf01b942b1fd4f4992f1a4fafa2aeb583fdc11a72d84c1e646b700c168c6c7b337e8f66da326e727d0a6708d752715537fc2c7d834204e6820bfe35d5985cc3940bef6806e834fdda500555aa7782e244813eecfbea80df5a0055544261aec6c752a8523c62b621a92f452c7068a69570fff1a5fbfa3800d02d8f7d07b87ffa1009458618c770452cbc458b1a1740addbe6aef442e14443c6e00ea0fcfc79101b072b88ecb479d315b15fee98c25e242eb2009437b45ef6b2846d4709c0d009b9e1d84741547c721d5029ec62a8e072df0b6f2c1db9549a26787601679dfe662395c5ee45fe0450b10435574fab112f2d086243717f97828f41bdbf1ba5948d297868397afeff3462c0c32fa5587c4d2b2c701cbc970dc1b2fed74704d603e4c78a0b0118aed39c3b63fc6de4e12ea7b281727a2d858054b8090ca75a97877547d2f8c59d4b367f96df9fd5afa1d2de03949ddc5d5dd851cea8148428e3a17114eb9100788534671a4aef7391558f0f3d19708a88c6a6170b5fd7972abad77f0e9635e9893e13df49d4b1019e30565962bb76be75cb3568d458472d22e3276b34e48043eb1f0b7b25d2f20902d3c9d7998f70905cdc9bbd4bffd11c6182d91f4a5cfd44ae8cd60cc8ad1b653a9430ae5ef0354c748ac0079378e0b87aae72d8ca2794e9192916c08bbfeaca9e2bd4a876584f918e331e1c642ce32006dedd9ebd53e660133d0e0a892218317e85dcdf563d334e220725c82587672f9c8cf716f85d92a7d7cd8a12feebae1e2b48e6a23d1fd5168e3e2683562422895787a5ada9d26cd9542a846c40d3902d999e45cc89ac8b0344f7396705d0360dad7af58c869c6d12422b41090fa263014731ce2c4f6351ee22d08b0de96d5315edb1fbdd8240e4464b34958fee9ea02a43563c26d8d3b7338f39f5d17417dc4dc469198af7c43940323e46b77d84e16607a9bdd1715e02e9b19916915f4371d82f45821e208dcd86531503a63cbb0d1bb16e52c4d1962ec4750291eaaf3fc91f340e85c62a551f893a0c37ee3ca16dcf797a2aa97e7ed02e45c25e92c51073ea1078fd34f65c4c5d93bd70966168463624d311be820125adc6fa529ba182510a13696027d972f07721b14b45564d8474d3f135efc674ec58d0c1f644322112869e5149f6259df859e7249bad4547a61563dd808693d2f9b0ef49ede62d1f7575caff52428762ff2ae1051c49a971308e128262d0a6e1e47d6f35562d44c75f563e0646f93dde6c702d4d06ead2b770eebda1c1f5ce8943ca60cc28ad0d0fb262ca5274547755f36e6286c8192c933a187d6e9a033d14a9f82f86685d23dca4ff500510a97dfa3ac85dbc7fb7648d2601f4e689d5542eb54b07c82f40b5863fe0a0ed808c4d1e94bfc607d6cad6301d4601db56128d8345c9998ea47c8d21bbc7a2515e53b3ed10779cb9acef6ed7a723bd0eac8c05b9da9ed166f2f02b2045cd7dd88aa32ba9b7c3342c2147e203f10aa7de6f41519a0bb84adae0ac13c88b455811b12c60dc28deea8eb2bddc6478cf56fc57e6ac9b49ee2aed0301fd90404c757acd7ef3cf8f6c0aeed4701d501e5bbb224de35823d1b2bc58209301918306381af61f66450f7837fba5b6f0c28136658133ae9cecac1e8ea84731fe19482ec1fff651040de2c2fe0b76ecfc22907b17d528e2b86df49ba34f578705b0a0b7cc84c938361ec26ddf9ea52d18d02e3df38d7d05f745136d513d8d62df06fd3b1074dc81098f77dc9101601e33c4dd8fcd0715692c5ee57e6e001f2fc628053c030920405e3eaf2ff7c26436a4cafdf98b4203d77ddf7736c1e065757be24bcf6d78e00785b0caefe78796ef6427b6f08b51fe2d206c880d8da093814fca50be723bacdebae6fe88bbc2e9a87bf53a0a19946b80fc9506b0daa656be3647e1a62e5d4a59027b099c1f5ad7856ebd68d735e5374d22ce2b5b20ffb9a161211bafe89afd1badbcce4bf4a5147f9e31817ac0c8dcabdacab869520b2b30bac5dd0b2c0e4073a96bce9df8f93db5ffb254901cf892b9f496899e457f6a6b0e1e09259dc2a4599484248f9c15b2b3b554d88f42e54b5548dd13fccadd699824e75648e24fc50603901d69b8912923b2bed8f4425486be5585e61ae8357804ef9ff3883c8cf7f9bf1bd6c30455686d25c8bfda1d46ed4fcdd333a8b9164b7dbf39a588bd9dc41005a4015afa11f1f273b0294f940d696a5d459c0e24d8c78d3456ceac433e5ad476ecfec85c62cc462dd398dbb38a21554178ebdd8f032323611f766022792471acdf3baeee08ae456fe72a185317c4796791f47e77f0c3297c360bce4589babb2d7f3bcab8cbe2f336dfb5e8304a8684ae7cd0120ae49566cc12461887bff6621ecdca66daa34cc00182cfd85259a2230c4d124b7081d800e9d0cf4d4e5e7f3d9057e13c4fd5a12a1833ef6db1c8f10936d4fbd209550cfb52d5ecff91996754b556ce4395064bae95124d6bd8f42d43017a332fd9e0f7c78dd6bcdd0de888bb494845e940e55094696c3a4e9abb0d3d8795bcc6086633aa9eb4446ea813afc8c149467b6e6e88e2201a7d0562ca6de93c29f307f195f9ff2f69014d74c3709d3b0cbc5e78f67d30673f0e944af3a19e05cbdc5d05aade431571f1b5e300077c079cb0798c2737d88d52a34212e29844077a5f1b65ae108199cfa2406c727f0f058c2abd6ec12d995aba222f0bd69c018b3df2b213029c72f93a075df3ab2db6d81654279f2c0ebaa2f5c199e7e861acbc8878608c0c30d2346abc840149451262db25715db8c48f0f34f4d7515be15e19a1e98dbb4d4755ef391e88f94923c5b13a423b0e742e40043fc3b503b7347c7d921d6622cf370875bd9e53d2c3f554594f82291b7f1ba0b0da34cfd26db1a8dd326a0c10fa801cb5d77ea320cae72ad6c4b074fa998d6d3af0b6012bb850e3fe409c47f7467badacde655c5d1f5eb0ff9498d2026ce5d4b54b7fe8846e728801d288eee5e75a0c9ec24b6f18eb51b5771be21b02bd1f41d2c9ccb655cc27f3c864295afa61823b6a781a37b44d196eb1e4fcee5366ea7376f52a57a3fa906a2b8fd8dc56300b8788a7946e3125ce621d916619501268a2b098258b89ccafcf4c27128d59f62739ea121cc9cce6e41168e49775eda8d1cc577e22de2918cf96b6e8b18b605b150f412924c8b51c7d9edf70bdd42702914bdcde6da1f3eefbabf8ab43c1ae3f75ed827cd77fbb2d898d3cc03ba6b524944f8166c247da2568da622f03a4a7994b4e77bb89a563f8d1058b42882602342b6ef78c5a9686d5327e6ec00f1f68b35de6fc9d098e2cd907fb2c68de787d2ce0425592bedbf4452f5c54552bf8b0858aa921ba2e0f7f3c0e1903bba8b87cd1020addcff0b4c3f64c0456b63a57b50486b1053b23da91663d3650eaa88c18827029e0353658e836d92ccc08ec3f1785c98616afd0eae581375e4da1d7b907f371f07ba7cb0c86a9b5eb3ef2c82684704277a2f69b5d6c0b181dec7288fce15ac3e9709611c4c74b574b1f9e8c32c5dfb2f91115d1b05161bcc10a77c67073a12c81c37e51910a37a8c067bdcdf4364d7ff84e0ca2652099d9fb07ba0f36a65fade447c15efc322cd8c18d5ab731b466a797aa6f7f9f839c8e6d4d1f7ea6253b7709f685302439d15fa2a4ec780d2fa05189d1dc744e15e941fe0d65f432ed4ac7b4a0f21c0878f78d3b3488e6b139609e85970d1ec5441f25eae281fa6c29f6d32a42373d9a12768973c0a7ba0c337995b4476a0cb9eaccb677a27261fea81512b5186b8e150e60d2e4699193d5b2007a1c1503375f90ab464f721be3e8031a572f4f2235f4c86c4e5d7328f633b2a52f7eae14ff206d0722d0c6219d9320bcaf3ee174df03e63e2231010ba2f610ba506330715db19909439311d6f91f91e2c3cad579108f4a9c3839d5e511f630fd32a55911eaeae55b9c5ebd70590ab9714a70c265b10ec46d6839245197737b0b1d3fe5253f2d7deb1a5f54d4aefacf0838f8cc13fbb7b687cbb37044452a2d97267c6da7345afdab24c6d2c0c7d6117e17cbf652af5c1f2e93726ac215858981e611f468177b67822c3ca57414330e15e36bc3caa5b8c6d425a1d012e96dbdda391171c6d15623540b54e48bb41afafd5e73c362e6afa8d90db38e358237e2a7839b5c38cb9f09630febd640e57e90d46a5c0835fb995621c47ddf39c764d072346d09228a96f07b0bf0f49cdc9af2819a4acf37c365af43fe28ab520df8246b41b2037c4a3f50d1b61ea62f132edf9750db591894994e83fb597c028e62dd0abc09d4ae8641dee36c20df060eca397faf47c2c333b6e2974b62c4eaf26c54c176dfa995e3e2fbc533ed3eb7ffd9df183e651e05283240344251595882aadedc97b31c28d6aee02f94d55b90f42a3e603093a75548d812db7901e169c25d704a8d6f026feae821e32505f8810ac6c8d2b295b9ed0e0e8ba507d31ffdcf0b441d1b209b924ed6659367f7c4eaa9f148227f9c37b967b65526f43e8acc7e641891cd33038d22e579aef72ae1718e1e18f2e5dc1e53282b85b5fde6f0b51edc64a888c9435103380437736c5de36159f7e5bf79434496576ea4e01ea2fb7bd36cba4945830a204155a82b4d6e34f1c8fac18c2fca6c73c8f23bc69053ac34ceb486512c10f7a5d06c734dc85e6283b8ea775daf17cb3248affe9435f0ba47d13863f69b0d5b506f7091f97266852b230b9ba1f1a8af4d9201fd37f8c30678a0abe0e4dc65c2d7d386d631d044fb00e730ed294d4baa67e11fd78f172f88588d21c11c16921206c45ba1ed209a44d0b67f24b59a2efeca4a67a5ea4098a6f9dca574fd791f9a38dcfbb55a718d37ed863130f16134158a965c3fc3729f4a5e93f5542c6e83fe3456e11ef52d324aa9d18a3c71702ae21bf63f587d9035923a7782492114aba9736ee4e4f518703bf7d1f1f03e9a404c4111a4517094926f3bb7a7ed3574aaef5c1fe92060f41d82b5379264e833769c449ca07755fbfac4f653e5c2a8e0fdf2347ebae7c7c832c3b2258c1beffc3f24313875606a2d0565ee7f60a3e6641da02d93d4c4b0b907713d364445eaf26860f43dd2cafb488b55cd58711156b2fd6799a42859fb7ae69c19772da40f7f2d8a72fe88f43d0b0480fafb3d78d76fcedbf0ea43db7bd56505e185c690f815797d22b32141aced1e29c22924962f1f5356b6244763e66affd832d2aaa9a0f0b2f8ef05c6551a360cd085ddcc2ed321ad65780c520d0e73981fe54f048a0b388b4964af46a3b0426b855b8ebcf9822ea2cd65cbb47063a8a6e6708bbfb157922d1956df449dbd679fa64fc74f039c9b8c3d5babd0374bf482bd84dedfbe0a10a7e4519c690530656180218ff22ad112fac350d85112403e88d2b6efe4b05cacb83674cc7493d1a5f31a70fb3f066beea873341a19bb9ea7b773daf53683ef6e18a544d2936396be3a9a92b051058c34e7222b239e634ed704eb8f4d537ed7570dab68974decad6224c98d8c3059745b478e990285a5cfee3006697aaca07013ba4d5ec899912c14aa82726813c0e844837cb796633bbc61a6ca4382e1b6cde64fe1dc917135f3eb4d908cdddb72ddb261c05195d35b78160e3efcd8130ff1b165a00380c711bafa2ef2b222a9b3208343fbcc42066e5559fa2192ebc15e8dd9928b43c79047a9949c2e59b98fa09dbd5a4636b6243e98ab6b73d49e3c5cdf04f425dba13950248e5d6dbb1fc20cbb229d8ac0b5959b805edf97324241659bba1862a1a61841245d351f1e7a6ad1bfc1f9dab01c3696978a80a12215eb95401785d12cf26f2f4080ccf47d38addd0febe9860658c8a9bbc13ea5a508cb1dc41c1b31bd90d4b08de144208c6602e1b0c20568e2fc73a2da6f6c688b28653bc6b6261b89445940b6c22e24dc5f4d3f6eb9377572e7cb5045f7dd07f5c62a5e6864a643828fbc34aed18081e6812544af380e79713ab0d3477072f7402554a6fddebfb6a7d2c5f8653132315170ce21c73cf18459df8a66909ca35b286febfd623fe89e2ba400d809c39a3f0254f6e4263f0f01f114d6e260d261e6a6c40983600aedf42bfb40b1c8d487715a8031e2bc715663f5cceb8e0da9a23c2d44f39a6817ff36e6346119a1e1e12529c5462bd75d0792bfe4231fb78f434b2b00c716f0784611ef8868793cf533383c32a22c72f7fc0c7a7045ad4c6915ab284372a84d82d6b75f353cced5880d2b1a137299cc88e7c6c5eb07c1313bf7e14a73f172d524b19151f0ecf8a28865d0fb65b58deeb0a392452ac85648e57c52966d819986a56b45a91baa284001bf540cafad2eb4b6d90ac0a5dc7d42df3550bf1f8fdd00fbc53a3559d071e29d001b4b4a3bed5abcc7fd025977ae298e176fe65c7d369faa05127f9df186f3d8ca9721b6ef5d76b0e61d6f73213c959bc196ebf3ad2899c1bb75dd78e08f0348cc28fe4bac26ade98f9a7620560a4ea8f558e47f6d62e67b66ae08fef73ae44f4f10090dcead2a45007443fbfdf1f0317362e08c6ecbf4e0d48693f76d659a3822cea7ff729cd6505d9cd5d16f119166bc286ccf11349fb8045faa1d86a8e9066ae0c51b3a72fe8b8d81a3b75fd933023a13d4fec9f296906c0bcd3b39a0e4fdc9d4212af14a96fb75e22805a1f45fcce15da15a3ccd0bb9d5e223f08d22dfb1beb43ba0fe72b4527cbea7019243544528149e9074545f8e59067b0cc81b32105755b290482614af175628736bda79dcf46c82d4595cf084f1c155ff2f1e5a2a45671ebe6508899ff3c05fd969a48a44b718fcd8851198bcf9ac823a9b1b4b15577aa394a878d7480f22b950f0fc2361fdc68228a353220490e8346325d625e2828d36f55e8f4f160f49b10c6fa5b939d045765c40b95e6bd87eeee4e5a89f9e24bcb3593eb26a527fa90a22b32445702a7dbd16fa3abd5c28f0c7f5a1348d43e4a85102a0bb0fddfacaf0aa0614f4028b54b5ef98b4129f4ecb64df891cfe9b45a1f39037d1b176216bd92ee7b59f5fc495393b10b33f564f4edf9625ca78f4d7ad7983b5e2e2f9b2697873dbe1f34a7d4e6f6c48e9e59a5ddeb5960ebe477ce40998de01f9cf295a02c0354678711c8417a191177e18aaca335bf546732fb821e57bc0711d1c2d16bbe571010c2a3fff5e7671834f0bceb3607abb54a37c8e01a870ac71f0557a9239b151728de054385d8f58dd12f4b7909305849f90da07e1d09ba1ddf7b8212aa607e632e76c1c994d04c1e7e2645de3bee0c584351871312761debf9bb35fcc3f21424348e678ed7bb2d8f96a6765c484f87ff131d9eab856a06ab691e8246d53d7bf69d036ace62f29fe2be0ce73bc8c2b87f6549965dbe6f5113b0517b940c6e6a3fa9f3f68ab149dc4b73f0396428aede8d29596eb982ea5ee085048306b61494a55bf1fd17eabad3c3a9f714a1d5939d65db4fb93d4354664d99e53a139e9f8e4dc156f494141afb5b222d2925552ff274fb782a6f33d1902d5ddc07c4bea96f491ece978b7676820f86f2b65d8cac1de53278b1586e49cb773024b82a49bd54386777f9af952ea99d12a3ee0019b7947aa38264a5cbab2d9205f7bac2b542e9b9ca4ea5ae9c2381019fc6842ffd81416ca2bb7675f1002a1274a9e049f133bd0c29650277a87cbc6124432e00abc33b0ee94cda0da6950c2ef9f27e64b427a12c09ce75a78b14b83315e681fabeaf42c31582688dbc8d9b30f3efe724b907cdb73da5d935a94d3bbe783574fa8b574abefb6b01cf7bac43c07221b285ca6ac78f409aa4aa272e4070fc82f057551fe70186ff7517e2fa673d46accf03ba0d3c2bafc84f2e62f68dabfced2f2794e9a0afdaf4b3aa7862b8e6ac8291ca8f52c6d5ba16213718319ae18ac2b0252048126d5f0ba259ae3a43662471d5b4f3eb4bd8df92970d2d6a221d1a4743efdb86691f4cc9088c78b847b4772c9ca16d50bf61e5fd4935fe2e53f98a5bf9e3dbf3ecc506fca4032f618def81e896802041e49b59bb292e06c28e92b199d0f3d6c3d4f93043be3f638e43ba2268a4e6adcd2921f1979cc8695478f8e99151ab40b7ef79345ddc76074e8cffcd14ada0431c8eee02ac47e71c195eeec96815b5618a81e886702af74bb2d4f11035b7b68a33d432231409c562a8f069ebfa5fdd822d7eaf0558b5070ef70aec4643ff0e85cec598ff2381bd1b43b3146580e5af5e5eec1ce7aaebca5868f11e42c27333b02d9e856359780138f7b0581409b50438345fc154111da0722221752ca59f3aa04faa60ef5cc26f3fd970880eecc17be80fef56eaad20ad9c48b16402f3566b222c65e62931d7f0345a5d625d13fbc54b01da024435f7d89e37d8d6aa542f3b41c33ff6f30b2f28b5e10dcc4b2c3e3e9e2a5dc9bb985ff25070e1ebf0d592e6ec7a4913e0d3a3849d659c6ffb5e53d2666ed70322480318e82a3ba48e0e221f30bbc18ecb5671793189405f2501c8e42c4145bd6c230f609a5983f31dbe9af00599768f24859c68276c26a86940132eaa9efd36448b3f5c74f49c91e1df99844230e033c9af5d8c48e1beabba3936c3028c888a190071fff9ba8317ca6ff9a240ae9b6f8788dc00f5e0f5af3ed294df60a20ea25ac82ebf2919351f0ef07e5ac95600b26d2dbd35ff5f0a0a2654a1ea2f959203a0b8f8a92b7460769b77f9ed229b35c39694cd359ccec364e77bb18826e07e1b3c45d98e2e4af37fca75990b04fadda7021bb8bbe93bf0684d07af056bc0469ea927b087c6b6e780ee5efb02da1dde4eb8cc0eaec61602ffb784a05482a032de574b070376c36b1ea40619f32ffb6260161c36874b235ac1916e65fb79f7a193c702da9bd19be79f7aebaff6041cb89d3b17afdf0315c3381c4fc169693e5dd0ddfe8eb6545a0674a8f3f353ce7f8e1d795ede4b8d0f67793fead817923477262fea1ca9d07ef30b07acbe2740c8461ba47848c5d08a3115cbfe6b46b0b5d8de5a3c03bfd14ead293497c39ab7d8b62d17db92e0d1b6c79c0d99a2c835e704ec23106ef22b78ecdf94c8cd8101fb8e39595b629af88580adc03913cf68a2c8473f95f73f987143bb2a00b0e4e394b379738077853342e53f89601ba139d4dd2ae904f2152f275fda2f04acaae2e621fca1fa8943447c9fb15a55d6281ca88f5ee1d0274f9ca40c7c8a854c3f6bbbb0df761be2a297f31a93b18834c580d08c44e8e39314800cb5f01cbcdfcc27730c1e9e738d08ae9686e28d5316d3d0bd238782cb4f05a9ad3360b7e03470ed957150f79678e6dc25e786ac678b6aa2e90c5d38434d02725dff744a385634f278a1af06aa6b61218c42e3c6e7a1cfa5a6cd0cf314a8dc948d7d804a9e83e18c6ee0ef565833ae0a9ce622cec86ab4a0c9be6f8d2d468a7fe1329f75815213932e19844618a647f9764da8e6d95b0f53be0db6dc599582bbcf3617f7539a0cbb258495a68ede80b5d756605043037c195f11713c1c36e300797e021eb5d77e5782b7348197c028cf4b4bc38e072cec7bc2d953fa7b80f14a8ac0c488638cbcd5b459aa1ec9d56d6879cdc187d379cab8131636357c31c43f1a63ac96275e9ca1655e24ef26481ff5a1f85b078c897d2d2fe1299867838b784496dfbfe3a5c0d0ef4e79706d3d7a45160bdd6174cc1bcf64bfaa455cdeaf6575255be709026590fbc3c25bce4bf81dd526ab311bb00009232022216721a78b8e99dc233d181ad2ffe9f4f82e0a45c53f647968697fcf826e8a2a74805965b81e7faf5dc563f025ddf5b3955eb69fcabae84ec181b8a159729a180a0a553fb0b2c4e3a6416da509337fa985a0e4c441ccc8ca8e7ffd2fb7882aa867c997ec7d147431b54c6e427098143a2c006d57523b8a5d5f16f7abb7249c828257951fc6d5cdbd8cb4ee8762246f765aef23614b66f18c665bc9d70c4f61fb9d904290660e97d24405bd02adf4b18ed1f4e3d1b881c37d7ec390e01c4d840047915931a66f19708ddc6dd3dfd51f81bfa61b50cb01a51fb2b1d6432b22c47a1a6c5ece80ce48cf71a69b4abcee4fb944c4f6665c9115e060ad72a1a8a3ad1565a739147a043dab0f394affdd5fb6df79f97bebc2367b37b349c94e5352c8d83f591e5e42b2b4c4d59496a47b1795281329a880fbed0dc556262a983bcefc29b3d949cdc8e189b2f15fe8711c06cc3f02dd5442094fed30bff502594d1883e9c0010317a52ec5f152930de57dda3c39d6d32daf48783ebc23f24324570a532539761d3a61d1ed8b7a15ba31a6cee27d13cbebedf8bf7b747b1a51d44af783887944dc1e9aea9cabfb4112ee2daab46fbf8ee47752f69390531781238a9d95fc4bc0e0ce4a7ef87af3b8f3dbee521f30d602ba05528d29738d49d98fe5733f0c008c5de72d0b5b1cc82520908d8dcc067cab56b375f5078e966318a5b81db02364a37d6477acb986d00d63ca2aa1d4841e5ccef5f3b9f0dd69fb8b01a29d55771fc7e66da293bc113dbef932bc7f3c754c5e5ecb345c70f9c661713325acb43fa447acb8a8aa44dd881127ccba6866ac3d300f52f422cf0fd88f5d4a7212e4f9aa48d03166d233b2e55ef6ab3b5459796dd3cff79b2c3a82a2af2ab15ae0aecfccad34a38df2b3e4f3b6f9c34dde689db9e4bb6deac8fea03fe46c0c09845386c542fe7c7e6df92e8c2614697f063f1ddf3e41c407077ef2bbcd828e675ceb6cd7d99bc14d3595b1e6ba9cc85584b32411be4bccce28485abc8e00256c169b4f11ee5c2bb3585477ee9a28a32dc030f8e71f4ec0eea51fe2a60fb13ebb138a306aa732dab211214a702bba91cbc8a764fef5101c76a6dbf5eafba156e2635dec87ba6cf04e3a446136fb66fee8cc8d3bac37d431654cdc6ebf71bcc9ab37fb0b8d0f7cec7cf8f003aac7aa3aa61a7f6e62c8a823e4589d94e293fce9a02387e91e0b1807836a3e0825fa5f8fb2d6afda770245d1c60904ed38df99979fc5167038ab815b4af66b24e7fd7b7c06a96ff758b1803b744f32fd7a33360cfb9f56420cb8acc51767c858f3c4872b1fd2fff2a740ff6075edd0bde03e53cd26dcb26991673fb286695958eb0a81c4147ab8939fc31db95b3c4b157700eabbcd662c74d3f79e8420b4fe7a3843ecc6bb2332c0b2f0a15cd6985e34c87d5227b5775470cbe5af7db39a9ecad9d39e463ddc9eff52d069c7183e05755a072c44015afa1b2e4f687f0842126348d1f0a42a22ff5950f7450250de7ecf972eefac7cabc0ea62dbc21fd6680cc553556559ad86b1e264edc645025afbe1190c6ed7bd8cba36a6eb4768c1abe63031a9db70f449cfdbd609c8cecd58e6cdc91bf4fcb041bdc9655d30eabee680fb473c85a4e1ea91703bef36920692c3dec0ae535058020d0f1c483aca4a9d3d720afaa6c456ad5c2231f21c8a7eeca1a65e6192d2caaac1ce5a726c6513982f8d7fd98640be82237ac2e51c2421e976c32ceef447efa4d0d847db926690e600e7d4c0450da6cbedcebb0eeef85b4de66efb241943046ec630811901580e300558038c94d519b18586e9a98233e26ccd1eea8411c52b596ed8057c3f6c069106e70e98c308b5205765386359cfebc5f1af147d4922a5527fa50068376af4cd47c70d7837de089433fd6241f2c673f6f87b90ae2893d058156d260fa4361b194c8e965b275bf909f0c900e791988acde077d4c50ffba64bf0c66e487c40a606cbe2003895042dc7af91fce73727c18112ae8aad1c64ff975166762f09183b9e44eb90b86c9ea40403d1c918d2189251569e2f26e668fb25fa9d8611a3e4e6ec7f877bdbae528556ee882b2bc8d7b2b7c63f36068ae45af8d384ac7bbbf2f11a4619bf23f635b3cfd7029cbb0b52c7856483a4da1138072afdca3ce39797ccd74462b196f9a68e12af76956a6f9f1a950ab3d621825ddf3a5a7f694140be3512fc03bebd7e7baa70e0de0e0f7f04a8addaf3ef7a3384118bbea83a1addb21fbc03878ff0f95dd531c8dadcb33d711ef58e9cb40d2f529d25d8c7b7dc6a047d9ddf0bcc9e20023689414aa11bb1ba8632098efb411d491761bb4a96ee4e130846af7609a0ae7256f38abfc6f07581b0b75667e4501957e64485319e7ffc9dd3445cb84ecded258c816bed4336564aca22ff50be794b8b781a02e98b0701b733f932545983fb2ab089a459d66734948b8ec00b925be32ab91ae8d684208b3a0d2ca8c6b67ac71ddfd7b09a28303ff188d9f9685a9655265c5049a7294c6ec3fc292249728b27ba68c3adda52355239cf7f6d6201db54c6af1218f16b06d26251cd91a4ee473e67347757076de457762f12bb3d9324990f4634316d53889eb3a146c7a0b09524c0cfeb97504db7d1be283caf97b6b8f5a8a39bb2c479848d8c1da845a86b1677469f2604b61607092fec687517d804792b085dcc3a4b12cf6796dc0104751930937cd8528f57df80778e443c9720a467f8165974e3a7637d1eac35257d81b6fab607cfab817cab98bf927e1f20ff8f61c7d85b16bc7cf392b2daa75927559e516c126592ec639f191a668c03054fa1cba0c6bbc4984a0e299d8128b2a2cab3cc6b6fc0ef792916b3de9b0ccc419a58b794398d71268eb2360cc9016a07c9a0fe063c2a0bdccfc6c63270c3c6d0ef7b97fe71b9d4e575661d367eb8ba8b17d8559f17a7d8496bde0eb9b1cfdf767350b6588a98178ef73ca060949b442b64bbe8fd73119ff7baa8dc25be5c41d823e609b01a1a934eca8b3cd7240b9b5fc85420b1bad10f8b2620d9128e567a3fe59dcc82d4d699a19cd96b3a4009c52c72a570f69f37a15f328a67d328671a9cf59b29ebda49c65d343167b932d3ba943597a25eda7569cf224b01e513a5b2b7ee489a3f2e18bb02d9bccfa4fcaf2b45defdb078d239e26530cb6d3fce3a43dde953b5b8b1a7ab9e40d79105d6ee6fbed9b294b45cfeadfa1f047687f0b820599b7c25460f3e92a42f8d79f20f24b11cc1c07400f01b8a93b64367565f111acadca15662ffe8247a576366413c5e1763e62d980e9abd2bbfeb8822c4b507fd76037388d58971b67b805c8d43b6e28242688e13f3c9f820e8eb55724cbd98e628d577e96a6792a153210c14829868fc184e0c2f34eb8f375d1276fcfa3b8621895da0319267c8f1874f3659aac930f873a9477ab267efdb13ebe381fa05c9744c2dcc3136226947a9fbd1e1db07d68cec63cb0874b99b73e838b87b6bc88dbb061a16be0a9b51d45075f2a0eed0286393361fb8ea8ee31b46b8d3f023205c14cfe3589e6f8293afafd018aa81ad70de6fdee1227aad2309e439a9b3f4d62356713bb15fc029c14254baff479737d24fc47602938f0d593072a2c8f550428998efa2324cfc0cae98b483a469054b5dd8d012e568232f908860d61c070b05c3de7e426a60d969da4b428305c7815f5ab7328fd0db8a704816bb5ce53c79340bc922fb223af68008386271591f7e35479371d7f17fb75fa857f36aaed70bb470567603db3db3a92de52ceff9caa83dab3c064dee1189718a6d478f10edcf9646d4b4e76f2b6ebcab5b631a1c2e7066fdd73aafbbffdf84ebd120c8370df2f9b87f2da9f869ebc58aee8fa332a90a47f44981ef5da2313ee395933842b07d8db7a4062c9250a65b3d8b74e6f046afbe073ca1ad08fadc85059a9ea5f5c816c833c604fac739680dacb9edc174eb5b71b297afe239430fb3fbfed1c0ddaa4069c20f3ce9353ccac10c4869c968351ee073362fce0be495beaab8ef28d2f1a724dd4297895fa2b331f62a5b2c7ed6e74fbc112a9385ba9b4f0eb1749a58c85eb841385786adc3fdb6d4c02c9e6924a66d0ef0f0102d8cb9eb863b9e4d6a41a5973fe2412167becbaca904f40e155aef5c5fa2648746e8d19851d763bba4c8c51bef167493ac905913eb810da9a2c66e9f2a538eb160b0d827e44fba51771123a69cefe0aa2996be5744b1db265898486c2660757903ce48fb784b22a807992c731e8d63f0e6b2a4ed3bceba74580a8f1d0cad757e8717d64f32affb2d2ac87cf7d2653cbd500559ca25e5d739c4d825a387167d75e0777f28d5aff0dae63ce04529949cb46676251490bd5326ea7b2cc99a22b1cdc4b7154f0d46149b0d8018791d54ab6ba5823d1ff11b184ded63f2a8aebe3df57d350a9474edfdced93131700caa2a7d906ee8c49151c09caeb4cc66bd7a669e307af250e2ec2a175bfeb695756590a10fc32647ec8f5fa610fa109c96f70aea7f569c371682e896e11dc5299f239d2d0f0c17e0163984f912c0c573deb4524593388632dc4b49310f55e2751f9d0c8d357872a984264e7df5adc0b0518f94246a780476fca66ebe69c2f06ae6bef9e801f61ad851b3b9431e91a6178a86b4235d7d428946aa3b3e71aa87330751902b5cd37ce4b1eba643bdb3b8bb6bdfd8eb3768418e1d7b1961c296ee9168d5ef24a71ea0f1625875e89f28553a971605f49429b7fe9628c08c6f01de9f6dc8c3f94a81d1c1f9facbb8e3ef1b67c5c578ee0bb1ed74ec230f125682150098d87236a663b0eee2f53d484ef009a9241c426ac852e03f92c098fc46f29aeb84ae16b1cdfd5d71289f590b9c935922ceeb4479fb83cc4b9503ca0a2baad233b166f79215243b0676e87bc598e06dcf47b396aaf3b1fbaf3124b4260101382e13cf2cccf1358754aeeb03358b9128d46b390570e8db106e0250b0743219c428966eac7ed5c1124dc98e39414fe139b300e8f18eab4c64804763f2b58f2f919921dbd53b42e6746b4eec28a2c41c0de123ef7ec8b2c7da88082f91b36c6a41632a413deb50e0218e2b0820c8af1430e3b8667f946e3fe393e23ad81f9907a0b81cf4239cdf59cc26d0b079e433dc4fff3c338d5d586038bf0d217ea5e316bd72e6eb3494f52296226f9b884ca0d792cb5f3b62254cd2fde65da5135991f88866d2f96dcb4fc92400324da71c606a9c5c606335a0c8e7be27bc6916b7e8280a33dc00d40a2446c932cdfb2d36dc3ea560f3796d2c4b189286cecdb7f58746c80810d8ef0bc01455273c7fe452a2e50f23b0f55fffb391aad381c9d6f84ae83a4a393d104231372bc3c1ecb904e0b145dab78d2ecfb83cda1c14c554cbae0bf028e09117861a4e2f23264e848947dac34ac1383c16701611ed61f207b6833538457daabe258330ff452e7778dae0a5f4d29043e4caf26aeb89d734aab68180ddae8a937428e8c59e8e1f942229be44a197336cbdc922e141a0debb0b1fe868dbdfbfffeeeb0ad2e90f69b2ef0a80594fe88b115e574628cb7f2c5330a6f30d566969d0d8b1a74b72fa60909b96f0dd76b9a614079fee617866009cf9ed3b5bf2e680da6f5cf61b0c48033760d3ba8e6d964af97006c25f80e5bb9e068044062ee8f8fc598f8858508aaecadbe8fb3bb167bcddb59a5139132d8a6f2f394d6b31a7bbe579cb5e98e1eb1c6c4be6867f7a4b1e39ba7711a110fb3cf26a9d5280de7d3d8ece2a38e3cc4d806ebb3cb4fb5fdc454f72ca4dc5dd759bb2468d19192cbeb60c05865b8e3af61d4ed009b42724ad23cde1da16cdfc1d0cb5b7e8a8e3ae69da1775ca14833c1a5599f4fdcfdf33ee5175756af5fa51127ed3c95ccca08a830ddc99ad18b969983a7f6a81334e40aa76a1323c1c277888ccb54aa20eed3c35f5de52dd62035e8eaa9cd6a20baa278499ca4609fec92ddba0ee95bbd6e52b5f39c7bc5de137cbbff4e1d7e62a50a931d54321f0df2ebf7760efe3473133e8a33baaf82150f1f829f3f5f2016b059c10092b8d8384961552e2bd9646cf1ab45b4030bb24501dfe1137b92a83f80cb7ffa31d66eadb541fdfddab9ecc503dc8def37dfba7e7e9e8f4ae0882429c1d240af693d9cb7148d4443b390bf3d22add2b4414042a09990e1c7ef59b6fc466727ec80c744a17d4cc66c91d89a386b8078b7db447860da320e7151429ec424749934b93e28cf599634f1a9070dd8ae49fc86d3eafa71270b9cedf367eda18a243d08694f9efe943096a82af71d7ecd7e000a2e67ff63cf18ced0852521e4efb4d7ad8a27e37193eb12bcc45c10a87d176d4efcbae395d1d08d57dc7233f1ddc84b2135a41099e1467286d6f201b3632a838361a7133da974a8b5970c7f8523eb838842fecce15df469f4eb47db2699199f3884bdf03d4cd7083baaffbd1388ac3b226ffbac53357a7be4b5cf7bcf1e2f98a4f1d8221e2f4e4a6ca5a6784640fd6fd091bee613204b5ee208f2247f89183ebfce345efae40bd3cb59151fe9d08e33eb30c8157f0ab6f8849f03f777f84935d6fee64a56292dd4766ca67c7270c0dcc1ad6bdf86225fe8ad074a2421433c0806b88c0eb37f40caaf76185435c3b9e7d3b8677d6068920bd9d9b1226abe7733791209bee8220e6ca0163cbb0a0923694abf534902a6e464f3f6c8f3494a17bdf61326f4eb30fcbf0c9259edaa2aa66d3a80b0e42d236760a6bb6478acbd6c97feba48800b2a08493df0d2c03d5f935696d39adff38e46d49798214287ce8c33566577d0ad0905cae8b8e5c15e468d634db028e0ab179bd0803797f87a237b9da0e38999b149c4e4d7e37a15fcb9b009b153313e09dfabbc814be061f9e24e1d3abed83701cf4bc07ec394c518425b477757665eecd1529b4903d4b459df6214078f776816f8dc903f7c3176fb9f20a8e0b98f9df491fd4bc955b04a43bd84d27545d49b62e42dd13f76b1b49edf9c26b8e52255f6ce670baad62da9018e0407e6eae1b12bbd0b5380bd4f0775153058570476bca24366db90209032a5fcf8e7f43ca887ac60255ccf0d5f3b2e979ea9f7438ee641798d106270f7db76292efa0b7b064b508db50ad92313c3b1438c09788627eac9f16a92203c7e125fa9aabf22bf3572b16556b8b195e6f1893caf67f56a8dfb981ba23106a8b069b93114479a1a531105b884df7add864d0a1bc3c36649ca7747ecb566d5c03c842b72e293c198e332dd17914025f832c7fcdaf677cc62bd2e5600a925ae5bb81232e4c55143757fa4bb42e2bf2ff5fec39004874492c06066def572656dbb3fdd97f4e2741e26e3b9b13fc3c05581f6dfdbb8f05b46ad3da88b03ae8f9b09ac39b9c15d555992c4c6e33ca1b60796124ef4c0d9d459641b4cbb48186831d7048931953eb658eb181e01f5f8da675c631e92d3408b3ffb167da14019b73e2b18212c7111bc0ed165b3735d163ab376a9fcdaf5698abf1c188f758a8dcf5e713a251fc1e33132a975ffbd6fad0d2d833ab50afd9d9d4f37030937f989d6d23f2515bbfa285f114568da41e78bf8d452513a0e276acf332e2b20a26459a3029d9ce3e916b83feb198e9141291bc25b0082c4a7690ec527e0bbea3394abf500f34e219a5bd51ce76a419955b248d91ae1a7371bc4a510bdf40ba288ec1b33f9f84c825ac5d3bd50eae47ed21c8101d476d9b0f22128532a38243b3bc615970c2b0535147a89366ff00ef7f6decb9a01b1f29122f016426d8a69cfd2742604f2ceb643efb03fbbbceb3ce494ff89135720263847b48c7ee145fdce32ba516401a7471be5d58cbdeab8a4c0a5f35daa787b4c3e12b8d1acc3be058164927baffb584951d62e3395cc1a961fa02a882dc7f7e83093ccb9cbfe90e1e5a01ab2706ef6c5c8cc2d05c58c29a536ee080eb63791bd7a1770d3b9aa8ec7e8538ccfd84744ff2b1355091170996ea005c7ef1861b9481e4444395fc975be83eab96ca11dd61a138069042985de190e6a0fdf801e17f203c5673fb1c5242038e5c40477e57c54e973ee6223b575cd0c9536ef46e343decc61536cfb3da0e3050b77f4a23ba9a1eb03a118a6df4e4f7176bd8d2c960fa45f02b03fd3f00b6b9100cd8411e5a60d44fe032a4d90ea7e034a4e42e971d559a4240a2196b886a83a45c5dad4e0745203f6e5f190f56bd64a088e1c89f2531d2c5bd446d0d973826df4d35ee49f05a4343654fdb5536f6691b7aaab49f27d79153b0b665ea25aebc08a0476a2ad8cba789e016fb1261b956387423be67cad7cc29e7d700466bdec4593e87892380158120812f526b2af471921ba7d13eab60b91cddee407a45066146324bd7c7a260742b75bd0483ea295d103129c53ce873e87d66dad9b36b2eed228cf810b9348b1a9c99a3a7b2bd44d3162161d3e986cce933d635d8dfdada5d9e680bad5254326e6ae30bf17b3bda978103d9539bcf7ed71e46e03574c2c442c422e602cb2d4fe0b99b8a81a697de13cf9bef25113fbf9cd783e39041a67e839ef43467b616dc84fefc9bb0eafac857bab6bb025045368112ef1e717f9879ae5d68f5b0613ef938a3336b91f0b9725f4599d16f3eabb4d2d648373405763120cf13caeab5772ed650d6255294cb6b511367a7ffa9205bd995e0e306d79c8d6d407839364a1a6dd061b4e80455958993d6504bc749704fb33d2db85c6a3f24db515b32a133d16183d62cba4fba79b746663bd1a8d5574f929e55ea06156be6a54e63e210b283b23de5c9581068621acda8be727cae57454e2cb026212f10cbd6782cb6384021ed3d6474238157168d4141a5367f97aae869db8de61236c9c638422d2fb5a71088929f753f06e70acd1fbfbe1d7fa4eea0a5da3de63110707f036ff3e77d87e28e1adc55e491044ca47344ead36291c9d4b58ee76d566b03117c57c5f7a285e14a2bedb062f4dd4a3444d58da214ca2af1e13935feac1457fdd40463076c25a2816753a458e73fe16cb0116a2cb293ac231d9330bbe6a5fa4e02323f20e3157bc5c90a13f8de9ec74117f89ef11f240fd51f7483ee0ca463d2c505bf103383baecb494683d8ca48ce5b4c7781e1738c9a0463aeb0f4680d3f73bf0e575c5f67c213c01eb9650ac6646d7711a4ac30640db62693876188a6ee8b63c3efe7a369f63749b7e3a39c5e8a4bc079ed31c35689faac010a8e615a05145b627f80352a621dd1a66666456f36391c3e9415f5cca5acbf020308a281f37ad473251dd281f91f53175eab21f17e633eb55334606720ad811e343cc6539336ef789c4b0c824f22bc050629f54b95a5484a3b5d65590b4a47916e558fd7e935d13e244604f06170047a2e7bd4436efd3fe8b345ce48f65ff970982d164f4d8450d57a0f1db68553d3bfe239544dc5131299333797709024da0f50d4e79f9da602570aa86c675bb56f02c6ce64614989a7cbc2fdadf8b85cba9447f87c9626d6c951fa820425dff64b443ca2b721a537142cd43135aeafce075c1b05c2338f071d5024a64bc61759abdad418a655427198ad36580bffa25067e23e255e84955dd2479cd9a4672bf2aa7550daa15e3d30bfca1036366bc0c9a25d13f0c87bb3ee429ac0083078c72d91dadee766da4c91336c0754a53353cdeb2cf983709e78b884644119b2b3b4f5de1d8137df3d6866756e73b2b7a7febb7f46b3738acc62a6e5168a56c9f6e83342b60e71784d3fc587fe9668fef39baed79db7a62b494c4dd09fba06e3453ee521714f6dc5bd9ff3a0e81bd542179bafc0d77d9a40069a1d906046c2ad4721529f12852704ea56ca68aa78484af1f9935f9957322efa7e544445b2fec27ba6069c889a91d8669fcdb1a22275f5a89be96513afbc96efc969612da9c5b44a393b0a7fb16d5bd0da8e9d22abe2381696aae311b45a27983d816adb7a31320144be303a601082a9831df26ef160a137fc33d64c958c0f3b8711fd3856f936986916c902979cdb7f74cf8a58b3826f5de1fa47b6148dfb6e4defaae802ad41f7b431290d10186c12fa666f21b6ef6a682d5f9b06ed1d558d056b9f4fcfb9ee247132e32a2c3ba29df583353829b9b8a98f5229ca2581796de71251f6fb9970d3e6ec103eb1cd5f1cd75be46ff6d92137b62cab0eb03afec46064f702a5943c8bff43b316ca9d5be82191fe03c20c4be333d7c735e7cb023a9f8edf20a9c3259876774734cbad9e3991df013fa12b34f44eb6c9cffc4822128255013ab5056f0870383558e517c15546dd0ebf5e33ae8a92e5491ffa7adb7c434f79434dee0b691a1dd36c40d45c50660139435c2ff7bb028bd4b086ac07f5adb684781a38fe24125127e33c613ab0d7dfcd592f840fff3858afb2fa9a02f5e0d7984846942f29c445d18e9253f96aa3ef3ff8e518d3087013f87b7095e2673170ea17a9caa236087fa1c40b4d0f253fd8e704488707dc1183100159412adbd7afb3febaabe043ae11af9422f81fa07bd6b5d7d07009e3bd07fc47cc4853468f64b3a7d4e63c4aa62766b6aaa64bb922fee82b39b6a960e8756abe88e9d7d2a89726aec137212b8d1a746c069f5c2eaf0bd4a57d1269654a0fe74c87e551cd81045f68939e5a57e22cdbadf31ba341b0c44df509ad4c4c9004c143d2b24d017607d59a3079c6628a34b1897204432b245a5134858745f9e58e035dd873e017ed0dad21701edfa36f63d7e8846a136c74ebe18a2b7c5d0f6b7cc5c12e423f138bc9d5dbf91f1bb09948886f2ec2b3abdca3e825358147ac6671190064b809e023fdb55348a236c980dc24b664041bcaa1a8263432487754454dbbda0bbc79c985dafa3e34ee46d6a50786539231bbe75a0fa8d8ee0cf36965a43932fa9ffd543ae473c06e70ac550e6370deb9a78ea2149174d310718a00fc7429157846b893afccad37c80ae66bf606ef8c69759af945bae56bc3b9befc0f2ecc29e84cb0348ecb12d8c77678ed23d6ecb01815e65e7ff00c730cbe55c4b3c9ad1038971fc3e6228996f1bcc7a274e9fbee5f911fb1c826c61443acda32643965ef2f9a7a5ee235f658597dd2fea80b3620b084fde58a9dfb209b9726cf0427832b9ed88709999c4faddf1c7e2281dfeaa5a46910550690dde84de52ed3996ca480b43bd3584f1a888f27728901f5482b94d607eefd6fe2c0efe1e10ea3344e78929133c0e1af017731bca7b81092b2672a5854a2141ae9c993cc6c9905a1fde59eab7ba1e5944a57b21b0a463f5804b61d357278dad9e276bcf3e192e8f1899e27cd2df44e383655c1d9e63d4fb5855b66e8484ca730b7c0ec3010a59b38fa8b70519d6ced8ef94cafc13905103e804188150c0935cca85e53b389d739f9fc74763c63aed2172bea975c87758feb4ff619e15a074b1f74b6daab765901de94183c1a9b3eceaa3d12c21e53b75b71f524a221495490c4b366d781ad95ba0113db17007f88db8b8811226dbba43931a2fc79dec53181a20b1f516770f626afc761bb2ebe6ab232b51a763efcf42cfc9f8677da84db2583ac0e2c4905cf5e06758d5e5c5ce8f0dcf347bfb19c7be3d0d1009412b0b934e1da6f4dc9264a5a1467ef5f371cdcaa1536253d0e592cbc1ed3bb36ff53b9b7cf2e5a1cf499a871d7b27e81cab3bfbce1061cb7e5d69535fddae4d3d26de35eaa3208cbcde8270e9b54495fb876824c25fa7cf72eec55afd1df6661dd24509d6cf2236c05e51769ce1af3a03a5c1fe9c849e03e79c5369a664ed2f584c1f4d1ed833d701e38e0a4ac7b866b5c493956fa78f59d3c1cbabf02f8551eea94d13551a012fd2f68c3ee3cf20244d65db19c3ed15e2ba402b280769f8ffb67b1d6149f76b74120a63ef6b8643a671b4a5616b532175bc1e625702af09474a3432a4dce04d9916e52f1a79cd8c04a01c81b2bb66a9f9e07bf18be10cb27c6990c961d16b6c2dc88cc5edb337b9e5755113e588d687fc8e15d3a3ff6e942d37f6e2537b8fd774e348c6260b9e84a118eb14c3d110c4172cf3d9b5aede594065cca4c376744d01a1d95ec4f0edf3b9019489c0c70085f1b10cdf9c63206fac8e7264ea02a9cdafcb12e432b42c6b9e21ba8df37ccaaf1e8e4ff49eb28db58fc268492273413a2bac5724f510b4c882e983b6979d69487ce9d92de0d490341d9fa1f0e246a68c24b051187fbd7ce96234f0340104fb91ecf6225e643da8b2cca83d22a97ecf4d351ff82bcc1661c15ed131a025c349f9fffd6f5b75b45cc4eb7f72aed71510c7566de42002d2157e617b064d381461d515bc7143742e6f8cbdb720b0f41e4b635f1e03db7b497dbcc36ea1c18ff91567b1ed1fd1b5a9252cc0dfb99777dd70841137832b7e95caa30a3b7ba117307ed9346baf38af28385f66f5c85df0f43772382f7e4bbcc8670959ad7fe62d63c030e047d19c3b51fa18d9978fd204d6401b07964c7956ba2891d0d7170a8666fa371afd5dea6f510017fa29f19720fa96b6f04969983ac0fc9e853361c2a8eed15cd6762e6f8296c4cfbaa6bae85929b22fe3c2973adf77ef4121494e22f65a49da3c6816644ebd2def52d55cf3129c1710bc3aed13f980fc4a33014cc403cc6324dff33fcb0255c98077d95d469656307356fa25f794a61c38b36899e402296b727ac2e8be9c3046999beb06388b1ff953c292ed706454c95e1edefe0aa9af9cb9a1c3bbca995cdf29d1269033779da8955c6f7e89221a107b41c76703e27925f47f56207955c23eda9c8c12a071b42f1b0b0da76b15d5ad4d0fdb90f3cae087fd43f3d0951ebd501b16599c5399987d514e2b0c27575696a5830dceef22a5fb18a53833937536d58c90d28cf29c2d4b9f4640f72d52d7cf09cf7ecf9e0a9d1f525a2c932fbceb5244fcae97c3af8fbfaa0121ad31442f3d8dd78b02b0966e8ea6d6437d8dfc739717053feabb2df2817928c18dd6df617129da2aed6b553ce80e30a5aa950b404864bc47fd5cf1779be179ddff4f8e3abc71f5ae1a40cf1846a5bd7a3a908f0f1c3284abe5aa2e414abae49a6b2c11ed726318b9f63f7e2b89d22ffe2a9a740eb447d07394e795c86ad3e9aef1f3ccdd69f2924d6eaf3b594a888f24705d51e96fdf06261ad9f05dac8405cce665ca91c4ac595d71fadc52645701024dbcf7a6467862493cfc46cc7b4a082f3a4179f91c0eae8efdca2ead5118cb17c4f4ab171cccc85eb60811ce51606fd5e379868838fc0393db5f39b375e1cf5b51a83c23d73b8b5748c69b11f0511e42c857710fada5231b72ebcda540f0f28b33592d8a9ac410136d7b62e3d3f6b702b12f1a315e5be934b7561027e0ad0fae5d3f52bec0db56f76753c1b783851586b6a8a4c60022cc594232a17d85951066572ee927beacf779057c9ccdb7b34c4a5718b80f014032bf2f411034c053403f40a71100424c2e11803b21e8189db28347f36a2044ce3d079261df92a75e453deb22a8f48ac36263f50c34fbc2c94fc9fee38e9ff2a686c0a8ba2a8368ddcc42ee74cd544a55a31355e1ee8b417276ca2a1c528fdcdc5d5a071e40f59dd15998e01524a6e203d8f1bf4877172f4b13751d7c02fe142ef2c8af697403dc25b5e1ffaf1de174e6ebd9a87274f7c9b3e619b7b2c6c4f1a28b1d5cdfc444085666d448135650242d988feb7cbce79ce1ce6c8e0827715e81f95a40719b3ae6b089059208e223672296f296f3333237d72bc4b73cd3d693aa7c3cd889cb007804da446933f0978c2cb3b9ea197d86a0373ac3f3340fb6c06c67cf2a517af48a578793c69d2b8afa7901cf51a8fc87476f89f62d67700cbdde56f890e2e07705d65f9335c4c6632c58d3eba6139d64abfd88c98c71e8ca95a7fb74023b69dd944c829d7be2e4c4531d6928ee128fb5bb2417baf6c4771be28086ce99efdd39edc4fea21a7b21f9612a81ea145d2a7aa2902d59660504044189cb5efc661e14d5db452eb1578f200c3dc2c50f705be1a770048d37a1e749fa508a269ed094010b2ae468addd2b00d09799d63e117115166b293a4c0296f4b5142765fc37c4cbea73146f51fa1a6fc6bdff4cafed9f07da36f596e90464689b405cc90f22338600c2802c6c31cc36cd4d822e4e57d8399e3c5752d88ccd7e8c25851f07885029bc362eedaf2513556e424412074c0119e7039399f46d750f9ca6afc840d698bd44f9f751a3197fcd3add4654f486ea6854f26c9013c012bc149020d7873e5ea1dac001ea7091f988427e49f474293db3778dcf5452f76bf4d255dd3a9430309d90d128c12e74aaf796a15b6532f70a6b5978f50fec4d126d6017a801a783579f1a53e3b050e627df041db18715b92a99525a22f4d68d128e8993a1b9e54670a9f516cc6ef2ff7c3b568a6e06c8fe449c3bf4775af6b510c0fd0442398e1e0a4976c4be0b534316f5253b97e319201261eb366f804719147351fd63adb7d43e2fbd8f7845886779f9946afdc057ff96c0590f61f66b8b40ff0a42675922f037ab152cabf3052ba113b573f94b6d02f8957494a71779c9a1d597d2c35281139f414311e20f8427fd3c8f8b511daabb6bacdd8b9ce11a6b0416542ee15442f5db5816bd8ef16b29e1e5ba591ea86bf289446454b4bb229408a4d9d35319a2e6a7cc70b6871a06604c735e3585c98741117a76f7c678e63a1a26ac55e91a091bc0ce246707faf14a23ca9988ae6d498a34d68103de2a35d57644a45fad5bb624e0eab70f678c5b4519cb65b2b262a08cc78b09a2cfbdbc4cafa20b932c2fe81cbc2dc04ba857399fbc663c5def243125c4a6c5f60fdcf51d71667ebe53f4c0f43eb8beb66e6adfe0189ed45c0fa4d360a9983a33b23684a5442614346012059053acfa3357c6536da7540eb993dc7a2df4f77a708c57a112b3413d80463f37fbd4903c8878bc9169dbe3ab4067e5c5dd2a9b8c60004fa7700964a7e319eb491a11d64b7efd0c8d3f5fcd79f7dd6524222885184562be9b573950b96974296ee9dc099b998a12cfb080ccbe1a11496c51aa5afd12dd664c4c54d5c5bf5adc6891c4b09512cabf1920685932a645e7459a3c7feaa8bb0bbc076ce79eaecb7849bb11620b6476922c2747080567d80829099aace7558a6d132aeba2953161c35e486501fef0e9b270ad6f7e401c9b360102ea8ce6db56f69a74c3e547d818d7318c199ae086a64ce7e7d8508ad507036a9f835af3743787bd62d9785e2b5ffce47df7261b13d4a2a8d133271b08e2da0431a7e967af47529355c7fdc9ad5d208fb12a435ec8550143c2317f4ed32514d909a3b56017f83e955224fa350a715f524614bc3329aa4de1b981b592a04306f15f166a939639ab64eec93bed2e9af73e067e452957894636416812147f03179e0747ee594a52e85e70765dc26150f01fbc9d5c803d6f308f131361a558d228f1434547cd8a010d2297ec5c7fcc6692447c45d29d83ccb6d9959a8dedbc94348d34ecf5d3c321637fbd20b450c80c0a3c0846b2f4e267905aae7d8d2c5d56f8715667384c0904cd61e8ddb0f1cf27d8b02b0726f23ed93d70dd575170f19092bd63ed1575360ffb8b7407e3d992f996887747cab2aab2de94943c2d10939f5965ac1e7fc3c7213223309004ca540eafe19ae950057a11e9180f01206cac6c8edd2ad61b2578a25c83ff11ec470cd5472c648675a4eafa55085056466f98434288ed129f1c49c2d32ffba0d5e34a4121665771dee0777a82d20769aa0e6cd48494469f1575c7483f8ef67df1f4d493ed53d1203848821c8d83608d386971a3d111d4594be94f6d447486524b72413cd0d7f0207939aa19b3a7eed8ab31a580c8b2db06b4d8ab99ebcade2a9ced8c8e5b61a31b1a24da1b454964c1a71bdd708846a03e39b87ac8cfe5b2706ccd40507766885f199a2302f7ed346f23f7cc9683e2e71af5bfd5330b5dec369b7eac32acc56abc09f8dc9d1b6434bee7c1986a7bec4efc20640fb2c3c7183c080de6e8f7aa47467b7ad570d700010060f1a4e379c155f4eb935afc00418a0ed5ac626939e16633a513d6c8512b13d913141ed5e657883be0623ba711217c8a3804b64ec6995f0b3c2a8278d4a54cb13996d43b981700415bd34bea3486727a986edb1a61f15e4a94b5b1c3861b11af1d10162003de0f5aa1352595d38fd2dcf9813ff84071280c158c19489dc5dd39c657f3d06b098018029c9098020a52560933e8b76ce120cc3418cbd2c36aff0577e6f2b331fb50a778281276db5350fe477ba0d8859ab4661451e66e6bb4458b7dc05ac6165981d386f8cb7d75dd0ad3bc7d7ec9b23e04cde2f97e380b6beb557d2b33560f09cbead2333d53ae52ef31df8e2b3a6331ceffd146b698dff3789b903117dd3106c3b6f832f648c68ac461c35eacbf4356db30ca4a8905004ec22f0decd811c711e6f024acd19a6ce4f3085941c7e822abeb9e3cd7d906d3a068d13a31e673e83802b6cb4935c51351b19e5bcbbfa7f89fcabe45c14e81b0f3c8e6eab2b431d33aaf20767ee77e134484295ad0fab7f70408f04f5a37621557c795025c2c06cd7107332c7fa9d534cce9bd72d9bd96169493e128e17326c6724c29340acd28ff77d5236b949c7723dbced55851df1a9446e147aec7c193aaa2352eade8e983567491b8a6c4c4fec2188af572d82367f5396d9aa6bc750b26bab52c3458098fa8e87e753563e67fbda0e9f8bb18b2042277f6117a87bd894fe8780d5754ee13e02a24fbe66a1fe8f97912b19a882915c87b83aa1369324fd7c493363464478493392a808b76215462c0498d3e820d0a38eee62982da051be06f728a97e6621cac03a3d2b3046bc1647827c24eef2d7c8bfb4e430012c15540bedcccf8d6eebcd5d4721c70801cb882e9a7679db0c1d068396f28cd86a62b55c747cf2c2f70dbfbbb5bbf813934ce200d8c42dce5ca3892e41e27cb178adf919f9253e9d5580b046472a2afa04150ae13657f22b27d508c329779ea07039a541ab59af0d393648e45fb5d364eeba997c2898dbdf91f037e16dce10b4aa6d0462fe035b4ca10f0f9fc550995a18e669f29ab45955eeb6d2413436959bc15fcf7e12f6d138d2433f671273400c97a0b9aa9e009a2d1546c5781ceabe273481c5718922369710e2282cb827607389a82077e0ae00a4f4bf0e408d88e33928a6d7fa9d99906f01f29d689f943b9f7984f99196c21524d771b278fec9939c099769d14b4e3340fe2001fbd2ed83fd69dadf00b24f00d821f682b0d9b9592c159259cf3afe88c80c1ca33d317cf39e5be4995c97eef5d24336bb035b5803d32f6546856b3436c0796e0a4564fb97b588aa015f63a07d8804efc8fe08c927181ace33eaafe86eefd236f594a02977075f83a73fce3b3b3157d43275452b3cf6c42efd3bed67c559c853aa653a149a852daf7ffd6353180d79ca3e20cb2ba96c7adeffbc6f8f119b7556fbf8ec6e983dc00cd138ab01b96911ac11d202e3f7b7adbafdc9c949aa5697f94d89fc4dad1cea07ff692f60a08fd91829c8ffbbfec1a207d5ffde15ea56e51828de868b7fa6fd10c47faab58551caa3168e32031bca684047aba19628ffa0b6d650c6669089c3f01cef06a0e403bc4640d01b37c3a9128be55f8e5431f4784ebcfa678e95b9bcf6ebbaf46276a7a202685245bde46050ad6d5827bd1cebf25a65dbde0611177e16bcac7a02ab15645ec3a314bab6e1db7b6c4e53d9ef0987db06e833512278d6ac8f5d87d099ac3b938875239f4a128bfb38248ea5f1069491b1292008c3c01c403d9f3883fabefbfe9d5adcc1b9ef0f1e90743ec171092d72bfd577cbf9465a90a734524e67ad08af65bfc6618e3a19566964a4fb3e0e2d40b927c8ec5b8b22c9f9a7880431e853e3886f07f3640ba8fd280bf6fd8e303b17c67f7b08de1045938cbc8e78c612d85d5145d21dc7fe3eea84cd2dcfdc092fc21869bfe3f16d69371ca0019b2845ba25eaccc56f8dfe98ad65263eafdbfc00585a74fd00ae32e594bf5da967fa9c9aee34653c3526f48a154cd6daed550803c292c9469131fd2ec72811d9d9dfae48c06e0483de6228f850ca0b95127ad50213ed331fafa4dbe4eb42424f8440b2c591a9815d3e18629224d99fa363ec8f3556cc0298c894845004250e0b8c4f70a2aca0cc692a3929214e4efc0918b6480515e0e26de131520cd8ef5da33a695f9aad98112408738d00d273a178fb9e4cded174dc2b3f1f37636ad1b6bb554f9d7307574ba2d883ae34979d55c259f99fa8ce9d09306cc4f5c722ab85e6ce31c857c86e3689527e54cebbb1ca33930a453e1bd2b6e407129443da3fb5adcb89ae35d7267428e54f2f7c16cbc224f5e434b65b24d2d833072625410bcb269000b73cc161deecf834dcec7bf1eed058f2332bd7040e8ce4987d1c924b304105774f9f06ca5b97235c235b4c2d69ad3d1a8ac80b9fd5d019a56858b947eb7c5191ac71c2b9e2df611c71acb3d2feb3fbdc39a8c1446470e884abd61054454c48976361e6247ad989d9c901205ce2af8bec3848b9697476cffe95d8057de859f07c7fd76584af93b052705a4f21a06dbe0072e554c9b9d44ea83fa81ec82ac9ab12febc92c03fa0cd1b4c3e956b1712463af37a73ab8a7fa14bc775f65fb442fec951c4c540eb9f02c3a6778a33966b117299069863d5ac524a0af093ad2709a9747d99257d961153b0bb6276726dfd42c872bd6c7c7843db80d068581f971d15d2621405d67040f68c53b8831665f454be61c4738338da704957e748e608eebc4ff85df1f1fc7543fa7f927a71ba2275e8c38bce045f08d26ed72ebd32db28da0c6d736c496606c01a7de41da01da7561a9410cbe0efc2c3afdd23170aadc70c1147e5b281477182b5e52743c9ce60a09aa09c3eaf5373139726dfb34814d285da25e43d9afa685f92e74f540a5638573563b879a6f176bdcb795fc171b1a070526a370edec148ac844a433c9a2b0ad4cf6b5b0464471f98bee3d977fd2d0e434136390a0e50fec574d472c131ebc23256fcc71fec683cf7b2b739ac3e42d76bde7920a05c07aae68665a26b5e745d6f82f930de76122a1f7681260f09c832db61e42d326bdb312ae05ea73061aa46095b8fa10f190b147dd3348224a32cc05f3ca9335de2c52a9a36907577487a6614f4412d5767286c3a55a3ca10505735925a7b8fd23ea8f944c55ddd93c5a34841c5f14fa46fa0828edc0084ec1a5d0c7315cd33c63d6e7bbd81ceb5bd6dfd6ec45181c0bc4e13140efb09aaf4c5328660886b1ffd4b7aea72cbbbbd5942ce72b469d4b4d0783d155b5d5ca8ea607b321fc6b3a1c7daf3b00d320cbaca7cc7cd5f03c705f2bfd838a77b090996d10f3411785d25c2cf6fb2de1a17cf329b68e97c6b24bb6a66ea2453ac7dd670ce7e987235fc18cfbc5f4f204685754833f0e06515c7e28f10f3fb1e976f490701a4190b6e62c0c9fee462f29a16060d06193e8cc887fe49151b2f4b36eb6b55d10923126e85e6f391e20bb3b131c310296df37e04290d47cf2be60d25e6c140987fbbb7d71ef81ce45cb1291904c3bc6620f8aa10f2fcb5c2de34a85c82ce6dd4996a668070c8e336f4ca1a01c7f54fe913e0c522de8cf845d1dba040f4c237b2ffeae8c78c9557d778ae3ea16fc83caef2b12955462dc5f7e174613f83ee0c9bcb7d7ba5c6cb76631858b7523ea721648abd6c57d1e4aae341cba10309e63e04a20ad4b3698a5650e41f821df4054efa55e95174fdd08eb792dcbc16417143b9e2c14acc1516653334cabb028d9601edd09ba7bc1c0c24f339415a0a3714540137a8014ee1d6fa0fbc8ce7b61d53251ac710126c47a267cc5c47f91ef977c1dbafe4aa0e751bfa7f74be9963622ec399a8c25796e5e9d9123128d9ab45ff83a0d549b1ea867113f70f48023ad6c7bf8b36c88e98bf50d72170b0505a36d1c273557bfec831df74a7e93e8e180d9509226e039c745caa47ae959be2fcef30e58e040d9ae9b2813c1be1e22ebb9ed7006806b2797013fab4844d5155b3c84fc6f20259c604d5813012ba4b3708e478df5b6a46bf632d111959d3ea97412ee3e8394e7a8206df6d9b74ca2d520c0d021ad7c8e29de5c9cfd14e26010f2c24ab6baecef9a1eff5169ca8a36159dc4b9c2f82a1a7d4dcb75501fe2e54f269d0377cef90fc06127b6b7ba89349a09653486ad46490b1e0fffcfb1331cc1ec18353176d50ed1d30d8c601d8f484f19ca32ee10efbca997c6040ce06a346b888a03f18e0b083b67574908b447d2084ae02eb9a3abcca5e9cb6368e21cd0f9739bf9f2fbe520aca408eae3e89870f61aeb379a8e97caf9bc73b4470e5410e33859c01ba5523ad4398873280fa3c2a79e9cb25383e95d6b231a751b0d335aa86ef0faa3e66ad3a3df6e2b984675b4953be54c85481bd92a724600a0229eabe74788a60ea4ddb50ca6242df2fbf06712e8206cfdbe8bbbec8bebfc4b0aad8e11d10ec95ad5323bf25355694dc25ab308fef5c97b53845581ffa8cbdd7e4c2aedd24a9a1479abd8976b4d606321ef6bc32b25f027cc8110d222a15229a8dac0b636a47f39d7859b6957fd0699a7edb4da2e490079c678b624ead3f9041a5b43fbca52c9046bccc22a8f00813d3a16e28ac3c5d946376b21c8f95f2a3fe43abecdea2acaa476d786a5c14583a96ab82a5c6dfa3d6ea8401d729c57d2a1ce17f3e2583a8dcd0f32bfe698f925f121855c1455fb94e6dbeb33b9f9edc755f980640243c894b607ab675d2f8ab58118ef3099f87f5a52ecd76fca9ac1af7f2b85f908669fcf890b5e223a8c8b316034a8c37f8feaf4e6731173faacc3da06b4e8a14813c9106c8992f7842c556c83d3a52ccd000c6a5dc3bd1e334e4f2bd99bbcadaabe3bc06acaffc77aa183489a3c699515b3be222e5f83d8134429479d7183560c062ec28d9ffa055a2574b4baf660111602fca3fc0a13b890747b02a37b541dceeea8eca5ee8918e6bbbef212b7ec44caef0180078c07da7d339e2bb4d9166848faa558c11e1e4703f20eff8687f04aebba5d6a2be3101bf007bddf60df5b13b19c18ca0323f7031755f5b971c263881d65b2abf6c240aa17522464ee28f370a02a576cbb4fd0f28042ebee6665b52fe2a633b928ea0edf1fdfaec7d280311246c59b1dbd3c2e03dcfdc625fb9b6290ead02732c1803432f6d8bf5c71b428160d3574c2f230d7d66bf257bb493b440b4719d38045e4c23cd53aef11b69ad3c76ba823ff61e4c0a90ac7da7b01121ef4ab22165c7ec579a9a1019681859574e019bb5d68fb6a1a8b7809a9fd2ca28a8cef0e5e32e72ae98d9c28e621fde37526b03b9f2e5719ba0e21a3db3bdbc7833509d3dcd24ef134adec8d83ba476285b761bd5376a1668df7b7a2aec54cf0b3ef54282683a1c40cf0f311c7941b07c4db9ff9220ce5cd26a096538aa1e880c8b5623899de86b6c9e9d4602ad381005797e71165ac68d73cec0701bb718ba26139a6b68bab4e7eba38a017d73df942499142325810172d977febdd85aa6e25c13a738d6500274871b53118db32ece9a0bf90d3ef31714337982d84b51e9c18d302bcf0331f8c1dc49e622fcbbc52060173afc0da449e4d1c991af42668b69279459d117c9871f24918cbcb58fe6882d3f41ba20aa644088a1850f2658c99d8e435bdd00e038268e1250b74997b8f3c97f2ddf672c0097b6fc61e73f3ab5f9c899f87b339968a88401e94a1347758ce8052598b17140e929c71a5a6250252d3f89351445a4fab34aef5c4df32bb2300c051d68d1d5df4510710e1484f8b3313ede980f218a73fd70bd5d66f01869046bb9bd822216877cd0cc431a9dec427c311bbb277c8d79260bdb96cf1e675823942b800142ddaba2062c23dd9a2bf7492aa342452dbe6770de3b5218683e2c4ed70da5a79d7c8b1eb40db2ebbc2a138fc97773df02605a755ee35e66a73ac2fcc6a46fdef9d6ac5151fb12e5e5c06ce34ff370c1378db8841ad4c3545e63fb1d4094d0e36a266b44100ed3551e40cf109c7dc3708dea332b1891cef75e4b7b0f602381043007070d83e6a37823086b41671db95504567e662e43284e545f0d9b892bc363aac717c8d1628ffa53b8b55df6db56e9a3926d66b9fb06012e9df3b86d99cdbcff9dadd0a4726288afeb785844ccd67ab8935e825309566bd12b2580c106c501aa82a838850de2aba9532a0b0da9058f40cd0c95fccea98631aacd99cc788b234d23f3282c6f50de70da569364a68f295a4ed0e169d8027793858aa5829a21d7f8f95b39881554373b2e7c1a766245f577fe737ba35e1b35768d22d9202fac6d6e4bd1566c9b2dfded6c7522733a901e73300441f3acb82c3b3edb8a80aa1c45f2bfc61553add3815269ef94c43e65ca0ed5d9eeb12f8a62e1f70aba5757c07c9f2ca034c1f0e4b3ffc09cbad38523d89e87c6e19082b202ce543c215eaee8452b9eb5caf80f6fac54848d5d85ea12f90768dfeeb6a50cf3dd949a1199df2e6722743bf69ae563d11307ac1231a55f5cbbc38853e37dfeeaf1d4a3cb44b1537ed5c7a44318bfdae6f4c1a5a85951b38ef1b360172c5b10d24e0f5ed1d961af37fde8b01511c6f53edf3508a604ded7f8c989dcff23307979a0de85f265fb8e5df4ebfd90a0db73ece2cbb1526fbeedf4cacb172342dc56e1680216399ed352af897b5f01bcd0c500e18d8f0ae511f7e994e180f46392f696fdd16b8c9e13a2d92a48c40cce1dbef8312a84247aeda2f0b2e5ee33dbfe222d06d7cec643ae89250eca96563cd59caf57726dd7e95b16f8047bc8a12e4f768dc84c6811666fa3fd68fc1539789e6c9e15659d63cd0706b26ca9eb3284ecb7c45436c3b01dc036b555f8f25f7be633309c6c1265dec6661c53de683dc2f8b9af8c0a52da832fa16266bed825a38fa63043324156dbb427f4a5354e606c9b5ee7047c1ef87bfa9abe704c72703a666098b12a21c2599cc8025ebd1c833f2c73125683cd587c681c7d7a3d86375cd36d8bbcfe1536641b3fbc9f19e45ca63f8292e6f0e2d46ceb45210eff7b3f7c93ea8fd58ce5d3461085398340b80ae4563d5f172b921c72b3573176eae9435eccad6138d2b096adde1047b8ab6391ea99b1cde0c8a4501d9e4e0c31a2c0585d724a997361e1c72615240539aa3d7b840fd2eb0bf3a84e3e2cf017d3161238d94b1f8b723213eedd2970a97a5229b3b9bb262ecc7fd03dbf1b25d747c9f663d9315abbb401aa349d9b3fc7e46fec4b28b1d4da46ac9f155071c73ce8c4fdaf95429149f9780ce978d84bf5e2a71329818184594a439311370f40d04f4328f7f93cdc7c42841dd6be945ff18d456750b93700c5f924571c946ad54599f32eb705d66e3770b6d5b3f5d14374071c2e5d9bfb1bb589f540ad20b02df5154a4dedd9bd8c1bb9a7ab02b25cc0fa4dc8e12b649e275f72a0bcf329beb797bf9f4681094734da3641b6dcd5c594a3cd998d4cbc834222879d0a28c506107cce99fd8777de2b609a75048862a05a6ebedbf604ad7866b809a6d50597408eba9e6cf67de124344db04f22ca1ccfa366b0a7acac70b6ad1f01f9ed303d7ac43fd2b3784d843c9a667dec26367348297bbc7050cb37f500e15aca2fd1d085306b1cdddd27b40339f8edb2ed5b487d604bdbdf3d23c437a07ffef27331a0af40fa5b2c413f13d04169b9f48ba6d2d1e5c30c20b9f7725573afef466737843caaa4da0f50004ef5bf1ae845614e7b81ca3a0e2ba3fba21321160a5a772558507d29ea46673e4e4ea327e4b20e32d1083bd4105fad393c27ae24343c3a88c8c17870e5e33c0138112400566db2566e9128990c986863db3af57c19ac72ad1952c5c2642cff9eb641a131baa973d5b64802eb486445e34b83477895567737a275e8f061d98b2edea21572c04358d02230da86ef96b4037395f6249cc705b5604c633e4ac81ee758a33ac322f9f50e86a822caed125442dc1240b51aee8006d01fe4c0208f88283f21674c0ac53f2951f210108e65347c20edeeffef8d18dc7c79d79f0bae460d1ae0eec38ce13850eec8f69918aeb1a6588ab4e777525b9652cf65d67310187dcf571fb246e4281673ac4d3873dd74acda7d2c65e67acf38277a1aebf03fecc95dd16d933914a3e2b4cfda93a0ec2b320f901623d9791ab58d662f15186eb6ee22573c1fe71d477a8ca49be88f5bc2856424b4e7a3417aaea055a81729751cad5e54ebb5a6861ca9669d0f46a5ba23f69bc93c18d116ae08b23d5b55baa732852ae094626cc51998e145f6e19f3d2ba79434d3305f02561fb770f364844088757df3173b7438c71a6144b5eef2b3503a93a26d494b5cc70000982d96a3a50d836e139987d434a3a0e6acefb4e60aaa4030e32da17a09a6e4078dc58962c13742c8e668c787f69e163e517d173f877d6d49613dbfbb5b723f6c8ba14bcba0229107ad0a133151cf39afd64d9c0455c745152f4cb4913606c383c3226118f7b087e5e35f6a02b8464ee348678cb0f152b7be9f920bd2e721423c34660fc781f0b34e776a5215a4395f2bb404a2d3d19255bec273b82233084f1b580a58d2662b6bd2bd7a0e5dbc9bb1bd6d511f48bb77f28bb62723a161a9c942b2baca6dff978d3f997e73988f93d8be57b9aa2d546ca66fd3ac4d9b5bd93c8df523f01cd9996174918176a6987c84eab57cd78c41e4ba694ce056e4ff73b9b8792fd134bbf6b8c9e4a795f2a31745556823bb3732b613ae3116efb80ccdd2ad26af65259ac30ae335975b24a90a426d15411d746c90cf6341b4b748da090b9b3e1367d742d9320232f7bbc724d5ad4a6f26c68a70a4a82d289b7f710d193463ce9eb94f989639e91bee6dade6d721f226d86d95e1b27b4c8cca507257422f09bf4dfbef39ef8b71a4a1be6ed9af64b03ef511fbe0b4980ec385c64d6b9a2fa13413136e23895353886b2c36041650b9eac68a5c971838a84284e977dda9b9fc2fd11cd5985e0244e7af826554c2d0cf2940c3b05f49a025dbad2c7c07c696e02647e6d32cdec947507a95fe51484e2a16eb2f011de8cfe87bcad5346c58c674618b3a73a078227edba087fe2998d14d891fa39de7f099d500ec20eedf8504386667faf4d9449f1ef5dc9b2ea8ee68e18222fc0524289849693c3e806c53c8c41ca3be2943cb44ac092ccb5a41d8b9a178516ec55248fd7921761c381b6060bef7c26e84bfe34d3971868e28764bcb86ce2ad649f34c7033138f6e59a7a017482fb0191e93a1d0853be875fe2f05942accd888143547cc85192a83d4de7f724d82d864ed46b747effe4ee89140c93ef9d6773b9f38581a6d90bd4af1d4567eff7510536462536b117033ffc0f35f9705d8dd0b8ae93fc3be6daeaef5e4cd90f8cafd547899faacb7365dfb64ce2de48284468bc0b9b2757ad084f7afd86c8dcf4cb11fd4768062e9e2b4d09e0f72db288ed125cdfa7241ff31f79c279444cfbe7de190aa6c91b151fd9e1767f6578018c0d26c75a568554916d0075b9d2b28143114ecf3b36f4baed4ec79065a995a77e9fe89638f177f445dd6550183519b984280ae67999d403fb7806137826d1f8139f378b913a3cb1145e7824d4639cf1cc0ce334659309819c0685a44a25b7d334a648794ad52d456088cafae1c54b5fece927b0f16ce0ef6b96bcc3504afc7c5c2b9974ca8ef04464f09ad47604bf40e68b53e1d3bd6358e70aed65351a6adac33ac8b9ba792808f2fb60fbeacfc97d5ace5a13106f0a685228b64ff7d36c1ab10f5bc9ccecb9e41d12e6a24f11aa9865097f34761490c81fb4e89f14e0429e4aeb2c7cc7fc392ad43069b6f017302382e647dbeda441263813db06959f20c80c7f59c0ab85321b45e2f29ffeb83d6cb6103f4d04f9701918e1f70d2361c48ae09c55550ae5ab32b88b82a18fd82863c2a289cca9ba036c40b0980574555605fbaef4cb4ebb84ff21713a683367656d4a4069f543fd0b1d9f2cf47268e17bb26b7fb8c90c2e5c26fbf20a544cc32a60a79c3c43c1fea1ddcdc8e19696a279476b8aa085ffe79f042b2a46ae33cab0908129985861eabb2624e48016da9580eb1e2475364a6d7c7dcd85d7c6810cb1bd3ebb030e16a1bf44611bed53ff2ddbf6526dd0aabd82492db138114ba82e993e850fd5a51bb786e547163612e852824f2cfb726afea0ae9d9bcfa9dc1ab03c67a5422938503fd61695a4c32ca86a5931b718fd5c6eb9cc2463cd18a018606843aabf8ec8a81604b7b9e8ceba68b595281ea6a582744cda1d79cd28e09d9e5954568978157cfc267726b3c3909fe901a398f3fc85f911f33f3f3995e8a499e81da10d0fdeeb047ed1e77ad39926db23513be75dbd5b11561549ee2cb9236e16d748c53ad5afd9df1394a2d16eec249a56233cbef0c1840a283b160b0861baa85e52e83f0a7cd5bdb8ac87fe18866bf5b6f100c91f36d3b70fc49e99f5d7f92fef9f13bd1a14c9ae22f2091fbadbd518acce45dd6379d6193dca28df31f5a5f62cb0b49266d04e641719a47df80903fe279ee4823bee8dc0413a24be8dee615e7c20ae180e661a46e0e7826f9b218ce32997500e87773ad24e1db391fb3140ace5aa3acb5e3449f644c4dc2614bcbdf0ac5f92a6c70a8997b6c600f85e48daf90b0c9059642a5f69e96698ca299140f054fcf7a2e66ca89501d33297d99dd26f4ccb8305da4a63a46f560ecb74a2703c78d9e8d9015fc67beea32bf6776e7081e14eacc3b34639d01ac4465d6e08a5e2e08fc3f0e9c4a0e25f6cdf159e40511bb78efcba62d7fc299a0bf1224adef70e7b24aa20785e37ba074250b3f268d4cb7ee3eaceb899a7179e91df1f709293b14320384da5d907143842b8a0f1cb7febab1f4b3f70c992616341e419d1c53aae46bb8860cfc236cc6e2f9dba7afd5aefd39d3d866a6681e0df8cd0ff71ac1307656576ec6c687c0af9e774cd79b4e22eba0ad33eb650a55103b5ec948819b2ac0ee6d9755b9e0c1a5c4ddc3ce31daddd26da1bcd5c22e430a0cd4350c9936c5abbfb6704f330aeac37ff056124bfe57de741cd088a921a08f22b07eb0b6db71c90cb22be136279c2843712257b839a93f52db1c9f6de4459b8cd541e98d3314c54acaa3458babf46eca472f022ab580553696de0c33eed0e6d8037bda43069d28303348f3bcc215505ef5fcef2536c55734b18cccb861bd404484633412f7bcddebde80c0901014f5fdbdf92e38973805d477b5245e3fd394340e5f01496edf5ee60c7237633fc96d8eef38236d396e1420bd93011ab78ba1db31a52e91b9956715b6088402b2380ad6bd9e1e33419d92ab18adee20337964cdc51da3680f357f81115f1216f2e17da87b15818f6b6f8231ae2845e829c51f50845d5a3f31bf204fc4fc7798e6d51c2d99f51a25cbdfad2d2dd98bba41eeb1a26146122b4f28e087fff10bd133520da5e207535e7e8ad369aec57bdf85a5f826b4dd2f8f6a40e82c4a6987bf84ba56b4ed89e979a004f2007a077256c3dc57a44b4b2863ac13ec558ad08c291722b53950b6c7d204d70f2d88d200c2380883e0ab833a8f4e6d38a94c103240f6f240058071cfe2c27be41e2cf69ae83ccc3d861b7c778f57a45c26d82ce05398c661e0812b05a58a706922fe730111cc21285619cc79f3f726650b6b64758f530aca58803e806805f9207d6137e1d1e398524dcb5b33f91db6120f8afea37c329466df58178b2a5cd559f6af54065b6e3d686677ec6616838d98555549db50b3bae83ffe36dc58c1b7471755e623593194a473f7b2cde59dc5fb1da2dfbc98546a11afdc120a0bb4bf1e67e887a971c6b2fc9049e1f977d89f600d77d808985e6c1c75cdff7953b5dcd3669fb3d95e7cb2711998fb4b2b1b0f1173bc79ace3140bcb2f27cf53711b2abd621655c9eeff7b18f4e9ea38a35ff97f4f1fb1cdf230ed99155fd6dbfd602fe858f4b1872ed56dcfb901b311c6e6416441f94eab7bf69529cd04b5b6ca4263e77053d32b3c08d8f09a6997c53a0adbeb433bf5b10ef60ac59aaccf6659e59e3abcb4e3d0646402f675578dc31a8339e945c058fd26a70b745659d06e442176d78f08647abfc35000e96182e8388f404dec3b2a8b1c0b95de5a7a08d654770cd5d8c3eabb9fb14a02a085a80f6e3ef7a344540c6ddef39b718c2af59eb610f1303f1a267671f57f4aed97767c0499abbac5ed125f496c0b6095a1979ea1926cc2c2ecddedad0417feb2e457a7e08cb8382c7ba46fde91e949dadd93b37b56200f5e1f7d718c3ea2c517333e251ffa9645df1439ff7bf358b0b1b7bb217b3e47736909b24fe313ea280394cb09670cf0a66697036c0e69f0ec41a47b0baf578466431bcf5a94038ff70f64316a9fc92d4ee18b49e841fd42cbc118fc6205ac7745a45e9aa6d7cf4d7aea2fd8d49d5ac8b00b9b668546dd5249eab2252118c59144a0c1a3549ef009f5d51ce2a790c10c929877d4bafc1f46bdc170771ed8825e27978afc93f712d32d51f34757fdb13544c5298e0fee6785441919787e3aa7fe5699f221dc9ab6e90a8346be24c3303fd526bcfd38b60fd035462933a7601de446d43bb7a2d0028d3b82fa90342f79e319de9e5964aaddc29d998de75cf74a6208f0f969f9740d9236e8b5da35aac37111f4dbfb6552fc6fe37c04985651a899d89ddc12c0810abd5e4be02fa6ac0940baaf0229a6e46f7055e8108b1a1d479d7c86568a710eae9539e489cd6088c43a6b1bd772673adababb70f57ddd5b822909d351fe7c042c9bdaa175f8d758d57710a6adff4c810d1b48964def1c227c92dbd35cdcd7592c070703e69274b02540610d2892f7761989c341ca67fa94579d12d8bec4e13d0c870af5e1258d08a4e545675ea51480f3f5d260d2507c939973003e07af9236f423a9e2b6c57f14620de0f429697158400cc3533f22bb7fb3078f58f7e8f9de668726f3ae83d0a42f6555333d44a078001fcaba9059001b4ff37761e964a86a881ab9f1b57b59b1c3a159cea700cb311bb2c96f4ec3038e5ad7572d724ed2028009a2e1b062bd83ee06a901225bba4e9da02b8ba07278b47af9ea8095d34cbc1867eeb0e4bdf2bc02ec254fa35eef13982d378202a77aac3d104b1bf0ccf71f49216ec35e998623e1aac8fdde78904100a52923175d5872dfa3aa53493cc96cabd1c958108346ceaa5900e3c3d0e0c311e9460a9810dd0c77d1205fb18cd27efd692fdfe82c40b777239bead85ae619213c13b13ab5c35a53fef306b90573727a1defb9f6bd02eebe9cf97c481e44cfef86d6287e725c662dd6bb6aa9b69281c412aa6b18e8fe7c8a72ad3dba00a0567b267e339aa61ea616c2941268df99476d086d54b133860dfd9e6cab921828a19efd7bfbd02e2921a6cc24ea5005b4472b667801f64e811ce92d3d690c68c25bea8d5f9004e5eb8931c5c178ee9fa5adb8cb40fc5bee30d7af2ac47309d981a77fc3cb530b48318fa35cec79e8403bb05acc751bd57255303bd06795071864093a696abb5ae3b0615872d4f4b20e9ab7f2ae73420afb45aa2e65a6d5690331b0ab520b93a6da9fb953be7d61862b849b3721f057f9676e7005494fa5b305ad20299548c4bee7548713bc1c08aa9cf310e4fac9b19ec96aedbffffe1d408ce29968e2068e065a222578e83c35f20b8e7748d3927f48c6ff17ce60c53b0402d48a160a93d1d6d11d6adf683db068e23a54893b60c8e0ac71c50a4eaf4ffa6094fbbdc411b07cc5a892364bf7d0cf1523ece7ac3fd33eb5506f478f58bdf0d7023135ea6e787c941b6fbe951449ee836a646ddab212b8601b47fe9b035b410640bf49d8a1d8c40cff6b7d05b7f8e52fc6f63a8e3d6112622732f1a9708a7b74e4f69a622b0b9fcc6689808076e62d637b177a0f945ad0649e7d46c438e4a288b68b7d5685b99655c0eee4ab443a4ae0278f54b4459fe58201517ea0f196510e82976d146b4b25afb09b36c99f431645c9689f4efef14b06cf4dfa6b9b6d9889482837d2f96e6ffc57813513431f37f8e042b1e7b7a142320ce33fb08f34c7f4da3824f0410c9f1be2bb87449130d9647cf98532af8136377335045c81d760c20f183065bb6818136c39dd0a9bbc0f5add15cedd18f2dd21dfb1d32ab176770acd99f7b73788bf3e4bf6664facdd9f887c06c9672a0fb4a3345d6e6c8519de9f1f52b44c2a2afa7c9edaee368d5ccf88f42c656f086fc8b5642e8708a51a5dc8b4eaa4ed1c90d5c69417217093fc888d968c4c6862360c202914324930566f81cc6f2c01dc6803c19d4f3a7d8d3a5db9f8bd43bb07c73624b5d3e809c2b18427723aff1b9bc299ff84cec69e2c5abadd0b8a0700a504655259bec17be7154160fba4d9d10bc3d60d6dbcc6718f75b006770810e710e4ae3e4f6dcbf2bcaa9281b20ef56baa892d39f99faeb7abd8ef89853726f89a64d6adb4e2bdd9529c0a194aa74611eb733899907d00dbd1b83d1f8a356b60a63cf4d38f1391068e606021e9ef7b825f15a0989d0095261aa66cb91840f8a1e7c756f294e1d6244e8322a8377a7c5f52e4547ed43cc68a80b64f20b01ee07cd6d785b988deb7ebe320de31d916b216f4385fa2d628c8447893ec600ded5edf672428b04a456ed60d2803ae8c39278d9f7cb204ea844a552fd4599cf1974450a40544af98ffba29f9f538c2d9160ff6bb8604659370d754b8c67bd6cb67a599029b63a6eb00c6bf07832a5e36d0ca51c63a6caff8fbdce7348c060129e7265d770b06b8be1c7a7c1ba13c2b8a27472127b4e15c9556beeb54c9474052d2678406a27d41325959b30c55586b80b2535b3483aa6ad6e82643a906886a8bbd76f6f32af14bf94328fd1c7ec3211036d8762c168dc799b5be7018e27801d8becb32142cdd1182157bb2e7a9aae438c9ceb563fa23a45a2981527ce9433c25da094429d5dc16621a70cb4607e34d3061fefc9f0e89394e3e900258da48cb73f870c814bc2466a14d18f1dfecd192557eb106c705b1cba514f5423e1322d9762033b3dc8c63aeb7cb67765c17828e1fdb1d4746d2e86d512138fd60ea324bdfa7d890de81100196694ed50e22c429b1c90a2066d1f2eae47348ad1481823eb8eb2e4b1c7f2a89f2f2f4c015ee989f7cc314010cae3382991d2614a00f3963a927065946091453a268ff3a4ceef1aa440a5e22bce35ee313b253f8e76a510ae46743c3ebe3b5b9b1b587584e2fe66f7b7bacd34d6fcd5e55cf591b24c3ce8d746f2cb00496a0452f92bd5378047b6a6ad29528f17d82c24b368ebaa3d863694d0eee85efa6627ef40388cb5356e861ee73193c39d8a3f491326290d21a2110b8df8e19421f77878426976160fd0ac993df3a5a4f44f920bc0bc52696f8e3fe61d55275f6f4a0961f851ef2424ca780a7fa9f9fa36b67e03da5d8b51f0d88307d2ff94c776d631a33df75323519eae31c54c32cb5e353dfa01f4fd7d5dd899c29da370616ddf3d3d9754f29df1d84c68a6640e8493ee7757499a537c5d11e5ed05a9f2dbe07455264f550134649d65023ceffd0910b027d879cb254e5bb874b4834b8fc2795d576f3c67c54516710613598d94a4db862a213077a693fca41196849194d61afa507c3627c033aa331b617fa0c825d99211110d0fa4312666bdf57a41fbab642d81d1a30e4a1bb36131f82d1bc96c9b1a0f97c1aaefe758f7e3232b1dfbe0c277396cd7e18d0e77094847deac1dd4fe458f08cd8df25bf9bde494711df12098c54cb6c2a2bea9f4a5577efb286a44d50432edbdfd083412a2ee7d9e4d1d5c06e53062358e5f53bdcb155430e2ebad0767b54c004cdd64ff3215fa99cdfb7192cf81bebcf23a3d5279cca50e7d4c4431f9f3cdf25f116af6113caa2cf342bcdc7c3991eff1a770f79f7e0159d95f7438ef435122484ee44249b942182b1421a036b9100f9848ea7f8cd4db762d851596b170c5cd3fcd7ca9bbf5127e36005c304baee7fb9c07af8ca87da6c74dc4366877cfcbc31888b1f824af4e5cc80b0931c28e4e02015ec3b39d1c8c880d91541a8c926fd39be20e02eebfeb6a81073a8c6a1c892ee4cd2865ca14a959fa773590fe1954c4b5ab0b36788010fcd02a302d6ec32af97559218d990accc65a579341437c701dee03e46b8f108d48c1e6fb12f3f9583b16e18565289997a9d3e7dd755c52ee1f4c2fefcd7f3408195a31cfcbdd65a35f203a413630aeec03425cecc662675320118b3ad46e280d95e0c6750082edd8751bd5d540db649b93cb54529f6412319258c319581bf96080d40f0611824c19ed971e4db708ffa3179175e76c73bee93d23e5481b1851875089c158ccef4a979bf79d00009cf6acc548f8426c9594c4816815beff3d95efdc39d6b1b571f8e646f712e8db92cfd87d819a2cb5cf1a4a841bdaf781eea4de23d5f10d06fba88bc45217e0a1fcf9f182bd99b21976cc1ae36356167ffe4e6c061f23e566711909e4578ba428a36a07cc5f3695632be43b748aa21d6a5c11bc1d4a89d11b9992595bcc0bea356edad113f8221cce3580b999265242fcbac6a63fe90a82892ec5a192724f640617494130b6181e1a0fd4d9ef32df40dee14675a9e60f22e8e9171c62dd636501fa7b9dc40fd53f73622b5be06a89e26aa4bd3ef7a090be04a43c3020321bb1e85c1ca3c412c9e07472395cad8f747f6c67cf2a1a37d0437eb86b863b834a62626caf906707bbce91ed8f7704240099a2c1084fd6ffe244a239e91515e0c1c224b1ae0bdb2f1ba4ed1431c2325bd000009fc1bb3059b49377b8ec38d97f388de0fa19f3e8c07f72c1bebda16aab1c2674a10cc05e6fa7178000d2d30a8bd392435f7f4dc0b95c6306e812a9ad1d36ccbbd58579f5b0e009cabd2db0c66828b833231627eedc2251d207caaf06c97efb10132500276b57346ce40af14ff50539a51ea850cc34f8e8b4caf5ace8c219d6d89b3b1254034c8573f606b3b88b51fb1ac48dd4b094fe545fa0f6bd2245d1e40ad1630793f1f173ab976cb911161e9df902ad877b8e99a1eef19e1e4ec589f6ed221351cd7fcbffae7b0edf8b8f02ee364cee1b7eb5a416fc407c700d1181482f269ec223b49e13a6f569941674d4724bb69341596b0ae071691ce1eae0a761bcc97c81cd66fb28b10a24370f7d12a910df83ca0b1702127fc4fa406ff8550c43e80d3fd09ca879cf82c0aeb1268854b57320f769970d7b1542a69780192e11e14e96c6b557999ad0513d0ba08dfb26a964a82876ebe55939947716ce187a3b09b152653ece3de7af7e0a149adcb6093fbc35ede5a3d4e943775692e483725be98bc28b47ba2e35840e7e08f04a3635eb8610046902f51d5556879d2f218bc101e3149c166dd8d7e9ea4bcc12ee1b552dd4f2c9bd399bd022c960b0a1f8ff1ec9198b465f1308354ab0bb5dd0eaea872a9cb9daa10980587b900446e078c311a9218b9a1ff7d5c30403841e2997df617d2f8e7a64970f608cdbf5d8ba421d0fa1f47a27879e29d143b20ef445a4a5547334574ee13d34c278ad4d76c2a29887d16b67aef46f09d57ec026749bedebe7fb5068402bbd55ab982cebf0abb6e268766f4042884b8f43159d87397f3e3d8021649ed85222ce8cf949b3a2d42f312441ef3970238c8a3552cc865482e586f0ad35afd51239ab1f4e28708bd77f473dadb758bdd6c6489018be74a56f68eb5a22765a91ae551750b051068c3c649f4b2f2cad391214f8905bdabe4b40571d49a3406c19aecb5ffbcdc88e6cbf0d25c0977abbe38a62345bbaa94b85dd82a49be3f9d705389bd2fd8b0a390af23b0f9f41bfb3e0da90f830a8bcfbece36c2c3e2b4fecbfb90e3910a548cbf3b888b3fefe166b41d9d6162aae275fdc41bbdff02177e45551dd88a5ca2305097863243368c7a1f9bf3a36593f2264417dafa079e094d0ca25751e2a9adcf3787483fc25135370ec25b94c3478e59326352154f5326a344b218e9c14693dd5864971a18c3fef7138dcdfc523d4736fe34d268dc14831acbf09830720f4487895440fd070dc2c482676c926a214fd3894e28730e76389aa0cd80ecdacdc9aeba1224b435456d73021542252f25bde8c444e4e62212222dc9bdcc5da29c1aa1a2ee55a5698170d0efb9d7cdce51400937e99779de2787d1bf1244b1087903dc7aefff3b11f2859418230a79dec01b59588a81f87b11d609b8997a331d31d566d1ffb75e31450597287eab0441ccaf20fb916283b88dc42b6a6e2e0a4814d2e51ffc87b332ea89b70acd30ac0c3e18793c624f294087b59a77a988d60ef13cc19bb3b8b214f25cc16bffb78c96cb44a8d014394231c4bf18c7ac1f0d7c41c3893ff51c21b4d3102e1351a60413ebedda5880413f3dda50b1fd2469e95793bf8a84000db7d70e305933f2361bbed6d14541b0b83f1b905e312623b89ed873054cf9bd4d545b63a43b9ebd8063af4d6a259c1e674fe14f421c787b347b1fef6c22cdaacccd129bff856fca02f8bec57bd2f11333d3c4949338bb2f9aa3f5dccecea1b941416ec08887533040181f6bcb12ef47bfb3de6373caccb8bf661d47f3d6a8377d51b3909a85ab52ffa80095e4c7ca336b6dd5dcecec45208e5e2df44babaef8735637575e0500bf8fcb41751f679c71d8656aabc4c60b4c3af975d8f1703b1040cbf2da342904c6ca99dfb081c51513fd384d366f80f3ec03b5d1cd425cea6d145b912dc42bad55b86bf55852f04b67fe4c892ba66e12728fb848dcbe14751e71f874bf6c040b698b7bef9324fc068273046998c42cf0787fab7c044c03e3128bdfdb9b94ae0b65c87982f3ce97ce88aee5b3b4fcc34efd5cd707ccc3e65691bafc02943027a7733dbae02ad3374c61caa22fce2773201d5104230504978df25c13c5c72c66160267ea0aac49ca429d090164a84eede782f59796699c86a08be571e4142b5aef2d5f03c470e851e6b86426c8965123907688b7d315028d67d2fa42cb455cf8affd54ec131b052d31e4871837ca1c99a30bc5826b50cd2154f20c255699b8b79e682b68ac132278ddf2cca638d3ad0d4d5b8d512d1c7d2a495fbdffdae397d39724928f8c415463d90a5922835e50ce9800c05ee5dcc1f70454db458d61399d641c9bd4bdd3f4f5133c33963450ac8b16fb7f1e3512730c2f1f41e88826602866063f7d2ae4c01d72874a7d02f691b478ca47064e433303cddc0afe1702bdc5550ff15e78e5899c498ec000c8d58e131aaad45048f31558176e039345e6358b41ce4233749ce4368df2978efa714c756468a90e85ecf815821cdffdf55788436db1db3b9f1e73bd67997579212e91e7a22f041bb9c2f8414a5edafa9707bd2790678ee5c2f34d69d2f30b82bd9a1cafce6825b0a896a20fb09a4dc7210f188f5143bca74d8bb55700fdb90c48623223ababd62306ccb28a2302b71e2f3ccab3f31ea994e3e93ab52be2a21470e6818de87c47547560765d3faea3842f2e7ed1120d89fdea1aaca9c8d3d7b7a9fa5d06bb9fe18870649b43be2e701436185f1d73948ea8f10021c1c2482aaf162c1a7e34a56bbde3f0a4a93c2010ea4b22b44981a09a9978cb52c3b21419a1fb0f35e03667b41e600aaa4c8b61338e47ff8b856e70a7a915dedd3bb27069bdcb025af12db4c872089ccbd7be57fae715dbe49f95e453780d31c42528c418f2e2ff5c313354a0709ab58c3fbae2b615332cd76b0d94c5dc6ac69b66e2e6bebff8aa478cf6385076c9493c71b98df81cc184173dcb22c340ea8b00c45d4ddd2597cb6e57f3597b47117905c5ef77d490cc95027940e69c0dd6af09642f505b815fa0e520b055e1a71d0c7110121b9cbc979db73259abb90ad8bba0ed168cf564593dab3a2a83c5b338761c3558924ba70d5a79ad3d651bf4d3f0c3fd5b86ab6ffe5312dbd654afa6a8e613c2d441abff08860a6f2dc23ecfefe012efc7a83bc4f5279b95e09f91fab8ec07c2eb7a464937f25dbf8c40ea55a295fc6c3fc25fd91b32a56408ec556c45db09eda74659af7317e5b76d852dee8603a3af3dd0640248d681625c424eb9f20ad3c4b7a80d49940e8173e3b769243129f2c323db8bbaff72044f6f1effa9b568f5197e97e251e2d531a8aae0c6131a370c97c383ff31bc010085bcefa7c064a11af83d92f40f3a4cf7ae275e1da14c761a80b35192194ace92bd11cb389db58802d688d96cb983477039b3968a40441163d293e79280422a1d0b2c3f98c492cd8a2a8c826702dc95bde42f56e0977744c6bb812a09316a56e44973dd0399940cf029c613b3e737d0b879731935c762acd8a405d0d884e385137565ca4618508f592cfc46b58e5b098828976f8a71ad57de612bcfd33ae634b730b69003b2ecf0ff6eb06f0c1b97be9c85d685b7ee34ffa45ba54be367ebe5b1a3a8090248578fd562d6e9f21614161df3892d8539c59f8910c30c438c1fdf08307e016a126d6f1ef2a3afcd8aa27b723e78d981fc5c8141275ef715ff3e4104e0fee50c3d6ea8492fe46d625e53ba688646f5eb2644cb76e578f278d1cfed01c0696581967386bcdb93b5d632d91e16f5bee40fc713a39488149da025dda5d69acd1aff019634c9252319498a12e43a457ad8a4c86f1f202a825097a5eec658b8d12fea00bc107a95348b36762645ed28f3845f29a72fbf8929f05abdf6c480ee75e3baef35777e0c49a3b11deceb7ff2ae7c94e45660bf5d56564efa08ca6d5cab4c591b1b2afe672b7ee61675dee213bc08b241a1b3cd54acd0ae74e1f7bab04bf76b38729f587949fd315d9beb822ac58d5e2bbf7cb07a4d002df47c5a15f4c0269caaa3946a0d073384588996373f0b4fc6a39c57fd8a4b71925109e7ffe0eb4f7fc4fd73cf03178097c92adba2d27c2081a0117e17914a009f2e88bcf46a983c8cc1ae7cde10d197f5d07acb93d955332f1ce3be54fbbfe31a5138222fd4f5fb36892c940f690cae4ae8071be9fec51fc3dfbdc51134a7b5003954160f48982749c759c018f58169e297ac278abedbdf1b88f264d88b5ad676e52f19939814e8791d691c77dd808248479e6013e090d7d19bbfa561c4eb41a366076692050ac436878cd97beebe903b2bbf72e992a37cef80a166e71cab5cf8e8a60c36372e272101ebfd0ed7d8dcfe8e7b6a02d5475444ab62f3281d7702f2b2ec34436eaa5f8c0a191f7f336b67894cf3c993c3b2364c7be675298816b89502cfa662c3197b06f516955cdfbbd1f6f8dffdc47a878386dae8c28078aaa5bc9c30012dfea73554d75f405ef8a4ab9a4d3b2af87fe32b1683c070e52c5db29e2211459ad4dc8f6cc2310c623b51aacb20caf3d560e688f264f2c84a2e2fa70b0f0c25f804f2e9575d528a6475b182f730700133699592ea2dc8d039af0915bf7bed1b862ff3d3c334c88ee45a6c3b2d48842cdb7f831faf286c87745e662907d81367f1838084c20ba34225fbf221f699b434c898f875b0c9d262e29aea8f85df15b0dcfcd0cdcc495f99bc5ea0fc5a263ebcb711c1b15443062cc1048068db27c5382c0125daa4b22c9e6820657c7f46848ec487b25db513b34693b2e5d99a76f4a021f43c9d3d0af96c3c85b36733703eb37b4c522d2d6090978ca9fcede0a5c2791a831928d69c0dc4b24047bda736eaf7986036dcdd45c418dff25ecb1655c6e472f6b139420baf6190c231d0752dcf4f1731a76ee94b5025a7179adec9a15b77333c7cff92bc90fda8777efb0aa7bbc5b4590f1834880995c09247e649f9e2b7af09dcd9f5b9b22b224f95187e284cfe1aca4a5dd6114d226bb9b2caf7a29cb9ed40b38483f1e4dd44d4d89f71fe749876f79ffc17a5ccf4e8165dfdf106fb8b24eb39e8f1d4bc3186405c2b0f0e344a175abb4e8abbbe8ea3be032f6f6b1d6ae77d391961ec039fbf166d63cafb67d04db3c410baeec31c882ffd2818df52575eac7cf7421cdabd61e113e99b7316ff9f12387ea7594fda1cf4d03009581c4899dd4657a0c3109ccafb4951f5977cdfa8496b0fdad7e781fff1e5734b7035b0d674e89876fe88ffa2ec115eec3e5ff57a5e85275d03efbb4de05b4b7bbfb07a05b92e33315234c4100d063a302c3ee2a1d846f8613b8093bef2c2e5741878508906ade9eddcee24b25d735da430869be6349b8e48a461e7080455afd6547f3a4f69de1c62bbbabc8925f192180f2848d4359e94abf6f7278791b341186eaa2212852923ea65d8e3b828936d6dded91a0def272c4040068ff8ab993045da58aaaaea4c6ea2560c529f4e71f7e3fade4e306faf5b3b672e9bb7a04ba5bc795ca973421a4e0fb314b4024335586973574c41efa632e3a4ef9ea3025c0ae295a25a0b263107cf437fa13eed556dc315270a485d02d01a86a092f57e7ccda6f7d4dd60a959d0385ccbf8ca126cdfc477a3db10ccc0bb31500ead113f773cec9250c36479ebe940f9dc6cd7deb9909bbc4d08baa8f1d8022633bf18b1d4a7fa89b938029f6ed17f8b3df201b54f3e42feb5222b4efddb8b9429d8b0317db13b0ca929158b550d472c3f2ea5c6f611d863f488d43d3c7ede25c813414c6cfcba4e96f746e56e0c958be8199b7fd0e36aa381ad4d0fb37d02b75beb61b1f80e071b542e3f498d358c93fc28ae5120374f145e1c7bc875382eee56b888686b895bd3cf27835fad171559fe68245897aded9780e3922179c7f4079161961155c3075942fc73c442ca9e59d508001b6cf334f343ee43843207410a4c795278822d3dee6d979bd45ff0d126a5641cca7fca7eb692ac663f31d4e6256015879fc70d1ee62b42c671aaa223d20d194135cc9c2fea0154728a5d91edbb9b314d7e787b92ce652861968beac656fa71616f4f483b426283eeb43e32701fe7d53991ea01d5f7258bce3319413e991700498707f84b0432ab9d054ec55d71d56671a32991a8a40978e29ea05e5b0a3b641b7528615e71ac4be5c668dee095acc5d361cfc323d812fb434018a15c62069409ab8068efa865131e930df7c6ef693d36732ab51112bbe5daed3f3dd94ce98d1ee2928b965f7cfafa6a9fd48c4cb6fb40c441cb6f4254361380888dd370d2dd490e75aa892011719127640dfa4af66c93cf38481bfd1e7191c7fa60738ffd29561badb42aa537a147f5ca75533f1a14d154b93c22ac49ab1302e6ab48ab16f35ef204d1de444319284476b1d5e9d8847a064c46ae60760f7c723b5232cb3dbf11cdf7d28ddc6b51204ca4819e0254f7dce0b3a802936ef37260e3fa2b3dc51f048989631479f4ec6ab954d49040ad23bf7d56e448735f877bfb6efc74db47069284a35120bdb9eecccf9aaea765ef4412a45dd80d2b676511690e97c28f4782bf30d167f2a88b03d780591edb556da2eb8c5ea2583bb10a9b91a1710b423f6b06c2bce34d40f57fae177e432c263cc78f66079f83d11cd677f42bdb58375941130fd5cfd1abf42d44747f7360a75d126d83a88f6accc92a95d9d121aa53d4bfce3b4cd39363a0a7066addbac6650ed74edc5c52c78a73f25d24f7d27a05edd9462a1fbac698d53cd0881976ed76dd4d5f64922f48bc3c1cf38ea0e2b3faab6c01d393c8385cef47f8b0ee694fb1422e50787c238582e63383918de6584a020de7fc30503cc3e5c1070c59e2e145eaa529c5c05a789c80a25d61800a3b7428d0c17887ff83d8ff483606ac14d40b9460968f2148cdeb440a768ee1892aecd0f826e90c658db57591a3341530e5efdbcc34fd2a87197ff1541a50dc02ee616953e332b09e1dd03d4db6c23837f5d996bed92ab538484de6ef2dd7268d6740101ecfb23a7ff742446947e937630633b1a91a07553675a870662c75378049e7de74a17a4f475ffb86db327d0fe034601bcf48ad093958fc0027ed037c7a177f2015b9cce55b7d27520f0dc83b28d0d8f440ccb8db0ddfb6f3eacbbc489960ff8174a3bf698d3e3ab8f92c83f84b644d96eb8eae5403c76077366c6941a6d7f6dc77914cdc9b3642a35fba4f804d6b583c8b1dc6312a348b2bb37284f11920a0dcc7d11eb159bcd7429c1fa6c16ef65083ac680cde974e59946dd753dc99da9ecf5b84bfd4ea0f6fa33bf4bbc5ce63b4b9052b9dbc7cfc93bb066185a0045f3e1ed7584be99821ddfa0e3d8f4aeb96ccac4a70378f8c9d881530fc56f036edafa6c3a819ab77c767f80ad89ce98cbcbb058f2b59c5d37ee53482eda3a7bc1080c43cfeebe4b73fda7cc3e8bcca16de0dcd7b9fb9021867d71382dad87020648243e5ee6dd2c69948ce5f40be849f12f0e53d473e8d55aa63695bf4ff644881c3555b09360969e6fe57146a9cc1cf09cabc07098cd08c5a06f465e2a63890bb1956dce799f3d58090db10d5ce218f801a982224dfc83f4f899b5fd82e30812b593a92459bfde048265893e8c5f2e450b7e745ae40a46474e9fe5c92ace501a03cb87efaf70a306abc7c895d2adc0235a6cbf2ee76ec06508c2d37e96613b5cc8f99564a36087d5800e0cc3530c304b8fc5e91033468caa241ab703f1f66699ead39ffaf4505782606c1b6f31f52d2cd1c170b98c5a342bbe22bb4e6b811d6331b8e4f4f5e18318009938b6dec8ae7dbb110d65b413886b2785594aed7e705b119ba5d6372a88f06403f9cbcf451dce189f23d8c21fe1fbd20eb368e1d8849bc6312be1f5ef4bfb56056a3eb624b8e316549f43af3b95519e33cb1847c12d24ceff170ea30a359c39f011187eb57b7e69da16464977e8c59bab2a460ae399c21b360b1409af83087ad317cbec2134d6c63f0c45975361a4b92cf80998d515e374f872f3c9e3254d3b9128a41f0a595f99e4091c9cb9cf590f80aa6c24b6bb64a35dc4934c747163a627158009958484955a1de036181e7da980aa1b341f97e1f5f6a726f18b64cf7e277e390cbc34ff2dc08cb203a5964762497a9d5ebc8bbe89f541b886a23ddcc59b2f566bfded3aea70080e6bb6a29c4e5407819ddc183ede53ea2d6658c1802fa8b981d2172cf483d4b2c8ac514c3083ea875cf77013bb893e4b3ffe3e1a9567eaa9320259150b60c90c783925bad087b5f47711ddcf9f02cc73d2b952b847b21392a46aa412aca3aee309ff23157b65bf49d76ce51f31439bc1d6e917b6ac303c79cc3f8829ebc74c27b74555dd542f5425713595d67c8b480c299eaf199f7edd19c0c8ddc2ce87cbffe3e8be025161fe94c3b7953e8aca032aad77637e4193f71e298670d3a171913a8f5edecbd6bb76d3a27f67f92c032a0caf61f167edea1e6ab70528dcf9706fc6bfe19ac855794d7892aef99a7a02268d2d467f4eb5d48e3e66cd1b5a6dfe5952fd2697e8af4744f213b4cbaa64a15198e982c1b6a111d1bef827a6235bff22bdeccde52f62c5e2a4c42df151cfeb54f298a3189db0a20212a539020d422f4ccb85480ad6b62039868a1e612fba170b3b57ad04a564110723466e8a590ce38210199f38b970ee60f7c6b010b09e6b8a8ab8666ec573b9d53855c31cb11ca30b93210a7c826333064848865454d456d96e0dcc8b99fadbc2629cbbbf6536a6c105a2321ce2c9ceee4f9cbf406cc36f1853d5f17023b9bdb78f3982592f685b6ae4025acc508fa058ff819c91ed57129d4c6bc04eeec31fd23a7c8b3e5028cca2fe26658cf6c284d694d8c1531237149cdf54ff764b50bba47c796e83d911000facabc765df3ec71dd538d8be4edddf0449aae8ba327f4a18eb42257decef1db9c54b30a65f03b594a815dbeb12be8d2bc297b1c4ae8ba114667fe2fa38b27e6e645dcf91d56699695ea51af932b89848dcfe8a3cba8a4d765eae624361f3044b349bec624514762c9841fe34a869ead07b16361577f4630b41e44c380166808395cedfaa66f97badbb193a620e72c0f57da15418967fb68c13c240413707be1775f42c40438ed978e9c747db954bd39bc3b186a09e95a7f09cf5e72ce61388d4eb21fdf9b9239fe07a134aee700dce65d2854462d336be9ca9ecb9db81969ce4c80d78c4ea9e66ea5fe0326fabbb38b9d2e7642b757812423b197fd048ad138e00b523a9486a90711211de4367d82d8060bc1ca0a3f05bda44e13687faad05afcc65c2963543d5454ff792d31f104b9845c7c0c6c0c8bfa591aa1c83b45363c0af3d660c92b04462557a079efe4f3b8f195c1de2f2b2e62ad28ec71fac1c764dd9c202bf4761216f2979a5b6be6dc65c9096886d3f94442e9ce35dafb572553bfdc396a2b5ba2f698dcb3d83bc1049fbcc92a513ca3ae0764bc25f97500c3b3200ae88f6e56bf9ecd10e5e987c26d950bcc68f6047aae3efd8206bd91073808e7b31584d8a1213aea8d6999edd0b063463c357a07989f5c4cec5021fac9ab1b8d115ccb9b6c706667fc7cfec9495819e0867135c3ee72330a31dc3cf1b1ea89c00c30648156459714e39098b026db10e890c8c9afcccaf73ee6cb13b20c47889b74e6cf02097e2456cdac3af48c77416d0512f5d498baf4f02b8a26fffc88062cc2ef4a6bf9319123a43acf8b2137a6a69ac01bcdabfd7d20a9b9d882d50786a6b00bc75ed8b3c8e5b599ab1a27ac6093e47ab6890bc877d6694182f0d05945452a1b4538c64990234a8bb2b77d1d406b7d2b16a66111863640fe7d86f390e3252c299cb699067b66aa01500cb3679c4b2d89c71fce01954d200a14e498cf8e5af8c78c6288f4c5e3d97af6e3f22833251624587981a9d97e83533ff0f95f100e548b60558366809b3c395f0cfe902b2382efcaf818eefa90551967e1e0574cfbab89585c39550401fd8ed56a1e9594402227e26d02778f022afc9bbb8b65752b9b2056ab420b53324f7605f2103e4512f9f42a77976be7824fe3fc4f1457cc1f33273b77a7e32cd67c2adeb4afd607260294dfeb86e6a0abe08a4c12c6e52e9a656727597caf94c36ad600b965dbb2949676d1733cb5243ff14a9edff5f68e683e3ce2bb7643ada9900282c2e87261d53d75a935a3107185089fc6b900c394e294d6790d4a23606f9a1647fa728479a128f98fae399d8d46b79cdea95576fbef076e0088669588da9b9d78e3a42085f1569a64f07d56f2c99c5853c7e4ad55f9a5da20c030ce14397a05c0739b52e407e8fa158e5e1e8007e4319387e1faef4089db390cc0dfa4f7a4443c20fdaa1dce14cd8ff2b3781f7fe570de35f1f39a5b2f195fbac51fa9667872029e7d6f124de80bdcb4e315a07cfc977a6d3a1a9b95ecb664ecd7b0f832bb4202efe5c222d57c79bb0a6b6848d07ea95e23800667d6db49495da7ed9369ef37c47cb072cc27d1c1d4f934617e0f55e270bd6a388af4cc108c23bb1f33d7c2480a4db4e4689acd655de7f066d057055024bf3d723c7475c0389c196f2a7111ee740763dcdf6a89ff34eec3254b4658619b1f5cce92bcb9b9a6b400cbe7a1485d3f1f0fd271dc16bf8601d59e882f9bb89528bed19a4629db68d1f38b2d0c2d216691da0c7a117bf26b6179b2c86fd7f35249ad45e0c4dfe67e1f977a5331f93f171fbadb1400df0c5708e923f8423edb7a675287f242e9958cf853a14a19eb8fd3b8349c6edf0e91d478423faeafe186abd062b0b6c6085058e21d965b43bdfff332d56e27832f23720f5b4a85089fd16fe378ac296ad7e3319e067be49cbe02a81c7b52d2ca2647c933bf2240a888fca44e6e294009f1b79df4d071890ba884fca109bffd4b9a3fcdfa96cfb3e10dae2c36b26ef4c7b099efaa0c3d4256da0c1cf9bfcf44cf3def3f244575799720edd3c6b1ae6b7cece438c7d59e7ec31fafc3f8e4c680a059fdd727d784cc0144bfbe3749c2de9e7e583052fa102ace688c29ae549993410d01f1dbc8e848f3917402430e6233f9c0bc65322ea2bf2f75f6334b4e6f367939d7e5194f375e0f759ab3e2711b09c3a66b6081ae55c1f87d3e52e4abe5902d1954276013eeef346155f21de44ca2a52cd4211b8404089172b216d4fb5096ec3a17df46357905445b007db0fa22c75b9881e8257344b54bbb35504056d47aafc22d5c9282c7526b9339d954b905a7d610c30a9fc6ec80073209cfa659aa4b3a89614a49675f2d4c103565758a89f02c38699bf217bce58bd998611a2effdb68a134c06e5463dbd35efd8c6d0643640a648b84303bb60b1df8dba5ca3b600624b74d5a6f8de88c7f74b60c1e20956d559d09eb8a9add26dcbd76f66af112c829d8b89483c0dd6a57fc9f6baccbada3da1bb7fc77ce8c52c410f9cbbd3be27f0a814fe4f96f2d1c24691905b712e78303f45cff5be0683ae35960deac3eb5db91c3714ff60d8d177bcf92eccdbc0bfb586e939f67fbe6d15f12525b3da1f14e6c215d17a69398d7f433bd0f56a5a9475bfda9f80d14d01df62c662445b6f28f176e5335ea5ed2caa810596344214f1388a8c23451fa5cd50f316767b7171095c3fc79592253c4e82e7ac3ace17d78100a57d2e28818ecf79fd885e56211f00d09fb7bd745eb8fa44633682533f90d64671e49b168d5bafdfae5a7e685a10efab11319af7b61053180d664165b52d94c36dc1b07517a6d34c1a5de2147f9ee592511974e6e0ecbaaebfff37526994dc6ea2710c9a422c2f7f2030db71ccba77f20c34232493bebe8896530157d7e5c7d980045fd188caf474a23c8d78cca49838c64547314338191858cfa6d018bddf094c0d263768d8f401a8254e192552ef4eade88152cfeff3e5bcb8d8e666ad67fb3ac81ec5a5360c2d76735df690ff112bf40b53a104f2821f433f69c6c2ebd4f99f5a1598290a2a92e8c37042a522ea76ece62b0ce1683423e2b254ae1b3fecd5b7eb9e00c5907100ef145f948bd6a2f1ff45f56b384986e4570ee4636d47ea74f20e986015e8ea9c0d23778fb2634086e5abf618a5f7d3e3adabfdd9907a2e60fc0f3d243168ce98dbf29c011ce4f565e918e76f69436f77f64e36f478a3066f378c155dfd1007b41c36c7a728aecded67229e22b521a7c0cffee3a21b6955f7828c915a280c3409ec1f98cd48be248c710e053b53ef7546edc25ab4728a04fd06e3772b49abf57ce0e12e138dd4fde00d34fb9936ec93fc73dc8f2da2ad64d4f3d788a0baccb0ea4806b32e988036b25da1a1624007b2ae9283eb575ab6c201dcefcc779f41444a3ff645399df8da4807211c7e05024cbe40886431415cb99bbdc55be31b335b35f28308cd45c7a4d50e13109d172f429cb5f84eeeea0546ca33f316a709fd918afc82f5635a416f50c5003b9cc89bba335a0da1ac296e07999662e74c63dbefd8f160bc8984cd0348ef5f4894d3b71e00a6890a5bbb7b3cc65947268e17fb74af4fb2dc416b8c880512c478e1a58f97f96d12a3f71c1360e394a7c2aa0da788ba87ee83f46cf18f94014251ace82ea7f4672e759d0ff60ac9f4e134141c1e57161232ac66796e1d2d3fcc7a52c38bf539e7f0952dae8a69beacb47809f4f6ee568d8d797ae20fccf6cb81cfe4ac8d61ca5af6c7670169622299e1a68a66a2207cc40662ba0fd992f95709b104e06f51829df8d92b29913fc5d60c950c5ee90c7ed99b53ac1d973c90a71b6e5be7949ec3acf9b0c0b5f35a42b50c3278771c4c1fddc9b70f5b82ed8e29f947deb6b7b9d6abc82e98a385234ca152cb12a6d01a7aa0546038a1ac7f8123a0efaa9b9b31353c86979634d5bf6474a31d9b9355bd0c93b2a511962ff731ac467c7b1e96383d2c9182225b2b834d994a83cb9a7ccabce56b06177a8a537c0014b102374cb7f6df636d12c79cb1a2f747b34f58389869dc5ff44b0cc09e63cbcf86de44ab0e30385827a2a942166a1603565e5a5ecc94f04a50e01a5523f9974b31191e15171271d4d9d1d37a1af35ab86effbf8336047bf6f851e69e3664726418052a5cabb28c99c130d26ab407cc6ca3bed00a51bad3ff05fecf58791934cbf3227dbf18553ece1c8e2749c0a831407bf8a9c803f82a65bf1c4c59d5079f8e39bce6f021d6fd259ac7b05291ef35d66d49d56b1104aaa1e4189ff6c76abaa2877ea2a87bacf7271b615ad0f068e23290e41f263675e7b933db66f5289a8962690c6b50768ce175f280b69dbb64f27e4103fbb5c4b355aab93bd6cc1aeb10dcb955911d396c4a1bd71052bc3547910c7b90434b7f5a35564da2d859dba5c23fc51e96f150caca14ba2cc18675af23dc9ee5480bae9e4179971a049f8a5b25bae8e2e937a4c423d2cf813682ee61d71ec444904a77d9d334c623f8178e6b7bbbbfe9d8c5cfff719563732849d106605b75bf07b7434e9813f23b2fd6eb9300392322859bcc7cd52aba471fcf1bf46d8b564bc07965a06113c1c4415349ad387acebba65296233c849f0cda82fafc8d102542c56f16838b9b544cf8a39176a8274c11223fe769399bdba0e9d29ff51caa4a30e72fdbd1b7b2c82736cc7efc003103b882c4c598d49cc2ab6594a30538102c8a63035a1b441e9758603f1c757056fd43d173337a702c9fa73a45b0df4f7d99aa14d4bf32310cf99ca199bc4b9d7f2440c49acf5461727c9b3190d2785115a68e4bbc74f3a8ef248ae11a9ab9748f3ae78ee75def5e56282d08ad54b2b3cee9ee7303784ca62f90c300322b798f656130d4fbc600dcc2a329d54eece6e3c24e1902e9deeb197beb8a8c5d780dc4fa4ce495f57145a6d65ed6dbd67e0a2d0143b33aa271360fd0c8fb6e5099c26bcdb68f548c186635e91a8984a34c21d40533d5c19ab6ebfab27df9ec44093e8690551eb462253c41fa040665259a223a588ef54e406e4b6c2f5143c5b17730794738848fc2824dc36f958284fc7e037a2fab56531a009e316821b2b2ab78757e705dfee714ddd23e2bfe11f9e9069f5cca4b75bdd2198fb846a010b4bfc2f30a4f9aabc8293208e56e92da6143893656c3d278f35fc24236b473ae669f50265f2e600ef8f42a22d90a69b2da3ecc39d746a11ebbd968fcd882befd930885e2ad1280fe2ddf74b99e07591b244b2aad35c66e18728eb2262a8b977d3cc45503d70aca3ea6f692d35ddfff3f78ce2c37ec3d8e96c2fc6bbddc42f67667b2e59fbe611c87c840b0b54a50697321a3f4f0b55dafd0c1c72bf0402191dc4d07fc945c2a9f14a11cc5aef5618e9b3bb3d4fc2345611b6289bc742182fd42fd7bfcf1fedecb761986c776c2dab288c32b2a513b9104ec1a29708ac6e7197a8f69d428b8ed1292fbd1e8ba0e9f5a7ae64f10dca7a6422dd2176ccf219e14158c6399b85838ad9b98a4838ab409570853601d56a50ced5dfec05faff7c3a1d28abe7ff96335561d085be1af4db695e5ba732f6a43f545c7488f5076eff384044cf1aeb185d721459847529f6a06396b7b3344c19e4b33c02f9881106f0a64827270cb9e079b8a028e66268475a0e20556d447ea8775e674ae14ff1cb51014bf9e21d7436f17fd71319402d55955c43684c1be59f04b26f00aeb4f3c91ead3ca598436a1a5b7856952dde3c562c7eac63ab4c58e7231b5815f649888929cad85eda88955ca6844d7317d9a334c477e82a588485611407e4f74decc4e139b39306f99f00e30aba9a047b596556a15a8f10c52addc75fcebe9a8ef45ca51ad6060e893c0e157d707c4e4370bc9546538363cba548053e1ca6fb3527cf232abef210a17024edd18ab62f3dc56d69588d74c6c56d0819723570be163724b4bc2e93dd7c9f2c4da9ece34642affe776dac1f9fd625af7657020ef7ec150ac95c1fb1585045c8b4c5541fc1560d07ca8886211dc4d723bbfc833e13dafc0a8b9995890b72f2174ee6dc0566c42facb0227ffc851860c9e1d593624d94b6610b8366415089e4fdeae1877d21c42d8e230117c70762d7d1edcd4f753d52d564e9ed1b6885533db8c41c384ca5408bac08133c5aa7165c123dd43d6abe6d7a8f600a42cb4e2763e3b05d7f8cbe5ad6ae0f710cb791e71a34c3e12c59f179c844a2396f01f6f4a48a9dc86d5e27edcbb95e6da1a1fc5344652b7f315ed20448d0c46e684aa7d53b3f8d88a6450b7af712b28ddf1ba58640b545107873604c5265d2954e50bdff1b3b8d468021ecee28b70ad1f5b473ca84b4db70977f4e26731a497f95a884c345104b747e8728cef88fb89b093177de176414912bd5909af52b5a92e4e49aaab22be66191fbca711c7f2ef33106a6850639e94d78eeb46b0b7995746ff586ad51600b2d2e53ac25522869c0202b6fe036e5b3c6d363d2327c7a1e469f4d129e5e2879fa0e4e6bbe79cb70938080e0ca7cb1c927e9adb519632387721c787a6e7531043b1996d326889346c119b257ebd079b4d18b92e8ce7a7c4dd65455e0443c86a431462277b74cb92f50b9bf5b3e6160e147308c3f60cfff982474a0750e4f1a5daaf2b98d271a78351ca1f22cf11fee4b1c6cc93c9c5c774caa1093f4e9c2aaad92b8f7e3f37f7ca25aba1d0dc1807a922c5694af54bcdd5fd44fcf4c9b3bf1bf148782749be24fa00d85bcb9870d7b81e526e4e5a4183563c08a4d44858e9e74177f39020fa061d1ed6b8110e3ab57044a8a13cbe7719599b624df96cb17589ee509133f21c10b3516706f2b0a8fd32d9688509fc74c109b9949f1dfa61e49c38615acc8555061b6304a351f7c5628b7f1156792825b42c6fbc32e79fc18003b5fc16de4e58f447d43872f50670ae210a159ec5401a9b19ece925719d36aac84fef6a40fbbc96c2567afaa635957854c2bd868618142453dd6ea506c9a2cd6a05daa6d6a48cac9cfcc6ad052985e2cec480cba103bcdac68e5f21356ffd0346679cb12c5a32b4131cee1ea75ba6facf6783e659ce97010a874e8b633eea71fc39b90fe3611550b73df3c2a2e3b8eb7dc1718c5fb5b1c56342c74de73984162bc2376ec20cca6b3bd09a6b0bc74fee580b10aea25c07d87b4392344ba11b4e2508bf8e301436fa607a553ab8649438060cd27695cbd0663b1b00b88e14b10d14836f180746201ead33d43b4b869fff5e23de58fd60c93088df6cce3923332566ce2ae7d9a39f92af3c1023340bd9d5e79062d32810aece00a6879d8076dad10b364f523d19370f76bd2a1124488a25329feb290d5c3f773faed00a3a0b0c04087b993204e2fd1a0f7d8b7cb09deb81704a41cd328d8c01a3b1b4cf61042f7349f6d3454baf84630852d8d951e6996b9694405895878482dc0c54ab11269c75b58997fe6e3b027d58ff483c39292bd73c4d23064ca5317c015eb895feefab8591578f581f21bcedda943215eab303217c5582e16e6085aefbe6835cc2fab3707d868b6db6ffdce6124b989e128dbbe7d1944c3688519afdf93cf1d4cc09ee4e4d32d4182bd6f8693f02756609235519a286034538d548ed9d9a2593fc1b95281d130b4ee7ac7f81557d64a4425b5e55ed0acc136b7e385ae703c87304159707d76063a9f6e1d259206da8f6e599f2143a9f73d9ff4134f3cfd1fa94b97d66e25ac7f54977a31f30fe86dc45e6076e16434d20b2e0ef901d7d8178f63667616c1fa15ed2fceca288d03a7d98c4c8cbcbf9a523c3924e9c44f9eb18bd78363bc150b63190dc1015b95e17398e4e80537ae51255617631efea18b8ffd4870b01377585ce8db919f269d6db77fbc194784c3c76a344d26be71b5b12745329f138c207b94df340755c586d0dcb06906b14f7f4d956c49bf24ac2ad5f57b000d431fa5b68679e2196582241c9437e5ded768c552900b92196760998d68ae7c9550dd31571a77eabe5d537ce6971c6a592e7f1d1b96e410f8a2f17916fbc44af020c465cdee44f143a80e70ff66c9ba413d38c9a663754100a5dd164b760c08b62456388e099d800fb58596957227031f0415c0bb32916a3be44ee5fc2184e9b90eed136128b0b3cf5f46b81d4550f25614cb405bed4222be21d2f371625e0456095ec1149e01a64c7de3f4b791dafa9cfa7428f9b7189b15c4efc7ba7dc82b37068d9e047e597b3374ff403509187d07b8f98128193864011487760a432603c321f0ad6d99d828342a6745f7e29ea125144925f1aacc903194aaff8e4242af5f216283430f65b285a0a87381b879cab43fd8d917c23d9ac3b34e849272ce99e86f9a36b86dabddfa64a39cc0aab61d4a3b288f6b34de803e3ec5bf689825902448c1e0bc3ed4fb4123c54ba85645bf9b5652d332663d6d26df4cc9f731ef92accd8cbde6d883055c2c8a8b0acd55e421ba2612c589712afc4c321166496bb1601d6cd74dc941af120220491ac4cd7d40471f0335e36b518780415daf4f261a8eca9d06d59ca6546c2273cc2cc369a8255027e97c1972ab2015b417df89e722d8b76e6c8c5cf018d48ac8b135f251ed3c872c6e4f41f7270285650600a8d03fa8db8038404c45e7326f90bc38624dc41a53b6103888d5730dc0dd5a305e236230ee1530edc27a874473b33b383aa3108a0dd5b91638b4d528601d61b5dfdd88c2cd0c0f693fec2a6c1fde5059f0c5da8e9841a7d991594a6551436d0daf4afcecb39761cf64663aa1b93e1f89c085d8c2f7a09fc704db834861d57143da2e20a5de7d8e5141000f9d8f09d7e3f320af3f9376760f1e0b8f28e86cac9ca77210d8f10eb589144b37ddb2dc67f61d7cda1ea90276475b48920c6ae2b8fddd71e364acdc2ef74657594c29ba5877a666787883af1de6f1ce40c55c75e1c5317917144dc9e7a31cb31d1371975e181fa78d6a35c4836631cfd9b0d3a9c4b59e489b79532a4039e2364f8387bc9b3218362dfe0a8b2f7b8be0826d23c219467edd9a0921ada6dc0f89e7a33145f295a16a48d37501cb6d62080c2d1a2c7009b14a3240a9a74153e857e680f293c130d28de0ce31d2f8c4ab16fe2c7c17c769a95bfd668fb7dce596c3b8d763b9d62b17242f76686c77e31bd99dd755e512db25a1775722ac3d6dd830f8898b89df49bd3bb3bc02a09935d27bf7a6849f96f9759629a56326c0fc20229359f57f1acfeb672a483e9a2bd93f3bcef8fc3a418672ed6ab41c0a5f8db49bd24ac10f4797ec663b91ba4d38ce7c3eda954a2033ebf3b2e116d420dcbbba93028c3d8a52b4bd85e8dd23c38d40286db03fa6b03e96bfe70038281cc1f109ace5ff080ae4229ae8a1171b91046fdd4ac9c91deeb3519473f95865c9fd4b45a5d552c362b5bd463590f0b809b987d3654ac41b860ecb4c65fd2b993d15d3e4f69343fd34ff1d69887579c919c044b430779026c31d7a2cfbd7402d7938a8b4616670008f4220e1e1074d3b0d2624b7ef4ba7b15e00c8a807fdfbd932249c1375560432e7cb67520de79d76825fa218058614aa0eb72693e5ec1f5431af3789bf9f4ccdd375244399f8ccdcd32c98fc19423f763b5b286c09f6074f502b05b92d8282e23ec6be1a7620c206154630ccb20e444fff3da328ed3d3ed13bde7a232f28303ce5e874c92389c950ac62be1fb7bfac6356a522771a341b21cbecd2c51864b0963569574ac3f709b59215b3e96c52714448e6bf71b4462ff69f200ee84daa7ea452fd7fe5c91b4b1e8b8883481847fe04e4c266e54f3c6a31c0c1ec5646a14c862f331b7b9d294704e26f4fccca4f143f3100bee27f2594651ad74f9083eaf0f115f01512a435406a1feb331897d39c76f58163555bd432bbc003be3d8c77c46b4132bb525edfaacd2dcdf5dd09ff54c4867f66c5b0f2cb4db34e360daa9a41d12aedfc1c48bb052f861e482ce0642db01d6b4a9581afbb4b953e031d2901b684656153f6fdec2551f45dc0bea314cc38ce079173fc7c17dd3f8079953728377ed3ea46b10b50be40a0e1849d85f2d0df3b9faf86769f3b3f0b412e3a28733d6462fdde8c72d60f4143ef0270b02a16fa4008f5adf2fd091465cc7748bb1a6172640491027a3b55c2e21669cb72ea63e24b85f7bd6b9fc69e6059e66510c8851663035d1cc2e266d6405f949fabf9a52a6de83eb518fd0f631c107ecb6dd4e46d6036d5d65a0849aca15ba57383385ae18dc58916e7346de360f3e33c8af69b650571ea24d9b763b60b0cc4c90c455ebf940150007a6f5a6adb7a7b3a4a765be752528f3dece0e651146fa9ac4bcf70a4cbd05f23b7457c6b409f3c04991e7e2db8fb43121ceefd939873154d89a080311c7da55ec16d02839133ad72f2b4bad120ae1c577ca1b042354e6cb5acd9a42ea78101362cf00c7bd60623c92a85eadf9d59433e9a319c4a16f76bd5db3bbd862417f6715686e0a87157fcd9edfa0da3c94796c70e5e5af670b23cbaa53952fbfe4390feab3cd7188d7300bd9359b4852e9ea39348405e314624c23b858b20dff041f7f86375a9d9f829108b188183be28b29c00a9045307726bfaa8bf6f046e86a2102cd993b64aee76fb3da3c1bc5546a59570fa613ad0c609165f0981b52c4e8b02c04ee2a99cb1e9d1cedec7583539afa284d7cab342929c2f0e7cd684f131c95bbf73dbaea4a9712654b4c609f7084ac038549ef1f30e7e8e170ab59085f26c0a1910787536305112eb269331eccdb399036b8245e845533bba10c99e8d3d10959a3d81b4681e8c5ebb2f272832dbd0e14be48721433876e2da8b456fd6fafc89c5da671d3522cf206911dcf85522096cc51f91ff82423912f0b7a69038d64f65b9aed52a90e300e48cf6790df4c42dfbca6e0fdd679e5190eced8ce1f9de9862aabe7552a8c527f278e38bd56bc88de0a75279b794751a68b05ed9699881cebc3a59380b85f98bcea183da3428552b14f34f06bdb2a57c98459f1399bed490ef576ff2908a3e75ba9ab6f32c485b93c51359162e90e634e8ae88deb3dfaa9d607c384fa68a139be3bd400202f3671d627f32cf79ba045e422e6656600f9c85cb00f8cae4103240efb3fb121857b35c09132685c90e6bda867beb8079afa68be2a7339b5f6f7f9585613e96cfce76f76e9e7a96d994e0b8a67efbb7187bfb2d053cb51fe32ff1074cb1a8b831bf00d576240ed331357cf7fbde6548f2386727a10d78ea3e33fe2ee845524c72accce51c94eb85b0e79f440569341c8672402e38a163d9e40d8e685bae06ed96b9181d70c32111acb7fec20c25ab899612524bb78056fdf0b5ed599ba16e5f3567b09546940681df6c4c4ec7a19343a8b76bdae704bfa34c6eec80c62078d3b8f318a6668cac720e0ce70893e3dd90e1571c4e629265f29456dbd69ca49063ae7eadce35d52a1dd1689ed85345312bab7b32eb82e92fe13e21a32c10f44ae89ecdfd14c014f47a94aecceb2b578bea0bcfabbb768141ad2abf5fcb58fd2ca06535275768cac7bffb0aadf2f18379ec00f0de236ff7e7962ea51be7770217cfed5093febe33073b01f5b490bbfd00629e72dcbafca1f13b235ac3d9a208191b92687e7b422bf190cc7447d95092f7792b7ef4ff526427ea9b85a23228c9c899328205da7c4056e2f7a9122739f2ef4303cd56e5d12de28059a3cdde66781843f04aa5f9a93ae134c100986ddc9ae623d107f5035156a0432554db6c4f86b2af0a15673aa44025eea389cc3b4fa268845d28973640b9082714a1b94ee45c6925dcf63e7401ac59c230acd6239ffb75933dfb06f3956cc29a70a306f2410b925956ee9585af828f085c3a41be3ec41cc10bb3ca49a8a91b4dfc660d40c4ad0de956c3a04d30c677219f24ccfe91b61cc7308dfb15d7989d34858c95c20eaa42f0c4ebccee2cfa2a92ff17bfbdf22caf27ddc72f7a42ea77d7545ef39d9742fec10525ac643ac2ae345737582792d7778f951cc058c478c9e05b0a727cf9cbd95613dfa5c8bc5a1445499ed255da7b36ba06ae27e6f56ac7a8350570fc2554754ce961b7dd46d203725a76f4cedb7a013f4ef890b1724f92155b80142f53f9ca53d84166bba8e61e2bf043796b030265ffbd1c73e29389f83e52ef2bff6bf5b064e933007a34d98464667c6154f81e331ff0063bfe92c91f1a1eaea7053fa8a48d27581c403752174f6303fbd31cf465be558304571255aa00b0205b9208cf5434dbce7d05a172dc0ca9c6be0b0bfc6dd9d55ad573b17a4f347a8780beccd5baa7118bd36f011c05a113a5745ded7c94f889a4a06cb223e50424df6230b7aaf3af6e00e6c6ff078c50ea070a6660a4b62a3f1bd03eb00b77b3368edf30c2c7876297db8d1949f5f169b6632427e24bbdad4c24efa53a3e781daa49ee17f10bbbfc1fb4cb1116823b0830176fb098d984a02ef5dada86df36a78b1b694c0a33dcac161182b0b8650a0a2aa8c5ae59b6c8b726708b2ece42b1e4caeba00640e7b55c6583131950e76da7aef52967adda831111c302ef3410e94657dfea2cfd8f46d435450205ecd3dea1a10711669e2bb66dccf8018f5ec09671176ac3f2f00161210846a1c68325fab11ad546b92666f39688ccf72784c8b9b4e4c29d3419b676aa4058744b49ff26a7a9522a004f7139f0278d1aeddd90a0368939016bc1235f401fbea6da6db0f830c73f5895c689bb859027e7f435695d4e9e421d66e2763130cc610367498072972d25e92d5abb9d10c55062a19963ef184332e0edac12164994ce79352b429c0647eabdcf1d27ce4f1e5f009cd454576fea6057736b3d63b64fccd21ba810df51907e686435cf34cda820f177f32728dd976144a23d6251c9c307da5476b759e76657d9ccb926d277009d354681ffbd5834efd7789819d7098a0539d3f50983c9cddec55e21ae1dbb576b9547cd94493cba7fab99e04acf4f550287ec1b54dfa1b94f16f03f8f17e591762b3ee8a2954691a7d1ea13ff3ffb212c958ab88bd7f9a9f7b64d52d5a6788f29fd14caced33bbd58f1fedee1c8096e38e0157fae355480017c97b34585d7c7f040c8aa5923bd1d6740fc287699a8e4deff1e4f324b874bd799bb32c4cb9fc2d31fb0ba9d144b428515e2508fc5eef38d9315a6012fd654fd4e40a3a704d02c1b380d7393c069717efbc82fe6ad7233afb6ed1bd8c44cfb03a4d719cb20fc665fa9d33fbb1679f850dda3a739194b6498cdfbd10dd5b956808ea57679b702b1873835eef5b3d4752dcb76122cffff5dfd140efc4888a4208c2118fb8da9ba1a32c6d140191e718993808cb600690390c2e964bb57c8056e3d3f825c53e75bd980c1888a10d6bd1fbc5e15428c5d14c1da1bfd1a3130d00a24b4894d81b49c0c23aa070051cd15ef3a5d065e10c7c73fbce9eddd60a2ebfddcf428274ad44daf6cd0b6ba4571516c1da09d2c6778cca34423be0d092a16438eade64614d2e8a625aae716ca77d76080ac7d078e84b0d83c97eb10732badd26a6eb3cf9a84f639f6a14b390b21d3e2206dd536c8db7e81a6e2bf18794e64455577526e0308cc5dd09a30c9930d6dd8e6a73ccfa0732a59b3cf21ae827a213f9267bd9b67aa866088662ee3e7fb94286a8725b89d67703b80edb51015f5f1390afa01152463554ad11052a071aa129d568a501c75f0361c401def3c318112068141a189aa23d85a311e5b18579ea7fced4b6ebb14ba7258024c98f42cc1b74a1167c5aef752b3d48d02e040188a4c369cbb7b76e383c156d4de19e7ea0ea4dba80d86d68fb3e6b7d86e6723a017581becfd3457bdebf4eb6b9a7a121a7e0c2f0141d0af8d9d2c8d3ab67f34551931c91eabb72e44947dd3d48988bc86d2e0e904721213f8358221f8ef537b338f3110510cc471fc9c0b94f700faddf9e8b3020206d51c5863b2aa7016f71149960cd71208550f8f098366f6066fa158f97a60ca8d6b00e6748e7ff0499cd5644b9dc1115b2b2e8ed2d308edc1df1faf3d23aef581d19364ce730cefa996f37a034f8abfd79b1cd24dd319c1b37894fd66064b6d17dce474a2a60a67e6e319a427e142d9a8ad93aa674f02375223b2d1ccd5e1370259d86a9b9cfa66b1349fa35907e8abd6427e3e62c9ea1042befb7968217c45ea01819a0d913b0dfbc7e06d00b47d30beb8d6ccf5fecefe3cdec3acc7d36a3afed45ee31743e2edb2f864c66a8b98bcea141b58234e48d1344184664c286fbddd074e75c432ea3409fac40fc5af9cb72c94b071008d19ace1d3e7c100ae4b2afb76bc61412fb56e279aa21f3592266d0d715b801b8d7dc5f207d23a7160f6b5b82b0cf1c5d4eb3f1d79dcc141c7ceea198c5e094f3e368a5590e2095c46a22e77534e8d5a512c691457266cf5d727121fa639f302d0ff4d68ee9014677541363197749b4117f26555dbe377fc2b43e9c2ba3225c40d112483be2bc77e201a01b7ed7200e3fac925ba08eba65bf4bbfdf03c90d292a075ba144d07ae518ee9d3972f7f5243bbc795130e2c17d76e47b923999117b3cd1dcdf8e85959e0883454c9b0d1e007cb6d28fee31baed44852346bd4b57b8d7d4174e3ea491ff708c338859c416c31bb4b6d1e945bda01e19959305d34a669c747da019fdf462c561cc05488837b6720445e296f8404fd1de97d63d81e391410e06a5f7778695d041ee3aa67678b9d001736df07e92e5f31fa3ad12f2bf7e1066e7404f86808e885b51fc120acbe617018d06acbfb44216f665cdad7068deb07903eeead2397ccce14e4bfa3445458ac0d82d3a78df4c84da9026b50adb9abdfd5f43dc856347691b772a8feaae5fc9371c3db0b0eeea16aeeed24af67769c952d2905e7bf2430069756ab34c9895f318f6c18fca705214b66a91b5cd1b6f4ab1bd17f1d6fb383fec72cb6a9df2e4e40e1a21a89ab607f21c5c78b5e590b8089bf200a99773fdbdcb7cf01021b5911d6ed74deccbd39ae2e9664eba590dbbfdd8f12a6836cf5eb0cb8634f11f5d92829d4a1317c09c639246d5fd9f8dc8b11e86c86d91a62e0886eb20fcf5fdd8f61215bc5d099db083e99fea600bcaa999bba78ebbdfbe1bfa31dc273e4808975b300915452fded1e0afa343947a8ea97c7ec14d18468397e45e7910441252a97e173e6eec084c0c65e972f3ef7e3cf58f3cc25d39a1d3507c576681f7dfa3744cc3f3049b087d38c84240fa27dfedb5aba4447944a8190cf70d7e871ae7f53445d1433964585e4bd7a5c4fef8b3c807f9d941371bcf7e52d23ef3d17411182d2c2462437be4508a14b68af5d82f1b94ee2c58757b2d503633c5ce3d745834c86ccef8b9c3a46b9160c28b95d5d8f75ae0c55323baf55cd6d85669afd32dbfa1fee427f126e59087878407c2b398a975f91124c6d260a72abb514dd46c578bc7c2a46d871bd8e850719a98655bd7f61b58ee3a0b3d1c1aa6fc1418bb6a79325c42396d976e623fa91ebf4fe639ae19c306c2f7388f8dd3aa2dc11a2ec27c6c9a086a73065a12c85ff0b209936521caf16c4abca3700b5adbb6036a3a1e3bc4368d50101ce3f9c27c4bcc2d746cbe2cdc50a8c82771ee349a8d106e41b064357652703ecb5bed690aa7d866c55eb7ef13217e35dd87db949884c00731f3fc12b79cec90253cc8de18c3cf5b80e276ea9781c78685254ae6a7c75858b1a5344136faf4597eb63cd7ef970aceaf324cc22100e6b3677332e6459208c89cc990e83044dc8b6e2f7ca63715e67df244b75a0a971a9bec642a6eefbdd91721c378537591e4039cd0771e8e823d8abe67c7dbe2c95c014ad78bf42c6ce4f91945d0adac3e509b9530bda7ab12a96e3fc4b2f43c5de5aa1ff2fec7b4f6e7065f0171454a8b7e0bdda7a6659ed636a1222277db5ac838a4c77885bc0e85e4726941ed5692a46baca6bbfc9781f43507382d3f6b9dc203565d4438ac4e06d38615b1e54b7ed6e5f4b9c9768518c41d5360992d491923a9e53784ae10c722b859d71900b8acd88a61a0c457b2b61a5f5259dd6c0c1e27b2ddf7641d422df5247cc9fb64f5f37de261d1618363b1a59123e483533d2b21f3db1e80cad72f38a7919cdb98864dd5ca3d749872af03ea9b312a08e22ad7de1c4e0e3cb5520560eb8b94d7a240e8d04ffb03d27a57370e5a902c9565ce198271b5509956ed2c7ef539454dcf397ff014fde0116713aca158354f17596b3424eb02d9410ea83a84c6f94f2e36f0c9c3a502ea8346b9d840a6857165da1ded045bcb6874fc8db93c94f63b202b0693e9c74081791991242ce0c1c000c795c7a5a8b1c26501133a4dbc11ea20600cab4676d1402ee17c9c7352ba669547b9606e65aea332e4cbf5c73db10e86c0ed40e0b48c69070ca0d8ce0c5852c9335c771c65ecd1d0e8f64681eacf3e1e45824ce8ab6ebb485ff14d0e70944e41e946f77452dba51c16bf16c97320ca25f7e78249e54be8e978dd77886539f71f221c58697a6d6ac93219d209e21bd28328f31809cc194c97fb88c52569b3ff16156ce75bc763ecad131fe609c9ff8c17bcaf87afc1420782afcaaccd5ac1ea288c8b3c006af5da853ef5c4c53ee281f1bad88b3b96a366e44b1d5dd8ac823e94e87f8d3d75217f6fd1d35aaa14fbdebc56a3342c5b7c74e8ef90c10adc8211b25bd0f7197b028de57f9261d77f2c37af9e44f3709998bb3dc0e13dedc8b7a499515c4b9e88dad468089e04b796cfd9cf461e65ce823d65ec52da31fb2ec64ee4d98adc61393b1174c40e26f7336eb25bd19048d861f93dc020e03d0ca6ba7d444ea23728117d6ca65ab1bd651e7aec81bd18145cfdf2d355bfa0fc5a63d23ca0170bf3a367b987c2e83367e64ede50d199af56714fc380cf4310d5168d02d08e87b3f20941a1233fd6458fdaf260cd625cef9919416a9abb3246bf08a4e7df1e0d3ea78966b172763411a7332ed65c5007033a4b24be44eb3e57a85c2376498f4e2c56c21212be547109b5594a0b7a2fa60a2e8e1c32961600f279fd27da05a631f6fe51d58d3c6ce92a6361b4937a125404f85aeb400fe3f9fd7affb74579ce51480977178c59f61b42cc50ccd694ce343c8d11cadaf336fc9820711491d5360310fde7f7edfb08221e26685c2055d347a959ac6f10c29ebb4172d7722e910c3edca028564a549641588ede3bcc42d1d563269fe1baf111afd93d13d48c0d39bda4cad60752ae158c1e723fe9a6d1384af86738388994e804a5c33a57d84edb49989f2be35bfc6104753e5fc846d8d75caed7320db5d66bea38eccba839dd32fbe087577bec47a50146e36394e4f69f13bbe4592cbee1d80e33d53ab48faa5dca2374e7685a2d8f066672e73626660038f33ec43e83740e43e66d30a78c447991b10fae1ae880b626063380326a69c2528128473889ae74cf8c1b14de13926c00e66d2d2df7f554216c7e0148de2b5e7d158e1e409730c3f3d891600cab15ffbc1705975aaa2c35623d52fb0eeee28ec0fcb602b2f1c4acb49bab7e9655b7fb361bba2bc3c801c3965cab78fb9724d9b8b26546acf9c7d3806944029463397ce1c2dfa29938f84aecdc5f1c8181ab0f9276f5566cc0763cdc245419b79694c1d4e77e2d5f3262a3dcf6c5d74420399bd11586711355efa5080e6f2328e05d9388d7d867e3641b526115594ead4ecc2e349d198b76100dd7575f3424e67bc0767ead53a85190d05f68131fdc776a2106feff3ac1309f910373ff12c1e9eb8d4db4c2dd8988a707c4425a65d721e5d19c9116377d8f1660676bd6a450ea27b976aa875a060891f109025f86f47b449111df4e8098de305e0a32aa8690b5c9be4885b621fbf5bcd1306e8bafaa5b5d01b7c8d25fd260871be7e92dd07191720fd909d0336bc126bc8d68e54fb42ad5f5bc913764255081d38ce761c9fca0c23f0c1918333c0866f2c5457b110feaab8ece1aaf1eda55daf00d4ee569e2024351b2a93be9efa7a2d4215a8e6fb61aa98103e3c4664213f27e7b4731a6ad4ffe0c0621df7d46063089274ed8d872199eb43f3d24454ca639b5461579962bd62b9064e464a584b03d31b9b9cbd73caacec23abf1c1889c030fe170aa961f0d0c32d375e63271ec018441c9a79b30211f3ce8cfbf438cd6a1f28b66a96b1dc42738dcb132aa610377612b3c73b33ca324effd53da38def1fc03ed94a37f99e26154cbdecb14aaa21602f46e270a3b1af457d5bfdf1ffcebe9c9ad52a9e17d60809921722636b2a3a323d38dbb2f0538f4fd8fd6494612c81a7ea26f04061cbeacca72c4e783d6ffc5d18d15019acffdf7cae453955a8ecb3ae2b35e9cb63cf6ed4e6821bf2b96ea04d545bb46ad31cb0ae3ec732afa4dd02c3c99976ff522032d2e0f19b5da03bb9ef1db535ba7ba1d4d74940a875c1b53af43bfa4b257aab755e22fbed936aee0117a541df2b73c7487b88aee5df254f3c41c922b4025ae6ae8e6cc8048e2dd4bec931d44c5dbb9e3976ccd782a2518600d721ad8512588c62cbd568bf246e05b5d2deb633f383138da0e6ce2c6aa7c42a60067cd112e8c04d5bd8a07c6b6a91f78fead1ea47e3f4862ec1618747bacfcb844741b08edd892fad39c3844f3beeb3bd3330d6ab74ee1e04d98ea4e562aab8bcd7ea23515c94b5341d77ced197ac7fb3fb6394d00eddad7903766300a0cd70dd00da127be077dd49264ed5be996f644b06299f1d5d424c2eb695781a7d9e6c974f6d24d8615ea477edc7b0e0449569927591de73e702460361a7547226cec8def2e6521359904885be1078e31347b708459461ea51daf867a1c69d78096396749f95b357426016d4c47b280c7e3a0b82057dd043f0bfe9750d12bd9c310663c52cbb43580fc56711b2215bccb7c5e22a15fe25c0eb2b57aa2e49eade2b417be5cedd404403d21e5299b8c2823e4bc34a0a2384b6bff150d1e5774b4c1d41f65309a2332f606d44bc4a89d3d3b84e1a38ed7bdbe86eef4a1196954ab1129dc7dc3d5444961cbf00fea5ac00f50926e5ff6a2a8f76f3405fe0b740201ddf516c2e89a2e6a3375360348017a8cc4e965a51c7126afb7259fe7ad7f08d4b406a51e7c3d99626b303dc6018de9e9c1ca238e971fd4deabfa47ac06344b1807150c01a8218c2e98bf16570fed077a29acaf4e69d56e4f13fda401f90f05b0709a66d2bc305b09cc589b322ff9f77cd67c5a95f8d60a9c0ab7b5b20ec88da73c5946c93ff796fd396adb826efb63dbb56ef96b60d49d550800267115a97ede2ee4101a2abc2ca8ff2a048165105924c5458e33e38b4b41a6980609d8f43dd16ff05804d50df0689ba093e5bcecbce685391f2b1b0605b3fa3130508f5d7bea6e1c8300b81c6864b6ef3cb2a09ec8e39a8fce5705cfe58266e2529e65262fd3012bf87debd52bad51359e37c38ef688b328e4122e9e6f2faaf3a875692be86e3077444f4530281646452b3c04ccd832d7c93f687d1450dd7be559b1b5ae2eac819993a455ff78afb6d5498f5454437d1fd01cb8528d412ca87d0e0b65d943ad8551b2b4d5179b78664c9c3dfc110444b3ebd29b6f0d3a19b377d14628a5ca178279e60c9a2e6746c9540fc16120a9803aa506b8b3c40c237ff6ec1bd990fd85461629bfc4de2319906172a29aebc417c56cd919d19f8a4499d7ae9e52f922cda5fc38becb94a16689cc48303e12dd99c3b623ae2bb1e9535624dc0c8efc1713834a6a2fedd24f70b39d527e041e1151968e63ff965f4f9acc37a9f7fb886c1c39aee4f9db88da00a5d56ff2ba6a2ecb2204cd45fbced070cd26e698730708f7e42243279e20869ee629ad29a78f2d669ba4cfe436509e9794aa1ea0a2fc1edfed61acf3f35c870743aac0438633cfde93f082c3d57e006908fd0765e3826f9025f820901068414972b459bbdf78c59fcf09cff151a598eed0410b891a5b757a1acc935ac1a4f66fa1e6ad6ec1f7f68cc8342450e60aa22032520b5e1b23b4d5c4c7386eea13079e0b9fc377f835ef0db2ac13a6aa6487731d76392c043533581b525bcbe708b8d8d2a38850f1d5b7d476ac1e04528aaec6a2edd1ce6995e962aef02c1d7fdca4e9d01a7493da498936a1b9e4a4e46e7185e19bf34227c668ec0ca44c11e0434ed11ad54ee9b340cd716b9f7f21f3c915e2fedcbc195986e9d18e93e595e4b3adeb9f390570ab14b8b2f95b9af92bfd9d754012a0b458bb3f01637a5954ff3568974f723c905be39e011399a823a22b72589cb7e662ded450e18cbb912bc5ad7ee5ef1b3a85622a32685f74e9785ca69b9b25fdfeaa0d1c386c881768ad9cd8aaabacc377bac463eff67f2e198b0133d380e1e1186e4f605d8fd6f81ab37a3aeddb99d15e7883de559c74557ea55837234ecf630006cea52064c3663fbf98f180e4bad16fe01c9923c8f82e150944a2628594ee06c40a99cf4ad7b5f5973553b3dcdbe57f5a08dc30e1e65ca0ff6f225ea02f5819b15bc333adbcb680286084e11586179a83033831956c98b4aec969c2549ad8c98e9e9f3ec1948d5347bebc859f546c2fc740d3b9682dcc4edaca6345ff5961769588dec8260cd3c7ecd6aa5eeb462548613f49d66cee9e2b2c1c1013b6dd7f452f4666bc184ebff7f71cfefdf277c72d5e34dc6411bd71f38154814ab8aa1a5b48b6117066bb7e4cb62c9f045f342b06cf40f356436f8f19850e591471e8eeaa18497f8cbd31cbbd2faf2d48a41ebdcbca2353f66f802399d7e7bdd5941812e1cf5d884d889cca3d3556b175c8cb0c7d3a0b61737b3504104678d6458d0d45b41586a222562548bdcdb2e5dd6a3c62eb6e25df9cd2f9646be0a8402d16b1a29d1a7f6fbc0a49731c07c1faed0e9a67c9d0134af0d0386d31932ba80d30691bdb8a33568e75553a5cc0ea58a9f45278848972b283f68580f83211b0dbf292712aef815748cdf0c424d68f45e7743c06e02fbb4b2332c95f8a3a3f138ac542563450076f423c7a86885745aa56d1463b3897e04eb38edb49ec8c4261f7d316154fdb0b581c502d462618f8e6ae4294f296f2e98a85c67effaf741f6a02298f0e7541d4eda63bdb3b79e0dc307703af7de7443dba0d58410ea878493770554003f9bd9325d26f961df07b6f87d513063ceead6571c7f1c151f1143cbd780ecba177b5306cbac53abd6f7ccadb7367bb160d6a6d998736555c4684275057095e9b844acda8b0e677bf1d76de331e3a994cde0ab19d8fe26d6d5e402f7511a009aadc5e2258d529da2ebfcf257f77231c9155b61225fe5b85615d4b3ecd3bb163086b18acb0f0680d4b2d3eeb974f1e8220cfda4181ece2e5e78508c34426a08bccf0f8e903777899398ad8a5c0d667c8b246482edafa61984f986a487c83792098ef934ccf61a37467519927173fd34ec6519644cb4e34a17209a87b055ccc19279ddd91835ccf39b5813e6e000f5468a039639c97424b0d26db8dc3db0b944c070e78bc53abe53bbaa1a66fe075dfc4ad68552e52dfff39b9baab72735b6ea3b0dd202c272ff07b8c353c80ebf8d26a4431c2782a56067fce22a1f9e97693ab608d2c12dce123e5b781d72331c52d688cffe3c99e4292219c7bc4382f5b5d5a2b549d75b96806541df5cf66dea9c06ad473bd5d1d34a6b6712c8972cbc8d4454736be94e0d1b2b59f188d454c07b586c76312460d26cb7b9e07e4cd077511aa022e849827d286f91bf5a0708173c53267cbb039dc8c16076547fa559ba2746242c902a40bbea61117e6aa78ab6fd75e5fd30b2ff7d64d4c01c8c9633633514d5daccf4a0ea12af7beba1a6fb1184dcaf31d934152d61a2e6357b099128b0c469ac0f9b78ffb12ab9c4914f0b17cedada55d2ad6b099ae302fe08a52a042dc6f2d80a1cb13f3cda58e040eb5ef9169890e6841ac040f9713048a3baed877c56c26c9243143639144c1e0e7b3df3c37c30a745d2c20b4f99cc84381ffa4a8de94a62f10b12da900abac2dd7d11b7256b7d01a7b3f6b8750c59f5c8bf75987c86adc8937e8fc536cd5caf31f585aa8fa08509449456c56d3c0219533e7e30a66a801c178e338030b93dc0cbf5c0b50934dd8961418e4b8e3056c7b439ff27a79ebe443d603ebdcbdf1c6f9623c48a2e82dc12a10691813e9ffc47220cd1eb6d76111467b6f051ce359fcbf3c6a529d94c41eaef453c65eccb3ba53c7fa04755b4a74454d3fe8c290aef660bd04ddf5a339e96230057d330021f1e48e9c117bb38046e59a2eb1b84a8795f9992dac05dfac1c063bb9b206baed9ce9ced087bd97ddba53efce7925d06bc0d9b1df32b62a58ac42f5db3376dfd6af77f8a4447326a560f5019143cd792d07c532576e2feda104e318a1e9fa47e2bf11bb3dd4717509bfc654cdb21837ed8863cea86cd0c31ad778082d7f9299af4224b0f2d89830301b821db776cf9fa4158d50f97fdfa9e3ea55a99374d5d414bc5f74051116e8b16bf78fef3f414e515d1f85c1e642625c9cb59a0382ae99d37cb8c7f9a8bd840dbf0791552b2be4f3730f03c92ff8260d1afe330cb2ff1f9cc5102fc92e21cfea786041d251d2b4d1369dfef46fc691926e8d959d135af1ddb30ba791f2c610314ea94518fd9bea6683af8e47abb104d45c3866f21c82f867bcdc9833c9fd5e052dbb6662137462020061a9c3a451acf17019f73405c0c45416f98f5bf08fde61bb7bd0bfcae39888eb72da4e9c59b23479587e1d7a937e0285d4f560fd54e2c5fbe16254974f08d68cd5bae4a61c50146e4d3c1acad85071cc8b4dd098e6f211d06eadcdb108bc8189761f89abb31bf6e10db6af6c971b344cf2b68dca5b5834d71ee13699ff8a7aa4d55e140abc86c34387b6b790954fa742b90e761a15914d4d0bd9581f56b71cff849fcec26ef2af6b8ad974c0c0883aeafe509d94fc9f15418a9c23e7cf0f0999b689278a34f553eef90fdde79ec9d285dad10c14ac82fb9afeeeb79cf591e2900538c87c7e8b4fa38546f7b6cde31b82ecd844470d550d786d7a6da08cfa752a9b3f083b9e93de3eea0c43ad654a31abe26a0dc0d6a6fff4d1c09be774ae16b9b6ccef252c11c1f85ab0c47bfc648a3240f854e3058b5c4ae6e14a9c3bab6543c34840f9c523c0fb6d1ca6f873766ef67fa87f638f108c5c4358e0e1c1e668a60160f45fcce75840db7d8a6e26cff83090220957348518514ae183d713b6474d2df99cbab107505a8e477f8767b2fa4e274c5f09da377967119ff81894fc74de6e0dd674cfd46b8adbb3c7fcebcb9d635a3c175eff5018e91bc11ac2ccd3f9cadaefcd1d65b53c3b03bca1c093f943b1e8082d21a00b49760acdeea922cc41a0cdcb84df144bdd0d3799d50b8441d341ff6d3678476c38662277113bdb1cd3ab4a949475c6c8d5d1b8370e2d1be8814130e052c2fe0923cd57e1b568cf25c88274f57e052d302a2c471b219bd3d5825a24de11575fdc183650e4748e06f2b0acf0bdbda56582c4178087f3103e1e07232d5f6f7fc9ba0865ade15b5467b1725e80917868576e0611642c3fbe1ab3872218337de34d00b502094ade1773aebf6b966d07e4b2fc2c48358fb6e6e182b2cf593da96aff91bdaca1af801b2ee38b6434715920411a1b00fbb584b7fafda870a44f1c81a94ae74ba5af24825cf6c80ace787cf5b5b90840679debd464bd65afe420b0014e7bca2d0349ba5ef7eec9126aafdc8b909fb4a9d9f7dd78d1d6b6719a7f0fcd901c1c77455cd7b194f9f2390e74f32adda3092a44e42b35511c17aca03d75fcefb70b497314c7b3f43462726e0f6fb45e0aaea742b4489d9e1e570aad61720e28d3c49fbb21b68253f8356a1f4571a56b146491776cb2bb610f2f8cfb908b52702a354e9134e9c772883980de64f9299037a66dad45bb90882ac80c1ad24c428ba5e078dcb528cf6a6ae32a41f24a30d7909ab186cf0d27c51ffc7688ec6a2c08cee99cf5ef92c9d1f28487cc02246a2558e7f11fab2061bae61389e3d6e9b8353f351d4c526d8fcdc4a194a5b2c43f0349eedcc3413fab17b581b9225c44d79de547441062a39a1d25bc0244e9c719d3233efbded54dc2e085b16a345ba742514b7e57b322b5107197fedb69a11fd08f7a6b3cf205260572eb3ba8554486e55440f3d4c14a98e9df0d4d0e53f3555108c8e9d6fd1db6866a0eb19fc62736aba7a28fd752156a5d18a22433d4cd6a50863885fbe7bd2c100590fc9f33236aed8d1808a7715341dcf46a74dd0ef53bb1b5b7829a307e34424c821fbb510f0b6dfceeff81a96d12a8ab23570d88e18392324044ff6b23f6113b2ef3a6d8d89a8e1475ca9ba40368584efcc9fee7b772dc3151e006346fcf47f1756605e3e3308e6131ea726d967970c094d268041b69d27dd71d64f5a8aad93a666cb770de059cc429db3c1d6f6f4cb80e06323fd7ae41700203723f22c286c6f9c585aa2090621c15ad07a1e3075ef43891b06171ee0aa992c82d19ba2e536496b34828dabb97bf93e9f66d0154b07b26c1afe5c94e25262ed0b77e072d9bcde4f0983e5663b81c165c81d958c288a842198296b668ccc4101fdd3888ed20172ec4ac491a7a1bd502cdd228143f3f60261678f9e0e4c1dacd09dca57af7dc62a448a50d228904dd34a63c54320bfffbc8f4d986f4fad9521fbcda32a7d0eb2072f8a57cc9a9fd98dbf514991d387dcfe512c715390d101a96b8986ca9906a79940b543146dd35634ee4df7c629f02f666a40de9061b1790d3eddbd07375a9c716e7ed603ea9ca8cd28896cc2e410286788079a86e8a98a9168e553cf245f5268504d9dbc2445386adb277a2a52007209633885724dd3ed848927607ca10336c02042133a16d195d535c3e931d72da11f022b31213668c312eedbb012fada2dbdae2573cba3aec6857afbb0e911f2da8b5a17ef9da4084c00e7f0ec9a64c26eee289231c62eb2ca852f246d50424bfde20e1e0ea51724d181a79e568745523ef5085ba881416d41491d8858fba4d55ccda1472bb0d4a13ef58f271673975a217c526617088ceab515ab46d442e058ab7cabe08a00ab458b316d412ef603e0a7feb542ea5101a30a891fb1d1224f74737692125344d99a5a82c90383e92771c48ed0f999925dd6cc7f150760d7b673564e814750aae22782aa2f1b51d1e22756dfc02013379259bf42f0d541210c027a93c20e729ccfcefba9754c33006e598b2916f59e769eab2eb1d30a41e16f88f31e05d0c59a2ca2921db973443bfae1e73af4f096e69f70e75b269672a6939f2c7509c67f70eea5e3a6f6a88b878da3da819bcbfd10f442748999b284e30cef10e04a21cfeeff9a746d40e699997098d0aaf161511b3ec93fc3774365c0dd95258141d668d0789daed5d2493fba3a3368972088228797aedcb14dffc890676cc93236bb832ff370fad0dcc21c28eb394e11bed660f743bb3aa6b47311d8e56c8412d106b6454a8c67184cc6a58487eb4fa9b1ad307cf243ff718b034883ad6ee15c6e165f47ffa762f53e1791d4fdf0b2137a74b0c103e9c83dc9855c8b171ec5048a61370e7fc41251a9dd77846977c4b3e1e4e19031b8d00215032cce44aeabef50e554f66780d190bc05a4c46cc9cb6183640d0a339678abd453f4bed1da807176566f4c78ec9a600f6912f18725bb9df4be5cbc8e69f2ac4bc318a0bb215eefc615ae9e8476a2bb1c9d3098d53c24f46f93448e67bfa075596b630d9e4de254b00395b58942a241a5b233a57d91aa5a6d5654d8a888256dc8a2efb9d860e9f1bf9846d5af2d676eed4ec14142cb05b1e4385aa69b6942faace341304482736d55e016ab22b26e10fbc71a4aa814ae232e600ed5f214a92c7f6ef433b32713c756f42388651a8d60be91e3aeab2e855a49f026cbfabdeed16bfb8c8104ded8d40d2f12d329138e177f041ae224706a8282e096ee32cd88aa6ab1b5f15f32f4bc64660d1fafb6e3d889304d11c44d766944cb4f505947231e8058dfc8695051775e11489d1616c517ac50ad0e3daa936f5d12305f726e512bd2b8fd0f9c65c55d75db590338c12237ac6ae225251049fe231fa75ab09787e5772840de6cf8532b2fabf7d7afab1f5a67a043522bb965893d81fa2ef4db7ae6ddefed82131f04fad49bcbb2055aa89340bbf613305502e78c640c7775cc62e9e6f80eacb5b2ec2becd558eb20766d4dac55fe175fb8be6d0966f7de8a8db4f3f9ecf6c215a0840dea81dfaf55fc1b5be025aa494cb4ecde9d2ae576a12e6391f1325d77355623d76ec99156a33cc538f6329f9e29a8d49fe623635ed4ff82b1d58c84ef69d40121daf4c8237334ebf17a0819fe26c008e6a01b5bf62e14ac4bfcf6b127658f1d9ec7e40ed2bd0a6025f53420d5320b558d166f21cea428cfb2ac60c5aba6b103b2b012e4e94f1506bb031a13086086268e25915ae69ddac5af0bf981633e52d916a16a499c3304fb0c22dd08c1b01ab0e76ee45c51a5c43e5718e0e2d5cf0281cc2a0a3f023a26d7c412f86d04579e5ffd7d56658a958bce8a2f274573ffd3311af65bfb54b2548664fb5078ecf2a24b466afe48f0f1c0134a6caa9ab357bc9f1917ff5efcc856cfb58e8eb9aa162d8a765f28341777f4d716a15ab2aa1e015919b2b45fb96104cea03769a597f00c8386c962708c253f2eee2dfc85050d7ff770c6eadac57fa3113b4139a8a928a506cc6796db1eb9f9e95778190eee949776b25b33c9becc3867a41d5f496d5a2874f2d58bb0a1cd7c8fe2ab76d1e8b670495f5354e280e8800e29b00973ed95ec33d903e87ad82555ed9f50e320150eee122c31ee5ac7e39a4943c3a4596f64010a1ab9c2a87cd9acb133899fd5926d1c8265d2329ca12429bc11f5f12b804b34b83de1c7b1be82469ff6f45961d8de97c34fa4810c63d89e6abfee9688c8ced4676f14f434b9e0b83b10f0e1cd6366e1feb528f8d192ced0aebe7dc0eed39ba0370e654b98d28a0f384647dfa3299771134273d2a611f1c492b4daab46a4e0e07d1bd17aff2f5a884008bc2938e8d24caffacf854424686d80fcd3db393d2c9d41e21bfb54d25970675c93989f91f944a1a8514fe81529afcc9e47ed7278467ad4e5f9566f025538d753c59a0d7ad9a23b7226cb4b69f99a8cbdff5b5968a46cbfb92495925da1fd1bb484e37d6f94566547cd3364d72bf598f90010dc72e108b70447ad947b0e359cddc3f7cdb4bc56d5e4ae0c5c376b50df2ff13cf85b39f9b1f3a1191d9f63f0bbb56130fe7af74172a709c4b69387405a7aa497e020b55fa89c4db61b867c4204c52a37048b5fb0f1dd9ca3613262e5a6d5ccdd306fb2c99032136c1b73133af9ae8ebfa8aba80f95e139d09b686f81044872220eb2c948e10b6391f5b3dab8c52b942e4fdc4eecb61f342ba938e8577fc619d04c44b59e4f032fd257f2d11dd75cbffb1bd652ecd995ed9f5508862375321070c24b037c8214d0b8354b40c2db6b1e1a2e88f5183c52f3849641c13b834f4b5e4a1bc94ef5a141ce953cce83576edd22c24cec0d9626c8f0e0db42fd4a7d8657674fd73fe9fc234cbb0bf5f5500dd691f2282ae1568d6de58a94cfc430d608e7dcb6df30ace38140deb113345e74eec8d8e8401174e5251dba354e1635f79faa043db7d70a7e1281fec49eb68bba9c764afb908fa23dc02aaa1d1164cbdffa29be019fd3abe3828a328e0a13cb7fc363d3406a0ba2af83f7dafa08f5785dad1d7593023cd4cdca84263520e7883148d2ad7a26c60d9002152b726f22c6213cd6ef0095966d9b1014ed117f0ab521f3cfca2a51a91d74ef797e9786207925277f654d9bde1081c62a5899266ebc8e3c7b9afe1c75333e5b9e17e72f6a4649f0402c1a285a626a895627c5ab0da54579fddbbf51b8d2acecae17876614c174c85a06c8f1b5747a94e645c0aa658463b420d6882d578f0f7faa1ad45e3ef992c4c2d6abf7f023d4a5c5fb33c14a65afc0ed86b565b5738ce2d9e0ba21bda31657b327e2996f3cde4758dfa20aa0f4ec80fe7451f1463397134d2f65817cc9582fa1b102c27062306178fc27b867f8646f04ec1e3dc4cde8a2622b021b524fbeba97c5c013ca8d1505ac689ebf19d6c72d547ed4560c822cf2b1606f0db9ecb5b67a0a1c49e6d082b554d6ea8ab8cc21d23c82829b0fec7258ededb3b88ef42e277a3d033d24da0fd1285d475beef252d759a60142390bf4c9e083d287591cd605aea5924f52e0463d05c7f8d6cc56d59fc7d9fd04d197e6c5f37164483534090f9a26b708e42fd9fb9d81c99e3c564673a077090edcaed0ac52aa9bc850141bc75106c0c51c6fa193d90a805f88d94b6bb10e335a315c5b9e71bc71a9494851b80e137d9ff0501c20f3fc453029ea33ee72e1698d8ed471e22fa7ee4350840f24ace448c663d43ef4336de99a8f8068fb6c8b662c0b0e454a594455902b36ffaa56517d65c6553dfd85a1f8b2d41920328bd2c6ee662922836fe90a00e08a58ea582d3e9aac7702d3f3e776472ddffc6b1707967db52f6ac35d8281553b88ee42b4ea0ad18a668a57a75f649de9a856bb577c2c1f65fdb6c69e4cffb96cc71af3c36907b81dbadde42d8bab2f4f69004cabfee15afc773897c1787bc3c62b39446567e197a000c4a972f2a1c3d4ba203ea8fb79bb8092713a2d4b216d7ce3782aa3aaf0414bf73447e9845012ba80117a9a382e7308c2c21e18706528dd9cd9f6c1f004d152014537a0550abd6847e53461d61a8b668ce1a6d5e9cf281aa8a245731b7ce8c4085ab484f310fb1ffffccdc523989b127f819352ccc9ee55007ac4672dc937c1637118135e592a02ec925e0504c5814542eaeba38dd18e99ffdbdf03867ff8e25d277fb39e1643eeb4f50a9db9275f9b6c7ed393120adbb2558c719ef0e81c389cc9da66dc7fd5e76a2668e5749e9a8ee5981c84a9af6df13fe0d4933144a3bb9452f2dfa48910eedc6230383bce83c0d91d4ac852a1babe29cdf65188816725f7adda6568de7777958abe00660b86da30b38d7698ccc1f8eb91cb73e9746d1cb9277e9219086f4046cd23a12f0ad570f2810dbc246b54833fc7d7f5a211901872e2662857d36e0e726114d6626bb08f43a5d4fb54902b73a0f67740470542db7937106d5697f7e35633cabeb08c0a5fc044a7513b8b99e14201396616cad4e821743d83dccd4d25b0491df90ba9d40bac2d31cd4004b6874bcbdabf840d8d24ecde8deb06318e99e007eb60fbc4257dddf6c7474b844e826d37b023abea85c44cfdb86c8ded8eef400abf0f88a899df5253524c916c535287d189084a21e097ef1791c64cb2a50c3dd1c06a9454108e4d88a9775da6fa48fec30e1064fff20c9abcc49dad3858d51f22cbd6e5d0d93bc14e9cd7141d8539e4fa0c54587b5a321bd2534693125dfec86808145dba60628aa9c896877da3ee01ff68c41146c742aed48118f29ff58321283717c4cb06893de2a26304c88ac745bb2bad5e9fb8e4ac6b4acdbd54b323aad6240e579149ffad7e3bf8f4231feada53f76e0360267cff35d2daf33c3035a64734f1300da8bb7af57e16f15e2383a1ef5abae67766973091be366c3682ae9a24603eace0d7add3987c7cb814ff2de55b28ff7fed1de1568ac482387116db6a20a8a6b4574cc4825f4fdc1049855016741697aa5077034ec3f6c620077f01aa986ff0c926b780bb3e9083f1be6e4260724b334135fd226273f917bfce6f3bfe2cf1a0768f62d2e1034a54f3d7b12ac430b90819d7e1510f5758ddd17563cb3d5f860a9bfec9fea9cc8fd1028baa9c602970fcc54dbf5fc14712516814ba27eccd30e14890bd20fd8aa956e4ed521fb4d805fa10dbdf56c834096d7c0ad7010e636cfdf520c636f4029a7e1c5d78a7d40285e7059ba9be977f76660a1b36d361802949257c33406edf069e0548d0f1320f7d349cc026fdef5eba25e0def95a25e523fdbd66d8bf967b0e27940bb1a437cf813020439a876f361fdf92a4d9136d83d60cd1ef287f8d459e3359677d4ad12adaae0278cc5c931a0c4c6c0218fee68a9990fefbaef01a02b6d5794f8d5724f1cfaa78c90441cd84d5eb9ff3ab1bb62e42d64c45a2dd59042a698aed09424df5a6010b826c2263fc66fb795f3ab76d2ce53bf936801f4c76e87e7e964bbeb5c5c3a395d936430bad33493e14ac7a95e04140f6a5668c2682bb31710b2aa4d8bc7814bd1222480ac172d8beb0a464ac1ee1a11317e95dac8575bdd01b85eed953099b3f26b1060f94ff90e5c4214497d6332f415302f22f11afa21e79ed04209dad292ec7665e44401a405872f50c8727849f1243e5021104694243e285d6fb82ce0691db0b36a98ad35ec1550033752ae8c2d59ede4a93540c083d975c3aeeadc8e5c149872d692d181256cbcccf3b6e16ba9e3d9a13df70e00b575a96c053358ddec74d6c562a593c9e4b76444aa670e79cdc1b08abb112668f7c6502343c7618ff01e2f6168086186ef880a093db9a2cc470c96ce93ae4bd7207d847cecb752e4c621f6812bbf69f1917b5992d407cd8e041b5b6a7e9cfbd9bc43f2817684b638d5daecaaed029657bbe8b20ba7bc89aff00053e8f9f4ff001825dac8b2d25c95cbebf4aefc82e8b203d66ad7d9f6c4e8f078ff958a2a980f0931c8712171aa2ea2840e0abb16c53cbed66d4e7ae4fe9bb2ea9da668bf2f17b655de77c1fab89620119f324e32762c02efc64d9e261273e8310552935815d3861bb6da942229fec41227b56a907ae9dd1fb831e7ea615845afc492928037a73be6b97516966f27c6be7877d7b3556fa841b638bc7e0c33e4225ba7ce49cd48b3cf5346ab6545543708502cff53c776b25d32e3e5733ba6ccbd209a56ffb8c19899aa6364c7f9f563a9dab5301c02d090e7896368d62d1ef8faf4f2f2a0a38a592b3dea55f3c1840dc1266a599cd7e879e2e6b14a39e03df0a0dee1f4312562a9c2b1f892ca2bfecf9ba44c75fbabbb157b4ce387a529ebe69e6dc4a23af5c8355f071a2a7abaa3dbd2370943412a289182a6a9fab9160a70a71d385103cbc9d9d8ca0e5a86b973a3b77b33b4e56f16cf7f924e0dc0e75d8abea6e9c8ab3c1a26631b7c33d0ac7c7744cba1e8dbe014984cc59168634cb6ebcd368306708d75146cd05416ef056f59007e064d6fb64c96ef2582b5193d1e56b17479d3a162a0ff2a18831f9bb5a222ed31be818667e21fbb0370851224cc085b8c878c448ad9a3cda02d2a31a82695ab89d7453c5ed9d22994713c602237e7ab0181e4c987d9e504db5c21f3435e74eef8ea748a2628a711bd08489b6319015a84ee049b454e75352dd47af4856144bad569571de27d95a067b036c6b771f9bf8dc4607dbb88259e496a846e0b5162fb57e9909cbda51a41db8f624e7f2ce46f28fb01bf6193c77b8960849cca58a64f8180e0f55a4cf65aff6040e00ca79fd547e5b727727414fcd45eadd9c277b1b66c9a1fe707d8f045bfdcff6388577ef4b63c083cbeab141ba321046779210e240fa2d41b9335fdd7262a441aa1c6229177b1c1adb9d12920c14564b38bcf984237e86ebb1dc1985809f118af2f5026f313155aaa270bfee839e9eb262e10481b946cfa5c1bba30637037ed435e7eadf2fc323e563b0880a05004ed2dd84e3009c5e52206f21c7002a3b2c20ddd73eca0c1a4bb483df59c31d6cee5ddbf2ab8bc4628cf656d195de3b60922f0e7e3def95d1fdfba96c34369fdf4120d669280a3d97e908567f5ac0fb8984a5d65bfdda87c4f8902ff6949d2386c8dad44dde3eeee1b6fc3d0eb0a4784911a7635b564b5c4e3d118855efe6ebb948b2b775ed0e5203a2c4f913718e2955582f505e959356d8dfd326754f45d2b65562287f4c225e629e8c24f2ad2cb81ebdcf56102e1f204a551c7fd7f6d4ee0676a5fa5f1b36aa49874b61a18bf9399b19e0786528caa22cf3b4426363a83e05cc21a795b4de507bcbff2b844e1fc272a06b3a0950c1e62b3ddf325a2a0286979fe10db8810d09e56406366dd25e3b8e91b329eb78fd4dc272dc2929469fd20e0a48de491afc9044eb43b68efa587f7fac9a31c69256f3561f0099563b36d923e6a4942e39622588a0e990d41bdbcc815a265a5c64358f0074632733f641a89ce23479327066c5678c489ae3ff2340877716888a72ec198d253b8cb771ecc92df8c43785eeebecc58cde08b09e00d4a72c4b068b459865d9a5582fee7b675427993118cb15b22adc2fa800d9f7995d2a32e4f46a2e7f285540f93edd0a2b97255188c736b3a30a265f30302e7e42cff9c6a5e31cbef0defc58c6ae8fbeb9617d4571ebc210b756378f3fb9bf70c011921336536dd43454058fcafdb238d3d5018df322cfa9bbbe6996c551898ac3996d293ceb1e37c5f7dfb71df30d299d1106249043ee166a7a54138967f10015cea8616ecad881e0a486f8078fb9a06de9d5a25f70c6c60474b1fdb6465df4f1d1f413817390bea3b2893a9eb5adb161044ff3745ae4850ae53203443b2dd8cae952f41d2c52fc2bb610122117c41e4e85b28d3375becc84912561055f5726bca0b6bb13bc70cd8384143f3e2ea27bb0edb8187df8524655f5f360650a77e37a234a9e08ef0270d685aff9acae4126974e70824b5371e8bc060cd18671479aff003452c13a7487ae2af8e185ea12f4ab3d335a1a6ce852ac047057d2b8e2bb49e60376419191aa72d285fe4f1d3e740a51b9fc04cf158d3187f6ade4276d28891ffb1aee3651c1c0b5eecf3ebf0a83ab84489b4a59283c2af147827145365d4712155736787ab1cdfea7875594cb2c6782e3c97f978cc754e6d4dd62a91a9ba1e5a253a9010fe7dc652d3d48f77aa364da80c29ada405c907dd61f0c47833b3a9c5f1ba65c94b085f65ba46b1afde64f7fba41938ed6d8420a4c51dcb737a451254797e9d3b19c22f0105325cc4596634e9852a5457a301ce3de9dc635a07d008a2fff32a4d99b6c401243f52c3afc640c338fc53c107c2423bd9f962d80720852b3f75eb0b3608238f627ccec1594fb20ca4fb71e0d1c4aedd6f782600a968bc52ab2445fa6b953745eecadad9c1b694e2c317d60f0fd81a0c52cd967cdbb9c790f7c4b6f11580deb7a495267751d29e85443440fa92eb8e15bf816da3f3add123e6494a35059597d3c8785760ee34c01e572bd757c86d9ae3548f451e84889280fbebf33fff77d15b614594aeca9255f49259a58989190b88c5c18477ef5814e27d8dd92468c425db922d03fb7bd5267633f16171032f87d6cb0e74dd87f66a3861f51e9c1105930ca868c80a77374068c31f7d4871d469a5de48f78be15a4e8e57980853178508368e24e2e11a4a6e06c1a5fee6dc4c987a9df2b0e1b906230ea5b08524ecab217b061ac444af2343974858e9232d401a933abd055e3c631346e7ea981f37820244247421d543aa86b34d3b82ec78c5b9a722ca08d4ae686758fbae050ca77c1ad2e3a96f2e8f7c484f1208fd4551e2645dfddaff4b630b1e21736d79f953e2eaa37b817126027516a221ae5cc855e8c7e6f5b957329f3667bf7f132b2a0a081a987faa4607cc3e8a2bd3656430b1732ce46db5bcc66c3e943723d2587ec9789479ab086b324144f66316bc6ffcc58ab2b87c6b3337b3b3e0001a3f6387f84fa40e6fc6d70b0a78b50a5198e6ff7704c31362b0a2d892ba03f39dd3e171fa2ca9c2ee27539bb758b472b892405b00a3758bdba3dc46bdf2c7486dbfd3de1184a2a5ce26bb21ad0bf783fcad1dace76df9ebe97cefd0ffbf9a689d46bf616cab58c0149fa4e86d0a29eb2f7a314e8aacd4d7fc4e1d868a0060f58856446ec521fb3c3d0a1938a39053ab3068f87ef6a0266cd9ff9001d0852401c39c37e136ff53f487dfbb4698dc85ff5e257240a9d3bd8c3b41b98ad36fce90473fb6ef5197e04ea30750e8509db5cf5b799a7bcb3f6be321699fdd28a2be739e453809707a493938ffc45366c9842a9e07c3223872a884e67ee356a0e7bc60e1067c59086f5f4d6e2bcb39a857aaa843c0babddded5f0cbcd255b5f6fc55f832677804cd7bb1143ad605f745ab7e91490f6d092333d944bf5b967cde3fbb23464fe1663df0e992ddf60da0d7c25428bd270f91d0d5cc15d0cb0b223a4af458076e2ccca3c195c99a685a61ad7669c549ff90e148df565dc8aadd67428d1973d4b47e66eb99cce2865bad6f508cf94bc898e7bcf89675204d0e09baaf033e471a4831703c4ae3d29a7f6c26cab93fee1c86b01b84e63c38011a20ed3ed98bcaab80a7e94711579077a9d424780138143cc52a1519abe74f19616a2f889f5b47a4e3c18f8c78ab638e2a433579d52b855fe49332d4aea08f3d22114c43aee85d769c40cc1d4333dc1a42ed9da6e39957904e1fb56c9aa8ecfd875ced91c39dfff44fb56560c5d3039c9b7e947c6200b02240f856e3e47cd923465a55e35f75ecf79f690902cc6b30eea19a76c4b1ad498d18c09cb0e4bf07ea1a68e74d173e50b2083519fbf786ac2ce65b31fc6d1fe197deab8d0fe36eee26d8c0e1c5e285aa94c10131bc49cbeee02d1791efb64c918a6864fc4eccc1d20b54a9da96cf1487bacb9370256b0f0fa7e25b06a7c2d8fce078b8d3ffeb1c5b5c730d1125eabb4fc2de6602a0b3cc6a415bbb13c85a5cc912f08ddbfaeb04e224bde0c74a4c58664a090ca00112953cf19f2c1756aea44b8200a91f260b545f9570731a17d8f055b29f6b7bff7b4c065ffc1a3114ff08ee108a72358e5a9d2a89252b15b227ef0665641f4a332ed56bb6371f5e6f6d52ad6bd34b83a0c82aa23e429b5d557fa6dc4b2266d3b28fffd7de678045c39b175980927cb121bdd7204eda230acc9bc71e88b12ab3a059925e9049cb3099b66d4c34b171b12043d318fb7294dbb0f05ad255ce1e97d8d4a581370c8fb7d05f3aa4d2312a6b3deaacec5e6641e791c10d840e2f02b2aaf689e7e7e966baebec496d29e784d24f60c7553bfef5d41764df80a2bf5a88f3fac694150e3839fa92d059e280d86afab5fa6893c7adb6bcf791682fc86d043ea4eabc60999f040b3be5249bc3fd4515ee2356550cb5daf8b7f8081708ddb9df081c3a024168986e2c2cf2d327514a0099b3d201cd4f3de4fb959a278bfeef3ccd1b7abfff2a1c72e05619ad854255ac849cf60bc6a0328149e89e0b7a80d7c2db41e2c12a5df38be8d3407e7fee24e0670b91856d7373ca94d99b38097d1bdfc3712c439984b5a7c4203c24c0eb3eb425a680b0bf3357ea07105112868e81bc351547c6c9bcae76e623835d4a010ad854c6be3c7ce4865b05b5c99304460674852d8dae28b77f61bb81dfb677c574da289f9c2e2839746559752d426f52667bd00af12cbf2aa8797245b75b4456b629223a650f4ebd6d02e0373e8fadc945f8cae949c18feebfc60e46f27b831ab4486a59c5a97fc8c395e711a3e4475b09853d13ecfec57875f86aadf3ee2741f2b5471cb5b36f5f4d87598c7e10b24b598f64ee3dfdae4602ebb2b3bb9988d730029328454d620b141ad48f943a1c90301dcd3d24382d08a2a83e9d77f17ac92eb91f5d47f89649a62c12ad2ebe560bbcf8c449fa0b691c2db91323dcad33176cd9d82dea00ba0fecb8f0b499bad0a52ed067ca74f12e2d28367b8cdbf309a68c60e4d36e2d52cf72dc5da7417535f2c898183ce77a43731c079dfdc0cd1601143704a78adb050688b78c5d77fa6210bfe34df6bcb03fff5cb76d8b2b6205a183955d5c413c80ffb43acab284e1d2dd2faf38a913684716cd8b117f6ede8d909dbdffc1144ed9c49cbadcaeb494a0a42bdc4856ee925c765ff5f1fb9c683232fbb1aa56aa5a4e83edaf31149f2d34dd7f471e6488c68d0acbbee82b643cd71d4f7d461e7af5e891cbcc1cde3ffd6e4c108e7f209877279dc5fea0ede4de0d6f3ea027a837662868b082a9a17bdb3d783b42b64d383eb0f0c230e058f405f42580f4cd6826c30d27c092d25a804c9fd56c98940085b292d7bffc105785b21cf2e9418e0ccf266283f6837b9d1a2a7bb8b975abd826ac3afeacf2f65e30dedc03b97969843bcfe51eeca3b6c978c38eac7bfd40a554223cf2c0f3ee68b09be12ead3a721e9845a9bdeb430466477886983bab699edb1cdcf87287578af4b42366dd5917bd71af266684b0622d688e0739b1be0e8a497cb0bbf4e77182de83e0359069972e05cd811e7a95d7c345af539d3733f9579cb9443b53cbd8b8170d939cef3f0dfe489a7f53b6963829b7eeefff5cea2cd329ee234381797d7806562ff4fb03f982874229f278668c453f40728f8db7fc7fb3f6367829be85582d069ef9d171e0ac5af94889608b93b1d63de9668822710b93646a9ecb4c5d719d0d065d4c3e9c7050c02dd7efb8a949f6172e786ed122740563518cff617c7196792952d339eee21aa8bed35276b955ea4af2c2df2fcba80fc5152dff894b8863a2f8133c209fb47295264c7238b55ddfeca0023b904b3e6e3b903a4393cb6e3b61507322452d3cbfa23e3f598b144656a815dd6d5349c8ce2c0986288fc016d89301fff473b3be353206e031fef32b8f493a2884b6fa851566b727ba3380cb5b82fe465fd28a0b335b0215cf6a24921eaef942ec5401d7fb6156c3e8c07729748c42bc34521555b180cb6cb9909051ce11f1bdb226b79d5ac8bff989264a801a00e7918f45402797973d3a4270d646db736e47eb3ae59d18f069a4acb1bc8d7c9896bc549ba7472f961461295bdf9cc24af642e3c1fab4d1de0843c89324c337e685e7da780cc9da16617fe292baca5759c62a259eb8068a6eac3a0ce7fee7706994fa8f33d4fbc5465548d7c7d3f96d73ad926b7d033a9cccfc242c56dfbaa5dfbc5d2a41d4d07381730ee2b6a5b4d6af71b1ab509d0043d25418364da5281801a789ce0ae82df2a93593e6a9e165ec4a3a932c2b2e2ebddbc5d5e7740b121e74df71f5b76acd85aae9f0c3a47d7c609b3e9fe2aee4c4ad1aede78216cb6ad373d465e1ab4cd049d131a9b8da49b216df88ac4e1b8954938ad6d19fc7f93544c380f1245b4044345bbe65bd7be863340311e2eb17cfcf56c12587a3ec9363c4a3781e49499fe3dac27f6127c4446e6668f8d53e787c8213b4776c668dca1b705a27c7ce1982b7dd7d66244e256db31d3c4f1818d3857b1f7c1461cb792fd6b1a6fa397800954b18bd55379349d90d5c068268c710b790a5f6203c7d2a23ae5c298118a9d110763607e09c875b4fce3c82a0c52bec98e2ef0262f956c4f76700d13f875be0430976533788208df2370278d6ed513f3cf7aef0b207ff75e0e57b45bd8f9d08680cfcc8f0c3cdadc4d0db9333e1375b3ee2ce792c9550bd796226b1dc4f12464786512531e578cbc88a154240ffdf7b25849e5991b6c348dfddc06c6678081e7764ed3328ef744d36f7ba875c753f0753dad041ab89a514ba6259363255f9465675621abe34d5b6280bbee49385b9059a00b2bd03ec8709552019f551116871aeabe8ac2b5f8ad6d4e8f5472f549ff6524b337ba335c72b74e7ac18fd6ec40010ee3819b13963b7e4a2a6806c31876841b57593a9bbfbc4c6f000cfbbbad3a5226afee32701f584adb9dd1757cd011b60eb92405e5ce4fb2a7c7bdb6c576a34795cd63cfa1965c0cb306f8516f43f249e291381acda942cba3e9b7946f92afa93e1210978e0d896f370d8fe0a5614a702e4f83224ed7bfa34c155fa79a0bc857116af45a65672954b6504cb1a80d7c1d876ad69266774b409e6737bac719c41e690d44650ba40c40a1812a15639099f34384934df7abe558f8f2cad5ed97860baf38245ecf9e422c83c2b26fdb6b0ecf79418e29a8f5ca5aae551ccdc5f5b095f580703902a869864a95d899bc7ac6ac32a7a8c50aa692718f610c571d787a81c24867a2bd0c8befc32632d31babfc0285bd333679fd15e0497944ca5d7573a2e71b8122b95bf9427429ab401d8c389f5eb241d0de8c42770428e66083d2ffcecaa2005bc738b8cc4d9d301b8b36af4fccbe6b566481c537518fceb5be184ea7db54808ad83dba2063697ea0631bb0dd4d972bcb54b19a4587c4e8f8b0f1e58c86981761ee7246f8ea15a727e7cea352ada116a69047dac2eb3ec871f506cbdf034ca47d5f84a5cf8f5e4819fd085052fcb62810eac3b7cd3de1c4b4d2cd100e7a3b39882315fe711663fc38d4de389712ab8951c8ce6ec095a9df93a531497840721a9bdc0493a410351b7a146dea900697e94b44928bc3becac7d827a0991ec3bace45f649c91644d3cf4524bd15eebdccae90ce5535e512197ae75f73b70e7f9b8bd2e19851d5f2ec477f0dfc44d8ca75059ea25234e78bd8083fa69630661d6db1b0b7dd84696744ce3d4015c4de0c5f8130749967d7dc83f03305e7eacbd6160aa6026946878e657056c1f05877980366ab67cf2f1b0cd45efeb0bcab08a20f6eb28684ad2bb519377c0989b32a8a5c539fd7aef2b9e6f0dc410747cd35921842436e62373e29424d3a5d8d705666daf6902c4b7a9a21ade7ff9c6b0bbbb710a132d5f9b24a9a8057f9481caac10fa223d724c7c9967b3a19cb3ed1405f893bb97bcfcde4ce2349a88ebf4df0064d3e4368939f177995092247c0d48c56028abe352a93a18f588e522c79e56bc6a4069744f98e1c2c9404cda21d58b0cb0f275705c1f619552b88911df20e2085fbc5c6a3b171820d02e85e92920f560c0d1b4279e4b4ce77ef3fc9dd963a920ce392ebe830b2f2b7efdda97cd053f10c1ffe5d622224b5ba31e39bf0912c6589ac71b22729a683fc916e3061640e44f969a6514399c2e6439eab2952ad35ef56fbd0a9c752559de227c534ddd76bb2308597ea336d3e94e37590855afaf92bd1cee855c5785a51a47af6c2708ccfa32ecfddbf5307b853216c6cac7fa5d00d84c87766746a9ca949745b9e8a1cc2da6659638ef1abf5b949af9976067cb8b0738627805ddd2c3542f42a39b5675966cc52853421477d24102fda54c6cdd9228a4e81a6ca43167b1fbb409c360f894dd597f8f7a81dfd1c8b4e4a232b544c23d6eb03b13f86e1827831fe3e97945eca436c39384df3d04388597db8d8f5cba2f1100fc28c1260cd92a2e6b5fae2a789ba032db08cdd39b275d85f19bdec57f3521f3f5b335fd72c4e94696cc01ae4a237bb35c92ba282b6694a3b178d924c7cf7bbda59cc7f6aec059e05a967e011db5b14c54acd1dc88c849125eda2c98d1907efd99e19e38956b1659adf5db40b542ca311db8ccbf6440e4bec456de4a882c00d54949914fcb42700e5ad1a465b5be4def55ea2a5325f7fe66e452ebafeec22875f245f4779df7a6b53f1b62b20b57030d7d9f0f0e847ad90481a38e08e9af16490199484d54117e5f1fc783971b3cfbe480b8021f49624a7357680312b7d458c805cd311a15dc198eec48e8be8ad145e6ef29531e7a6ce950133386a07c993ca7e85e4567f37a397ac0c177061562541094fbb45f3375241ef51098f06423781a98a1b34b2515d4be552b8cf079c75f52083a07e3654333fb264e2b7177c4aed2a79b4c11463fc7b1efe373269fa3845b4b836ecb72f1495d60d94280054920cd289212060e85e102ef34f3c9e4a9f590303bb71d580ef577154670786201e23c36c6009cd3f22b01cf1c623244041fdcb74cf506b3487528d7381455758f57e60b4eed9507084e561b840d360dbae7d7b5f1be24c75135b1dac99ca6930291a54c930b733b233dedb0b648c7d670e2362395787a65b79ec1bd0b61f23e287259ccd960e61917ace33a8d70329a70d3a0909e7853947540e217771d9d9c17acabfbe4e7044dfb5c0da80a39e29ab6cbb9ac2ea1c60807bf6b36f2d57e48fb58a22b95e11b45d6cf0c4589ef1ceb3e30a9cff763fdf332521373e2e0d66b6ed899a668e8f1e13d38040657c6a4ffdc7eeabbd8bed1a0028cbdbd7a6cadfd71bd5893532d93f56013adc3b9e19e3b6dd846a355af824206683a1e7e517e901e8623ed65babfdcfdebfa72955f0c480b291f8c7887f16112de75b86399a5db50f8c90e5ccae6a009f900a2f5d91ff8433b08cb030fc08907743d6a2282e38e1418aac957040d9b8e8b97071d9994504248a6f78e927da964c136c616f8052dc09c5c0c24b6e407a569ad25079b17bdb5a57684070b7df997f0d49c8acfb72e5031576b1802126a833bcd7774513e3b63c67f65891eec22e021a9a14c0ad0a59cb74f1a534c9125f03ea8a0fa3d7a1ca8653fa04da62c4bd64850d8337488ee65d429d973bd87f0229493c5227f26366eb805cc8b410c29e89f266338b0e8f7b4053cb0ba549ce1716684b20874229037b09a5aeba4461b1fd31fda9b0562c7b7826493d15c9cc0fca73ee75009d6a6d3426aca7215d094a523dff458ce794bffe2418c1de6670f0bbfc88bff87c26aca8cd6680efe9496a9986b66862851cbc625e9ae58aee37bdf927a8aeeb8ef47afe0f039c659e2d7d583397aad36007452694a7446ab495d786836783cf8b1ea7123c7873b3c22435084c75b29427937f5f42a8b212353268157122c5ab1a3b48411de5aede18a878b0d35e11e3d386780f9fae80cd627592d669fed54ccd1cbace778d8df53fc68aebab7d2d3ef1a53341ede4a4646ec7bf51da05d67b6c79cff46bdecf3a975213a861166e2c5e49514ced3b5ec07be0c7807a4ee935cfa124ffeebd39ef3a2be23ab4ea99961cc196e7d1c4e427f53b7daf116d5ab9768f22e09fae025d4ec418835765586df31c6d7b2da5cd6349768385c2d8e6fab7ef92c95a1092ad59ad360bde1aa1efe97235ea32434b7a5e53cee58ba9173809a73e78abd6220195809f1dcb658c15fee08739eea6bd120fee34622ec6992e91cc72119a3475c1df7bafd3922a0923ef4c9f3bb2677f5a093b083a56d48db2d51e0abc16b77146d8a03fdfa8649a1c53bd16d5083ba198a3e810731287b71c975e20df3efe4f4084f1f44437c97da6dd4ef5cf6a9cf126707da5106902a9e0def558073d31d4b320176e85dc5d556cd2c979a2640caf4cceb291efa2d6811a337bc93599faeb47191ecde0fa62a68442997495ee51a67b8044c78f6aef28d2dcc4ec5a2cbff55d2d852ecbe5d0588fa65c7af11263b4cab85baf75a1194f06bf9b9ec32b4bc4b4d4d0de85c2dc1f44ea3491f0f7a56fafecfe13dab31cc33a5b929f18cc0addc464f0bbd5769abe8320eb5d6e3b75aff9c0c2dd381dbebc0b57c9a2a165718e655200ffc9b842634ad008c8cfc8c6b847d52882a62818013ac0b27e7f99193e5074f7e73b98ecde767570b023312cb5627c57da95a27ef7a9462a64365ccdfb6c260cb5a20d1963153ae3c909cd90748d1d2ca9f8547baee5077e0821ed0d6a3d34e4b04b996ee15e46e1ab7c344d4dcfb059116dc0ffd0986a91c194446081ada1fa5817f9ad4a4ac82325ee93f48291c141d7a511bca771143e1c768cbba9a0abec42e39b7b59ec619e4d3790440d2c24aecf230b281234de1e16e14f5655f43e7ca76af69f15839067dd01549224b853a17bd3d7a1056e194e2a301aeda32ba8f872b12470509197a9722b22048f2ccae195cc563e7ea682c4315cc717b436a16a358134db70817b1b9b5bf7af5c14e1bc1a5c25612fc0fffcca8f23792a89ada7831385659918f0e28bbff607711ffa3e67b557084603d91db38b154f185fbff3bcc8e6f6e827d59f56ab2e6694722e8511f37d975c90724cfdd781c0a75a258bcb00107831c0fc780817648efc038fac3dbe6c7b2c6ba78371f79a6e74f78a668677330a6adce37614b395037be22f1de8367ef387020bd4c781e26f7e5a3e201cd27fb7518fef017415b6688db95d97137781213465a9cb980a1bdd1f9129778c488ed4ec2e11768887f91c9d62f40d3da44f6a5820d8817e7ad9ca3c5eb0b26eacf953489671c136480268f19f616e39b41157cf46d518d35afa28cf6f0e095caf0a3e654711f6a6d8d37dceef9eb1fb8dde678193071ac7fbaa43a482b073d4da1db116e03f36206026030d06eb338dd9a1a1144240feb99e6ceea3374e4c4f11356f8a9890468c537dd6d7a562b76d91d95a100a8456ced1ae4f71791e525693c9f4a0aef39beacd66cf2b0952f0cfb289ce421b680bdd5bd305da935d996ca55a2e780ea6eac78fdfbcf0ce31bd41d7e66361bd916e2244cbaf18648a50d6d66ffb6d1e7b8801f90fbccc325e695d37e3af09c0540f9f376eaac92ec04e64966ce76ed72210f226d111b9f3eed69b2972a4643323e8722c407f106ca5d4b67a8fcf807a955717924d10d6fa397c9de53a35dff7a9d807353f130f999d5771e5136332a1ce61f97f04339291eeb2c1b3253eb8c3740b1ef67540c7a995cbff6f84e3b6a3cdd097fbe53347aaa7c27e9655578b0af4c3dd9c10d66a3aeac7fa436956fbb4a726a8c2eacf9b3e6ff6945564fea2907420a558b980329119af8050369e9d1c1f63da15e33a706958dea1ec10c60d5aa3f19dd722649ef4af5af8127bea470d946b1fb6a4a2af860cc3d9b91531b8923df28bb090d6551cc94456b02c5b90a9f6dc158d58d13e824181c97be083e0c710ae2cfda4dda6210e2e2997f573c230e57f0227139ea0097f8c734c13e5788b1eea8c98590e7faeb5257df69bc6bb22d39ef30452a2246661cc6ed47bde322a6b33e5a048fd8458705ef48f994c76e18dca193d5752aab3b672be8dcef5110dbf90c64550033124e0ac341b70e65484b663997669cddc4d959635f2ea66c6aefbf1a1bc4fc034ad638f1c11ba89322dac86c098512b108bec13456afddfe559db05d273ef4937380da9974ba5961fc22d5272ec6c83bffe01b2b73e815e3799d98468ecdf1b46426c2a3cfb569667c464cf6b5ae336fd7ee1f3fad86c8eb295e0afa9af20c5fe17a4dccd44a22f69537b63224968e6164c10e0ce380c3892a8f2c90c1621591bab71f4d91d73e5f2e79836a2a15e7374baf7e7a5d7d5e5520afc8958b515b3076ec74f13b9f23acdb029683d866b0d99e39683c106797cd47b4bb02913d9460d127ba510d9b9a412c29d77585e735642557e94d9ad9aab12688e7a19691a88d33d37fd90096579d28edd098dca5d332962c609d3866f3e01cb4b3f4ac85903b2bb2383aa1498ff9ca6e1559e33b4344ff0cbe5f0afd7bf911a87df7760fb61d766a59733787373b74172febd6572dc6512ae4e88d307bb608f6f0993cc04dbbcf7f579405cf9e53efc141c710caa49e2dc7fa0fa3d834884b365ee035106c851e321945d6c822bdded499edb96b8ab9209ad13b9a4d06849cf9c51564b2fdfba980e76561c622b3e11758975d916994e4d98549a464b3e4919ac94745890c0d8360f5eb3c97fe0e1cee191723c2ad15e00aaeae7c6d134a6fa2a6d407c641dd03a75d3d593d0546020290b01a569a643206589721fcd730d6cdaf22325ca421e703ee6ece7ca94b7f93cc28a6e38982e17dd6f91580d3434ad84bb799ee6454bdb487d7fbc817e0e95e1c1801124a1b362f863c92acbbdc02374c802f2feff4c6bc6e894a2f2275b765b13be0015cb8e8034bd798e5d2af20c6e46b20e82f3e236cb46f0beacf2617adb21a31803e70e405eb13e06d9aa102323c22934d49df7e7560c6d0ead089f4b4f7f268bf4f70b422d3f643adaba80cdeb54b6cdb8addc2b5de289b9f15cbdea90425bd98fad274588b90dfee15659f5c054d528317bcfc76ce0e3fc2147a53d82de6366f817fd5d04a824e7802e2d6fee951230618acaec6721a9020c909a10bde2ffac45380c607825dc06ddbf66cfbb566ff3bf58b044a520b835c76202dff0cd2bd7ea9ab041473861fca7cf058be2921e2e6d7699cebbe2b26f82bfe3d360d47fe3ad63dd066975e312765d79c195c09d719e56d3d8e0c28a8545590bd9db462b6eea3c860e233aa212968af25a4d26c806d55a86e4d816519bc623b3f237cfa0393b852210ca762fa3776c31c6b245679cb72724d487478d31ec67a0e3c2ac48188d0a64afb04031dd4491f65b3a36efab4740a736e5641d9e37818a866481e9a3c503cda64f7d6e8a48b5b7e38145eaa2adfb21d6e21820e00fbcb69349c0f13bf85ba341a990aa77e36031bb10d9c8d8829cb6f8c43e4e6e62203a131b31bb7369f70fd5fe6e8b527093555276bc0503fbb6b1dd1781e5b3666ad1b35c6c7f8951ecb84c49c40cccb52ac6929c854a48f03ec1b63790c477440879abecf45933cd3ca4c8b9edace8a5bfa9622fedc4d1317bc593d2b89b137330a01c37b56ec0219c011e9890c5aeda48ddb533b94172a826e9b7d290c9ae29c91095dac263badfbe216fb17351a9ce1d2d47e99d1f16b77a52e3c11f254ec96a1765895de3279ad13b76d64232563e0d80082bc3a1adebcfd6436c0ee619ac9408f9e8e97b976d9e0733aecd58fb3a525e18e83d02d03c3da294ff10b806a9c6ac60e1648af328ee8eaa3ae74d8aa8e412381f8188599f62e642d5ef1a2f8df8263c0c744bf3baaf089eb5022162745370f6d3efd95b1f6e2ea84945cd50fc7351ceb01099f9130a608b9d3368464bbd7adc63cf73abbba18ee2a716724a2c5a70f3f47bf27dc4549cc5885fab4deb09da9f38859d56a3f985203cc5f2011ba48d704a29c5d23abace2e5ac63e3267ec8d44914485d6731e9b26063e3540295340ac75259965458e3d36d3c6dacc86e893a612ede7c71df302263f0370b7faded4823b33b45e4acca7146faa44a271ab7be4debdac39e51636a21b902142bf73b897af6d9132d131deeb587e14b9017df580f49668a222cd950d82b035db439c1dd35e93f394cf60ae854a8a5c95d24701a2617ecc23bff8d4aae14e9b5f9662217f96ca6bf15cacf2867a4efe4894454af934472edea827477e76f0a403a6e71c6bfd459c0a11fe65a186dddfd865fe492cb71ac6109c3ef0a3ae128b19e1ccb23ec541714b5c12f7cf75adb298817c59f8f48b706aca287af6d09edd7c4ff4de831830df93ceb75a10ce251d663a23120566bf8c0e534f091965e77d698056362219393e3813acc4aa4509bb2cd4c1cad68df9a62d8c63845cf73166f7a3f6d140aa4028dc6e96249ac4ef1e8a42abb275f95d2175da24431f0770f65f0798006a5213c42216c53c6d34d307012abc52b60837a80b86c1b6285dc364114232583815f01f57cebf46c9d3a44d607a746170de7ac70e798fe8b550325024ec74b7aa40ec13f0481516a6ae4b6b12fac8e82e4ca584eceacb9788814978841e9e33df361da2295f3da842f18625e6d33459b5fe7e6117c890e9de4e301f93894a9ad43b22576b9bb5eec27bfb91124acb9264e4f5d2fbf2ca8227858c8239291efbdf2e890b3addfa6df3743b8836cdf5c0564cbae1f188a6d00242fb13b071ea1950b04931cd3a24a855c018359bd7e6183211ba9bb95de5f51f921fbc121f8019b4dfbeeafc2ada1760d0753816a000725487d002e0ce37fbeef5db4a7a92d8d9b15ae209f19cb5db91d10a2483c2b57b106d00f1a61c617f3674172c71a420a27592f2a542141db34667be9c2fd70d918845acdc72c2c49c84915a4863fd9e8d2b1171006340fb4008aa0f8e5837b49a8a41659e12e1e1a501b61645e5a83adf5abab9678d7c64327296a5d0981819be41b8b0d30a86607cf38c1571712351dacf265859731c84c10d8bec882d8529905fab54b6338f1d6fc5a9ac404dba545f4d702e4750a7d75d26b0263b0db20d3861d834f7f757942c5f4f9715580495f3bc8d7184c24bf8f6b47acab0a11a235b2f7bf7eb7d4a8b560e9598565356e5110ace8982c033d684c34b1419bd7dbed450d6b4b6d8fec906d49a50d7dc505fa2a204a1bc6acf7763ca33f54519ecdc13ebb08f02ecd3d2a91dc14acdffdf90726db112d5cc16597395556fb2c4459f7a879affb91246d5ec3660c36325348818d74945f25cf278850ab63bbcd236044e8d368008c0de753c9cc9e26822686688136f7cd8d201464e1af407cf756b96674b630b4187976d9a07d0112d8e4fc243dbff99898e9df196871d99a63c418bbe30b6234c01576cc92edc2d53f9ce036fe112f99d07c6d70ce9506e4adf56f90b5c531a4a0d4f94248e294add2f72bb9fd34809c6b20b632d724166d7f24897722eef56be0d920e9873875559832ff5f0aff2a15b9ba143721d613d70f37de8d95e0ae837baeb2453916843cbde47e22fd41575940c0eb7ec3e838320414fdfbe60a5aff37079e34ba57125c04b38468805f6f0b7e18252f9e566495060ad2821f1c3bc2b202215232fdb9520e06ee9577b8ff5be164ff9bb8aa23bbf25f6bdf0e87e7355809324198fdbfd38ca162c52c7e3cf78ae69b66d326a14a286cec20e0d3b7c85739c6973180e488d6b750a5249eaf187fad6d58ff434b517f6652e48ac5254744e397d510e343634e4445ee8156218e1c76d28bc7d3302c7448d93eeda933ac09b4dda3fb65729389025f6e3c76a69df1b82a9039f26254e56849ed94aa51eede729288db980aebd5fb662acce5adc0e54b74b962cc42089122c6b9f2a7ef49a76b898d31d91bc61f648f7f584acaa7d8adcc6bd6c6511363f1ea03bf9a2610ef223ad4f62d4c9665d77e557acb87c0b3dfa0f784a8c7f0b516872f3c3e1b103bf6c6ce70c6d7e4536a7df4482f92a0294d82120932d3337f30d1244ceba8504e0e01a5d20e4fa73d92f89e12f34bd069dce4bd38b3278a8a1b6cc0d2175b55d7c13a266401a62a2a6c0adc1ab23afce1709cfe8858e028e364dbfc4d1ba97450e37d68fed9445b6849af9af9485c24784ce348e8471446389ad4a702c9ca30383403c77bac956fac3d81055e1bb5de0f7bea448d5bdcef4f366048bda5f6c1120a88e4d4ba071c9144c0164ef24f4ca00fef25576cc13e75a8c02dfb035e53ce8851d3d2b0884e8cbf72beec3eeddac78739d7e206eeb4a3683eee2b95ea99716b969e124599679c8fed7ed22fb68b3e2fe470b71decbd0421fffb5747314338468eeadfdc4b3f5bae32638633fbceaf15df15e1fad95f0c6cd9ff83cb48af57108a9e25541d3500d0207db6f6fa206fa10cddf174769b489e847457f00f2071a0bdce5ac6e5972b5f02aa03be7c1ae5b2cc1fd034b3ebf537399dd70e49c87211ebbe48837e10a3c16460838aa4b3653df58b04765dd1843c5db99e4c9c9f60bbd0899cb55e69289fc3821b3b855b61f2ea22b6a79886d1f227cc0b5d638a6fc836b0212b173ba7c923b9f7b0a5c597918705e9a12bdff1c88b0a8db10ee9d5142227003685f5a4410577a8f4f9784e5902175ffed7c2236cd49a60065ae876db3a2124020d512dbf7a0b0ce99841138668a7b10547b126b7b5cde4918bd5c9a27136dffed803ab56426b144cc5ba260d3df1c2e561a69f6eb79242e151277b8c1a3473f820adfe8b1ee94d9670d74bbedf580bdf8f0fbd05d23896c0d55f68564ddd6882ed9bab59fa9c97c7e36f58c65a6ae11d74f42725e20fdf4d8079a949cd58db7e05694be6f9d85867c5c6fb3a7aaf44c139d0a641d570abc7575528a96fe97fecb371ef11552d72f44724485ad2b67fbdcadaa580d962d9f6e2f4f332d48e25f988871bce7135d5de65a658cb1cab5a97e3cbe6ad69c57681eb15c0a1163da3054b3db8df4e2781599a1488b36eb479fe51ffb0244a375bc010db1938628296c9bc271580bd9ca1e62f340cd73b10f0f23db924187a6d24ba04a72bcb4c35cafd01e7d5daf93e7ec14af7b8e5b9bc30e0a63eafe2c088aa14aeb75a43e93950ea53d50c4f4092718420f163eeb0379993d52d96c839b7de1e1c13fec7efa19766dc119eb4282379d29c55a16d073ff205d76b70ceb494e40a01b395bfc671366d8fd8042add73eadee3cd86de613869e4d7d84b10227b98842b9780f2368af6f5efe8337ddf5da1fd7cb4a1925a06647f9be429c85c9d82eeb7f2ea03323e0d43236c655fc048e0cb8f9c719e601ebbdfcb69c147af7a31353b972523326e638f0340a3ec0d8ea9fec77cf8e9d444e35d2cd52d624b072398e11a5b3b296ec2547fabf04cb88cf240e710abf11e1c2ac0411154fc4a7f066cadc66e1c0a92050df98f36d9906ec933798651e7ee1b7976af66f62c5ef9e1abac9f40097f2def065dc7f697b9df432c04de91cb931f52a159b3fa55a3405ad921256bfe926384c7100b092bd24d6a25d4b2ed187c8af31e360c2a5c77b90ce96dd63e9ebbe3b6b53c13d756fa24209d13cb7c0bd763d634ca939de5258a2b725ca644dbc16693b320d8107515a5e869eb3a56a585dc3d65b07eaf27bc49b075f79c3d389fb94725c0a1c57c69732125871b1a27c6c0ced8793de8ac20071b06e42c0e922381246ed79fa2d3a1882ed143553fbb3856ef7650c0561be5c01c74ea71a68a5ad4b074fcfc1c8862efe12a2e62fc18db6cee43447d6945799721891e1c1212637f57c5d724c2d169fe54cfe2b0ab3d67836f8e1d277690bc041c69f7d3b02cd089bf6b98bd8f01d3f170f6a7e881e8ef888158421c1ce784e89af6b03cf950a8440c1fdb00211a78e8def1b6f4058f30337daf1af9408bcc544d6c973802236f8ecf3fd63455dc2c164405f23f34b829b633b581b811d28fff507da08f7b4526501204d9c772f101c94a114da822b81d8e1d36418dad1b8431cf4674bf9d14786efdc71fc6203bb5ea81877594baf74539c2600c8628e4fd1fa6c3ec2a0d53454126cea00bf0013e51a38e71ec732291919089fcd1154817171f01e80902abeb24b200cb6bc3c5ae79833dc739cb4e03321f845d3a38c741c96914cba109ded071cd2a2c7880324222f7520eca708e1baa12f94edc3b8b586be79784d8bc42841bb71edc695d5b2bd89f04c4afabd49dd759c787ff964e2f29328879c41bed1b9f9ab364f99cafaf25a27e360e1fba30e86ac4389745e71138de5584f4d58647e3929fcb633043870e5ca5bd946ef70caad49148c2aa1ee899d860684acdb05828a1e34e1e4a3a3b6465ce54774375bb8f10e2c0c3640c0056dd215550cdd9abea4ff3df428e1ee4c2b4d1f1ade71a12b5b21f17feac583065f865d8beccdf3684e23c77601e66833d4037e9ed1492c74147a0d3d3cc8535d18342f44c7122bb3bca64b273c0934c976f002661227804d332f0d0a9dd8b30f2a279b8dcb032aa813015ace4669cb48fa80d65b41280b2d220abdd357ac325177f1dcd46321632d9e979a4d65c288e451d90f48143ffebf37540d2f55cf1269cfe8d37a855a218d888952498c45e8635de0b187687a9051498812d37d6365dc20a545927fa94dcd12ae4c44e70e4fe7be0ddeeab48b2f119576f4f6cba67cec775270b152a72948ca8d9ab2cd1cd117930a9977ca5a25f07e9a163a9ad37a6831586407dafa6292600238e224dacc7b41f8b06de514c886b7d2006190ef121414406be09461fde0f8c872f3bd3b796486e1bd9ec99f3e154d448af9b53b6111051cdb82056fca46c6f4a7e25b6b1ef471eeb224aa616759df4b8c305420f8db29073043260ecb434dda80c573bf7ee27b445bcd06bad13577503e0afed491f36a6eaf9616b73bbd7476e74e3dc7bd781512f64a79086fc7b55e3f5391150914975110d7ad2ec21042b51293ce3feb12f5e63b3e69ffcd983fda59742e5e40d0cfd4a8e0a411d6750b2f11ba9c39e38e409838e30f455b874f964109ccab6a1aec642306356a964220bb366d61e4eec5a29595eb03748ba78b1971811ead69415c7c92dde3ba2919bfc7108ae29c0df402ee5a920aab93691f19cfcdaa93885f2e976d113c08457f340d6564d3289b648d1248a584adad6dcfc0705b6cd5642e37b391d3db5ef2011921c788a6266ab2f1ae5dc6be4f396af2ed370e87ec71242dd043e7f844a3d96c487331b66754d37640bbd53821ad186c3f8a6fbd752db3b5e3ad750d735d09c4d2cb24a30b99b90925c384fdc0631062b3efeae9e545097f494b786f3322e8bb03c74172a9d4ebe85f7f0710a54d545d49cab1fbfdc9ab55c91cb1411738304b311fd9f75b8f52f2d0c8916c81f39ecf2d42a7047c52441b080f90cb7762d5b8493de1f2ef0a4416ccc9b4cf26ebc6428ed04be4623714c2f722754314a46f49d2305528b5fd237f590b19fdfc213d3bc41fa24d6a72aa6dd7a3220e6412a57bcf8a47f457f208389eff3f157bcd4afe19bbc7d86935f3528ed5058cdf3e989a8209cf8965d7e6a55e8c53ebdba4e041d178a14751d26785b8d1ca6c93ecf7aeeabc154db1064dec33db5c1fe307693592dd9e4d9994120fbce23ae2e5dfbf7e336577195a09bac789b9cee1a955be8ce932c84aa15784e7e8ff1e355533b50cd355ad2b4128e27aa7bfd66610d499e7623b2e790a4bb72c0670f8c321ca8340051e6c1b1fbf62c7c4005fecea2687ff864ddb74d12854ad29ef7571017188fdb00517bed8d703509e119183659dee4d16a784e8f7518218a41a3012ee56aa334b2a926daf7ecfc0856f47cb717d5e4d394efdce0cb032bced989abb9fcffca8fed51b1c50ffd9c2d95268b1ceb920322a7ce3e8590e92cf715a4bdc5ccb9a624d98a5a7c7d8a858ec9dc008ecba7819851cbddfee0b38f763666a2096c9b42da222e791a778febabaea240553931b19cf06f5d1cf66f06424aa5d5a48ce644b2ce9925d2be6775c0f81afb5b5a96a39c2dbfb942d92d31da1f77a2d982735f967caba0ddb0c5ba091dcfb8e91303c2c7dfd8aedf4226bbac55c09a47a1d42aa7a6b425fb82f63c63f77f1ddab19be0cf3521d131baf840b203bee6e4697ebca5682f92d7e50dbd51bf5ad3a5ce9e23bfdbf7a3a4230de5c2935cb8695c66f8ee8504887ec42ff74d062ff9eef58c9cd58f936a7de320b609eb8cb1c988102c1c57840197efafe5c37c523bacd235b559f897831e99c7e6f3aefcdd62d24399dc11560b5736f88e504fb23eb4b6ef5550673e5b03cee2b97a3101edde025b5dfbbbad7c4dd9ac1845ad96138caa72abe24ad13c97f524a819ca404b7259bd72dc34d31fcc8804542a42e0f327477074deee24936fae8bc27b29b024f857154f3197186d7f9e3841679ac8d34799c49be0dc3f39022ff4ee4ccd7aafd570a4deacab2410ac81291670bd9b547cb606e24715fe172be201155890f27e520919adb466a949df15bfe568dcee3db8cf93be16918a3cccf7eb3aa659f78dc35288a7838f7e5d05fef05363f364fe0e4523c9a794d795af569bb1ca5302a88869126f4e468329c06d6121449346d97370c993e9d5191683703172c9c8ca7dca1441578a59c7858501654da9e402d2a49a8084f365c739525917f520ec774d1b8eac1fb29161718abda87341fb8121baa2dc5cb867675bcd5094dccf50956501765e7b30a7c5ffdb5b481b0bc8ed387ac1cfd0d1070a07c305668f56519b5b790e045e6d8133391b52c66aa80d88f6dd73d9df37dbddac784fd787e2038c755b8262ed0444aa6066e43d2bf75f6d52906175bb791531f36d52bc8d24a07ea60965868b0df00babe3e05aca5daa500c27a5533233711d2ff5521445642ac0a83d90006ac233d8cfc2260f97a9ae13c1d4b46ea6e9cbea0fd29893a53286139ad6e5f2eec36b83132ca89b399aa1ef4208cc8dd2b5edcf63c958bf44c9e3f7b00af4d38b8433462f1e2ae7b3374d4fc4a7f890c2a94fbc8ac8157fa2b504d7c2af32a22fea4c2b4a7daf011bfebba8101ba0625f39d03906784aed3284a7a19c0b8e44472347297c5770a7016d5c86313aa2990931ea2cb23cb4c21c6bd88fc943257a72d66f20d90c6c5829b33b54d744dc79f8943109e0498bf2cc5b73f46e7032fe249dd7ae4c11ca599e4627fe2a64f3f8022323e8cce8534d966d4c58f1c20280ad8ebd31ce9151e6b66ff6d644dff4a28330a6e1905e209ae2a13585c5dfe4c44f464059135d2dae73df81bfeb3fbcff5ed5d94f5c21530c44a1b0357147a3b9b3d248129b6e9a92fb51e3fd89153d31883131e433d5a1cb31c3c534096219d5508f66f99319d2475e6f7e05784dda1235ee80f6cb967fc57215e23e47b71027d2a33a5a53ab06f84e0d738d49b86519ece21639f98ba2b4a7b30b6a7aae15156ec0c589b4a9242607f39d2e3a08aea9dc2be27e35a5eb29ab214b8aa679cd71a13eae571cce55b7f906faabbcc1a0d4048f063e033e1cb3cbf83c935a2cf6f5e93a5cff7ffdff337ee22da548cde5f9b81665a559af0de2c263c1345010ef1a1d457f37c73a2318fd2527438397438500b244708aee9949912b76805945e2f1115464996f054d5e9172f91f555368f988f6dc2c56eb6efa4be875e1bc719cedef2936661c04c07550fc7db2c9b80d4a6c1e74b4c992ab4892ad073117f2d9f1d7e18a53b907f011d517be6084e94d67fc87ffe3c30cca33e2173cf9e3de776c58ec5d07b23f9c4fcf808373184dea14c7a0f0e42f7d2f0ac00c92f121440faf21365a46ec076826de35bc7daf4fccb42f276982d5e22066331d6120e2cd2001f762e02d0379a092ee9cefc821e1f3d2fe3c8f706a332fdc3e8d0f67fb324b8d3ea2c0b6a1ea691337148f17a9db006fce56d97d36dde8cfde6263c100a5110dc066510733f8a323e0c27611cb39c5e246fb8077587010a5016dc284131473b8df247b6f9df757019e6e1244084f97448188fdf77d66cf9d9723f32898d7982a8a12e757c9add1ace0fca1dec30e341ebe137c42829bf0f8ca9195f4a750452293b8f5111efc14b4c4919632a887faab253047df4dce528db819634b570753c0811bd7b9af7da47a1cec3f5b821b0c7d1405926922e60050e90dbddc9a48e937599f95dd9c6af1b01a0476d0dddee0b54b3a9d8290c181fbcfc0a6c030248ad8ff2bbdff9d264d6d26d4b523232f5ddc087e27e4ffb8d449bdb0ee736e8ef142917b4b8e2e0bb12859c5f2caa23bbe0f6df3cc4c43e26fb05c8c3139fab40e340ca60c07d305cfa1a7c06a44a989e63bcadd1c8d8b40a68bc752af19c12777f167798fa2a755db2d93db9288d02101cc5b6106b0c541c442f396cd24079bc6cdf7cb46e3410de4eec84da776f31c04e813459eabfa7860acc19280b20a4e16da9529a6da70e54b07c818f05593e65be4d414860d92ea1479e2d7ccf37e2c83d2444b40d045135d844fd1e6c72a4b687c12d66432c6a9c16975777feeccd51772dbe78eafe1bab0a95e970a702e7887d27d474dde61e5ae4e4ace8bc4fcaca6b4fedc333657b4926918a2a061dfc64c8dde05e87bdf604f8ee683cf91f50ca5d5840eafbe9211f9f614727491db95c57ccda56be5e6fd08313aad22c42db40c600473653bd383eda842243d8d61ac749afaf57f47ef565ef613afa91352627a621747af13191036c1dcd444c7de8dba44d33ef7338f7356f3f64aabc238cfb809487c62122eb2f151c488ee9ecd47897e721cd9e825273698fcb53958ab443b33b7f18523085e9212a9191057f6a943850c3577e8f284edf6540e442e10e2b2a08f95244661945103cac3f359d15776372c33275c49e12ffb50a2c970de2ddf41bec52662eec3521e22073f14e2963b989b16b19699c1fcce9a1c3696677c8651b28a36e7cc71cf3c0a322c75254fe668f6512a4ca53183baad3a6f0674c06fa7d8f335ce823c07c5d19bd77460e2e6600c6135c3e7e43cd3ac355d9e5cc712e441b19b31a11a272fafc37c87cb11f9c9f56655126714ece2e3fdea2c266eecb7843728fd3c2783a43e7a943b869e9eb4e945fb158f4243bf49db0e4a2b21d7a48600eb4d9e06b2bc83bfdaf6d5f8a63e04a3bff347cdba6e6d0e4f3bf256dcec6f641f8ec2963381b6150e608ed90a6afafddcd060a6087306a8d7ce94ec9aea19e0c37d09a24d4a16878b0aecf5b2787bdbfe60ffde53b2d94564017e2b4a77ba4966c47c97e745bf5503a7b2042673f6804d601a6f90532bbcb1ef01dab7916b1021d05b826549bb94209d2c09e1c89a8697915daa31280ae1460e347035ef9767a8e507da9ef351975c0f79b03942a54300abea2835a221dd5823e5bc9bed17e63e73d3ff542a38c21d8854c465e784f26d8c72c259c68af21a4a5a01900076b72beba1047977d9c01ba57517b53bf56dbca3b7458ef5ed131d9fdd95860eedc5d46e7f686ae2d775432ef7c2e6852550401c2ea7211c74febed18b5eb26b460bb5203adf68268f0b0ee24984021576c2d08b6f9a82e9562f59f9579c4f492cb6204be3f233633e9901ef0dbfd5c8d96e26d8a1f9227a97d34d1c8fbe6b3503ba43744ae2b42b62ca11b481db7af56c9b1e5cfdb85f973264fe61c2c21a8cad17ac50c94b18f84eab5a8ba1af25ddafb76070b9f98431778c2391e82b7d614a1ef1e9617101079a28bb05f1351c0d067fc6805953fd2a4fa6214f6293108bbd74dd2335df9bd16905dfcc184608e9c9be7c30b35c60b93917ffd6b6c2153b0b10c789b5f7958149deee8c5e868532ac326d84f7d0067e0e1f70ec2ee7e407aa4ebe4652af8107cfcaea5f835241a6ae0e0ea84d194f29345d0504891980a9fe8b7844702eb444e34142e9ff3f35432be425e08069d56f6daa6dada8959bf31e26b61b39b4127687db4c707c5151fb454fb072078f0a3a236fa6085040ac1e4a68ab900d5a039004e0694eb4888588d7aa9ab2af20b70d1c9c759060014388824e6d1c8b3983aef302434623a0fcf9e22c3f8ea1c4622cb6ecd8b5c23db5a38d6d5e45b3f9211de7d5cdb058fefc5e2292a59616b2b69b313c789c8af1f6c521740e84394a7a8fce00bb604eeb9b1c89437b283fe11fd51e5409e2e89acaf6f376244339c7e92ffdd262b438b1bcb46544b96d069306fd5817f5763d0b31a824ff0db61c08d66a803f4fc70445b57d57ab9bc0d7c721b18764e93a794050fbccb5ad1555666c9ebec5d35fc8261a3ba402bcd0f36a77a666cf98745835ac8de11d850300803edfa8f3b84b806419458c3871215f4563800cae5c6770527b7f4eb0f5a29b5c70921626f07161d3f56dd508cced6fe8b348b0da85874c041f262e20ecc855e1440633f44fe2f9de5e1ebcac72f6174c4d6b8f99a12fbe54af4545d283a8d5f1ed96423fea927cde3fc71c6c9d3a1a35695adef8da66f1701b9b4f8e7b246e50cf0f85a6f0c42e943b350b0e5121860c32ceab582187043181c5e87827a48a68d9e969300f0694b857894735302abe7e9682cd8d741f9a02aa8c69a8065e6e5f0bb646e338d6f00c2a7cb683fc455d020f2dcc73e3c3cf6503df4a285a475fe9b43f19a1f3e35a67dca7967e26548a60ddaf7b65fab6b529cae3f26e6a9d7fab73d511ec39cd03e442c3e6770f68711c83f737c2a897d574aaf45715c48bff15d644b9cef3651616d72cea0eee5a75381f4886b41bb0f6928f9619bf61a58f5e0eb087b45f8c738ef26c5af607612ff0e258faf82958f6b611f339607c1c6e19c57f8afb4aeb0dc438fb4430ccf5cad33c2f8882717920d642459a5745646549e2b1305d3ec082a1db85d672fae26e29756a90442c84cef375634759c9a175a303a5064bb3fa159bf5378dd2c4517212bd107776406caed3fed04584aceebab3c1554a383e0b6cb0569b6eec025020bed7be7325ee44b088c2009c97ff10e559a5589721185855e9bd73a841109c9cde264e59f4b26648166f37a153d8d7113f8512db35d2fa81455e7077b4025dae00d1ba2948007c4753bb8bdd16ea9a1c38e68aba9ab6b2ce69675be9d539f23b4538ad2aaf1ca5e411df193d050b348608a07960f643ebe74237e11f23941b7b83c4ebad9a2f8c63803bde4444a98d2c4f8c72b9912a151f8a5340558691c6180ed901169e9fd93cc04ab78c0e7289a81746ecf308ed10ebf40def310c9666ab526155576de19ca540b84031ee253add9b2758cf447255d999a8fbb54b359747a7360f9fcec26f735e3374563471d30ed34897a09fe9051c57fed9c7b936dd9ba1e9da02f1f761e94a327c83b62d80939dcc892d25449f1d072b08ad00ab39d4f164ca7f75ebee605cf86ea3cd1d05df2ddae19d7845afac89eeca1ab1120338227911b995f4859c8202a385ec09dc503747b9ee7d591b0d56116f8cea60f510914bcd2dd26fdec1dcfdd431028b2a1815517592e2499954c2f640e06c07cfad7279f565197fc7e77b074cc9686e1c9110cf48109d4f5063283afa8a51c98c33a7819d7681c50e1529e86e746f00a1969ff0aff999e0c12c7c22c393721b4987f14cd674a38950818544a9554143237da8ebb162c44f1dc217dd4f0ce0a02f8cb59720de6c46df1a19292ddbee1376e88ea2aa2d79119bc0131228ca2efed482ee9d6bf83d2de377f6d425a852b4ada3bd48b4d74cfc760ae181cf0833c025b9db936d593fffd471a84923dc95cf470c5fbfe60823363573028f93265ed6085134cd43f56c03dfd0f6615333109ed6eb7d7450fec9a85a2898dcd69b6542fb5c7592c31b1b48bd3f26fff28287436f169ded6714464b13a97229122da694dac3eb4cb8fc75b8b2c110b5d7555c18bd3a10979de16e3bfeb5db0514fb73a3e5b26064665ef87918422e4f78b6d0cd0355dd1d12f6fbba1314cb8fd2d71750f2437603187eec73b75ff53b7438e73dbfdc718e0ce5b9cbbfe64eeb1ce4558bfa866ea3774a463f72a8db532908bf4215f87804f795c62e68ce0da070e01e8251eafcbaa4e5642122c06880e360c266d73346cc42b992db76867b1df45e0e4dafe5a0782a03db9e8953bc977c73d63a9e45ba3f2f53229ad1def8231d4ce2b10b86b351d0d89bb7f5e83a15d7d4b2fe924274410198ac58cdf8913599f80d5c246867939418e255b81907d7cf9b875a10bc8e504c9565b0aa089630b08d833d9a6e7e801d48748f98f57bf901779f791c4e9299dd09f34de85f65e9b737ffaa4c3fde436c054a3540a218117bf99d984032dff6332e1502eff534a23cf8e5c9be3df2b4ef21a529ec4994c3ba1a1a51916a7b94651bbe5fcb005e9cebfd255fe309fbf64d37e955690751d90677d5e5ded7115a80d2d551fc38ab18915293c363ed5db2127decf5690bff5433bb09a77bf1f10ee66d1d018fd011fc57eba6a01a1814c09d7e147556ec219a90f62b5de530e0779a0c23a03ded17293c94c64cfe20c01d81129e37c8af543ab74a7a215526ffef21f7059a47a5f53d7805e12e6f626ec447b9260c453aec1bc9d632bbaf70deca7cc4e91a2cda5b10c120aa1104590f9970540a04a93f48222c111a0278f092f8b858ccf061fcb73e751333d08f41573fed29a3143aca3cdc6bd40a657bf218d74475d49f28f4722af31fb6fb7f4e54eed79ac102b1efad19b0ee162ba0f183acefa5c553ac27681c74c27d1560a337250677e399ee696308c0d1c83c3b3927c1ad0b659c9af8dc460ed4ba7fcafe3e1bece3f57bee72ccddee78cce893ee3d379023ad95fc483e5d1a7acd6988d48adfe36b59fcb0c9ca4a2e1d3f0110f3428b754b2771e846b9ff8f235bf6735f7c27916ac7d7496101d736b621eb909cf7db39e603706b383c073d6f1c2a58a040577a239f364d703f4868a890c9c538fe5395635b708dd0b382d05c717b33771308943d724d0914c3d0da6c44ff9dec3e846bb18fa1bddd4755c9582d3d26347e5d22d7da31ce9e1ac5edb9c5640ee7e4caa9968ff525ecacbe7b6d1f50769daae6ae40e1277ad8993cba6be33b9aaeea37c3d4da6ede14beaae5f9bcea088793c37546d94f601c90064799fb52379504a0955855b642494e2b26898ce0c0dec6c00828f2775d49722686a4010518e569ae95f3d05d96792523b9cb794462165ae3c67b00a9677d0b41ad965feb913059c97524338bb426be5438a62abb6b951bd9e27bd3a0a9ae357e33d2a985110d79d5c0ac510cbbac538cde13fec649dcd6578d77d76eda1e5f8de9e644a4e4a60222f4803b1a40ae4ed255968c499e0229b541d80547f4132493956bc30a54b5422bcd513aaa354ada2ab223f6a2c079c146b88bb278316f4b99163d631b53ea67a63b406307f9bfe81bd6ec37e3a4d51fd92a366b8c06a661769ecb79883b1c08fcb9c35f78fa48c640cbeb278fa34affd25c0a6944a1f0102ded76e7ced95a4042cba0e3e9696f79fd513bc5632cfed0e0b2982ed32d2dfbbab023965543a00dbcea1aa06799427dfb65491a304688d9bcbbb92df8179063049e47e5154a8e86224be4857df0e06d812d4d7f4bafa26cc411460f6d3f2d56a05acd1295fca555131cd379c2f2804e09e2fc60f60e1b57db798e3b3fd7d63b3bdfc0cd32c6f201dae1c43c1d133e3ef7b7450bb976ecac8d6f99d307ed4ca0158d4e0de95c50e26a3d1f00a352572c46e8b840540d493ba68a4132ab9c81f61d7dc4a7039581dc74805886e2c396b2509389293d7c53782ac692ac113cabc3d7b9a27e5ed85481bc5b2db9824b0d26c4f4f0e0b2f474bded115581fdc07c57bfd352389414f275a4757e8a071d8ae283726fc3fdd8ef78e7573d7d313b6405737d3089732303ddfea3ec9b48147165562c65cf84f2d78a34d68a0d7fd88410aeb36f29a79e90e31aa8b5ff315c600d6a40362418b19d309f98c254a4d4ed590cdf11a461fc6c1552e9e798cae3e975cd7c89f2d8b6bc52a708b84b85ebab7e4f00aac9bf5413740a43818bcfbfadc940dc38293c803b4065a56b689513e650e9a73a868924d17b748aad4158f7000b456335278edb02f2c8abe5e17bacdc58b836c4727971ee766ff4a68677855a95dc41f8013fd33503f7524dcf63898aad1736906c499be328b98e08e0a8451a2c00611c4cdb12d05606f5186668c8d2ba23d491372a0f3fcae9d07b6f496829d8f98bbf5b80268803e7da7a7f7f74e31c93209f3bd39bf6da5b474de732607e36fce4a8ce26a011945de252456b91a14f7d006c385d0691c89b609216ee5d4107555c466919abda3bcf4b60d5b6ec56490015a8deeaae149eb8157e9e7b3f29d429059fdefdf0a940379e3481db9790b5e8e2c7a15f8152168946dcc563ebe41d506a35d3340ff2b80da10683a663e5a0d1b7def3184c48f56361ef94aaab13753cfb58cbb6a0f041c79846e4dde79a2aa31898d72e038b3deb3890855c19e01351a8bbec8560f25003c53c7b59eceb99f6cc3fb50d548ed262f1bb4ecb3520a5a7f3826c150801e3e716701f0bd8b198e9bcfb1bc8fea8d61059f67912281864851a1a7154aa467737dc0b22a51ef02e4727388029b2e3824b88f5748d2e2c2bbbbdbe7653e1157a43ffa062cd6afef614b4d560e9524a530970d8807e6ec2f0f01d729da09d4469cf2d27d91963a19ce699dcbff89e71ca13863db7e80185b4a0633358e081e89ed2eb70e04bb39f90f94c715f2caf557ac4095b1a68a42ab4c1fb0fab56aaf8607ad063f2669a22fabab34d5143739770f52982a737ee672702a665a74939f2f75bb39cd200e45c73410e4cb9327937bbe98f2a6157013bb92241ff38220c31d10b4a58de24ce7870fee4dc4448b6025ed359839ee91c297d34d3bda7f3828b8ae769ddab0edf713e7c26d545d93cc1fd5db3b4db2dbae1233b89a37d073bff157e90687e389a38a1474d408ed4cebd4a36285734187ad783c6b9e7eee0353b5189541a2022ac8984b6099c46be0f61a116b30d6b5b16938196e7aab579db01d45cd6300ef21d6e99e1f783c8c00ec7bf9a7faf08abd9a604d6171489fc73ea5fcaad9a470d744ac4023fa84ed185423d755e81f3e58e43697551e8d9d7760dfce23e10020bfdd346f94b5f2e249cb74c1d900fe86f19c4c52e7cb64c74da130af9224804fb5c407c176e525e0647a37c069318f4f9166a53b12406907331823f14f4b7de64fd321d5c9ef92104600c925e1b65a6871712c20fe761d4e8d40c07e6ae2284d542d65ae0886db38e86ac2d9584445060d9153142cf3a5e913f4c0c22d65608d7309151f6f2a356ef4f0eb099eef4189b605b34113e65899c01e3d11f0f7467c5d889fd3ffb25d86d2ee2323215ddb5e0ee0226993014cf8f3f71b8438b3f451e58c1a8ee55fa4f3a83e6b39f8355e1a702997d6ab62df568e04ebc8fd247c14b07d5d78b3f614b6ddc10eecf12bea46067e70b59172ee84ea2ff3e6f6b3ace97c0ab9bef17a075e09eb6b9357f83382b4aae0da7d2c41c2ea02ba0cdc79a3e173988ef7f5c3151bc6bf54b6d4660f5dab806c1c640b0001c4603a33f8b17bab6ccaec348271a524c14258027e1206965760b96a96b57de0da73e9dc3a8c21429b97ae4d0bbd002d486c9b5eb52afcf37acd8e8a17753f703752bd7c2b41378ffabc61385b6c045362554f48ec305998696e8b384bfb477323fe6ce4b0d7c7cdeacb76ecab536166fe6588497043ffbff8a7cf50d3487ae5f43b9ceaec1c10d752ed015c2dc1dfb561ab8247e00efcdc3b8f13e644692f474e8d63cdacabb0fee69c43c2ecf837ead9b4bcc9368bf2be629b6959c7c64741745648ec79eda7f742a138b8f50f5523844d92adc8f37ae84d619f9038b6835f5d10dc03d167c3f5c923d52d7a206fb8a76f9b98d48b6f0f8f81a1a3ed8fc1d11085ff849cff7e0d8a9b11bf28a71486b93b9c12ecf2d034034ad46e7ac186daf325e2d9fd6c70b41135ad5bcb680a4e4b205e3a5a472c3315943e57518f8e65c263848daadb7b196d8d2cf67deb42c888d8ad44e43185a27e88d6c6106d8f38346601942b063a586c04fd927fe6dba32f13c2299781e14e1ec0dbb7e8481fcba2fba3dc21b37971449af3f30016c5a51092359c5dbdb7c1aaaeb3bfcce4d087fdd7ae7b5754fad1ec583290c9297d8cd5f9ff2c85d76c6f3f7e45f0862a5cd9f8a240e9f89a92f27b6a7ce8da3e203b59a9475352a667269a892daf7055e968f73f6edb06c345dfaf513f9a725f8b9482515c543f99a75a6d98e6865eaf6f830818f7c30275be3bd53b06646cee022a199e0f50869e5f419e503b18e40094e660f3be3b11cb2d016355c7c2c41feebd27264d06d067ccac4f207d6f9ffa4b8b1945a5699c1c2ed8ce32a21aa86be7271f4db97e033e7b6d7642ed8ddef674235ba17de5a332a2ba017d04226430c9a7509d3b7a8a57996871c014ec466f849b1bb38ee6cbc0c9334098863ea5217038dac17c3a6cc7ed4cebccbec65f93b4c5f021d5a93207ba85abf427c12ea48f9bb8ace83a454ab2ae83a9b17422269e8c78efb3aaf342122c350315ac4a2e59a78edbe09f86ac01f03190359097306b88cc8ff54e9b4747802631bd1ba4bd4bc4e08458cb99ff648f7e9244c87a42ffcb727ff70184fc802258933ca4ae6ffeb9c4451aee710177a0468f754b3266389ed138794df37bc9b867e0d594d734f62782a84477a2f95dbaac61f6c355e12b4044751b3134f77bde39d121b7814d1396f210799936e7461fab098f4d6de4503a835e4a0ec6b10217bc3fb530d3169395f7c960b50852f48370ed08f1cdfb5867e3cdeb36891a113ab6eabc6848cbd1c1bf51df5c059d78caaed465c684da4d2179ef4996b6d656af0be87b3982f6b04030a5d55e6febf598c1996a8a2fe56a33293ad3a113519dbc1a58e2e75038821c8c6a68d4655ea968ba6d929c964c8c8873e7d56844cf5fbfa856cc470ae68bcecc419bf4d41471badda0ea3180e1de506c3c878548a3dee44f51d04fa79c935d15e64f2cfa837d80a53a8d80d67d9ba8326af7d5943b54454b862075d70d0cc449fbe65ffe0deea20e497000683c292d19df45d63d8dce3eac3f030f02cf5fdb2d9de9272d86fc579ce35e88fffbccd07d502d9014c0d0d9c8913a659ce1ac33f62e4da6bdacaf646f69ed3df5104ba2511fd038e425d0d7193db6f75b3b6db42a147855f958760b75a226c77c44228a5c76e31e9abb567131da072c406de8dd8ebd11136cbec5acd36d9f8c32afe30f4085621accd39e8d371ffefbf6731ab5919f8b37ddcec707eee5231744dc7839f203b709c31a00c2fdad3b4e792a75732d8e36067ded11c1275c5e6acd9ee78ab711da5b3da9398611e9134e11f0b04bdb629d65a4133bb12d959e03d4b33622d73859914a65405632d62bbc248322880f8f53d16849e15b40126d8d6ffa7b02d8ed79c837cc6cca74da908ae704682686e61ea068a59da0a29b35ce9029ce1a353954e3feaeb01fb5ad1b42ec744f8504bf112e110cb9f17231d213de189d8b073f4dc22454d957bfd0e4863c3e1ac5189987423f180479ea4150150390de98357d2df39923a2bec5b38a80a3f9dd0e503f74b57706b2138e2cb66fa75b363aebf4eb1019dd9883583032b38be58f4011e5953c199e9dc9d8b8c95d6b2a2eb31abcea7a5f6f0d627d831df25ddca1069411e21595834d2ba2fb301c3d263da1a91b814ca82b93c7c89f969981c2f3b90ab31d62c0c07b842938b75212e715300e80ed639e19101a601386ce3c377042f93ce60d0ca17e589590d16cd1c35983affcdc2121b721ba22220ff60104aff57b5c24c1255d8a0260b5413035d304b8003e0b4ede08806def5a1aae5daa90b144944e6a2cc1e109cdd9b1bc5df11ee9f1f1813545350192efd7f12aba5a75b8b38c6f2d8dae90ffd856d2cb351338229e898aaa641f3078d027ef4e7e220c3dca1788cabfd2454e40caa13fc4f4c991a9a8ed29c3681c78bb2d97e24f66fe180085244a56c6843346412a0f0b289883708f081d5075581c8f89534868f85ff988e484dfe9a1e9799edc3433a7e54de27d8b6b02dd6bd4a7d68849a17739340f26b713bee4136c37ee3d0940df4c1f3ba56a11a00b47f7a559afc45e977d84ce7c9f1b9ccf01ca460e0b862a450f544fc96aa42c6c5ba9a7ee89b8ba15fcac7348c312ce1ec6c246c52512d506ea2aff245007e12cec55eee669ab4d9c2ae6b3fd2e76e56cbbae32951fc4772277fed31c0056fdbe6dcf42acd772cba28b5e1f035b1f76b80b79b01bc23d5b8b1c3dc90cdf3f9fd3373ddd06931c225d620a260f9b65d6cba0a862f573230d49fd9aae621d689712fee05b2fcce879144bb2600d2ae41b653ec4af557de6ed5525e126b24da52a036a0c51477363f0fff3b264fac3446b88b82b6627e1175ae7a55627abb44d5e7091c4aa80a6a53a7cb81859a6df9f010d265da3a9ebf5fbc294a4c20957d15bb0fda2bcc2c37553f720aafde4b42943d5f6f67185b915b2d1a64ebd9e5941c2f06864729521aabd55923925477167fb6f1a98d4f3e7e51a348cffbaf988753ea103740e7145ce134f4edf3d59dacdae6906545e4a524013ec31303e9107e24cdcf04ac2ac137849899ad7555a45bd8c3c1585724541526bc512552f4f99f49d46e42bef3149d13cc0adc28ec28d96908f1a3fdef48e39ce9a9eabb50ff416baaf8e1da88e03e39d0f03adbcf7821548b181033463f6a9f1077eec01538cfa735a13ca00ab172af976eeebadc4f7b0fc0a3902126f3e79330d7bf948ed5cd707bc0c358dffb91bd1c3439d83265493411635e199fa82c4b39c6f2d2b3da431fcf4af23dbd9d1e38f99ad8d2278d356e07dfeb7080b8e7932879470972df177f57de27b5061df627ebce881153affeaf8f6a8406ea28e8d566c6fe0a367ed9d482b8efe5df5663e354c6b79c69d5dadb9473b2cb7ffbf6ae1089a5eb959cd4d7f1d24195c3ca8e81060021c0684fb7ac7f775439335e4d649f8253974a9ebe28f056c539a9729fba83d771635ebdb47ad36b2cf9f4554e0273d8fa273ae25521efa5bf6de88e9a0dafba7cd205363b6378e5ad1e6adc34ab17a78724279090e7bc83aa69efeef4888cb6cd3b48a52951793622ff3faf42619b94040a75470fe1fa3858fd9e6d2b20aaf0d617953912fc54b137beb6d6e604def82165a0bda771df4a6f22ca5d8b72978c5869165a5ff7c86e48eb545801d37f1c0937e2c56983fa1dbd969c2d2598ddc79d2384fcb99e7f6de99633e62281ad3e8d1a9c66c64db8efe5e513d88b82b9b2073c9bf9122329cb8c4eb07685fe62dbef666bb15a6565bbf61950b22c882b7cd5da983d78b422926a679711f25dbbeff0e26387e01bc201edf6b34e8a679b1524fbd570047d063a63963245fb81892e4da8009bc6c63120a8babd8ed7961f647666cbaeff2712a6e2a8b0b867371baf0060788d7fda20ee5ae0ef0cbea126f59cd684d779d879f8ef211e325cd0d4dbe0a0facfb4b0c6a15e987fa43c3553cd60cd9c5c49cd3d02e14e751018717bce2c11e1067a2e6b9045a3293d7d7af19adab6dd4add2273ae4ef5160380791b0452a4fd293cf5d82d9f7717505bdaa559266411014bc6c79d6f919bfd17255cb73a300ceb5e56dbefec4b9669a683c746eb0f0f4f1548a8f62b45c0d26634ee00fa861c9ceaf5745725cc1012e4ba2f43e8baadf30e09738521c415181242c4473716e1ba2604f9d2c4a9e9e45510690ce1420d894a0380e2fc546e71ff4c7be7f4992134cca18ab44651a02a6b7dc22cd3c98a43c09b11f961084ef6c9b7ad3c8d2695c5b9e9797318a73c0c811f8249f8fd2f78e73dbb532a557b7617a00373bae21b37ac3634cbfe77a402001f7eb8fcde8902c62d76de459dd111d52e1680f138aa277f8f8a8ccec4799138e6850adcf71b859f134cb421cc91ed08b3ea4bb352e712748f26648054bd2b1b7cf0fc5b0993e1dd9ae3aa4b70b9292ad7a381658839108e619ecbc6771098453b393768fbd455c3979db0984d48a0d3ef55d310a97dfbb116b29dfec590d3be8ac728fc747ef78cc961be90a1ccf26c001687b92df5fffa456585ab5386c686919e71e56a2f7cd00d35716132b8f5c07fd5ad0c697e9379efa3b838cc525ec0faf07db2cf64f58c7f47c7c0df1ba2011d6d71f512526b8f4979538b8468f920af2e33d269e87312423136a0b64897e096e53ed490a9560c1d4960dee49abe929aeed44f35342b5422622536015d78e9a203eb4877a5e899918078a0f8dcd0ea42cc631900985295892dbae4a5dd82893dc5eb893639eca816f50929ef331c08f75eeca8533148a25a5f6be0669ca6630838b3a51104feb02c2b0116494dfed54f30082e559b412931dacd0f2d1df3fbf5b2721837809c91255d80ca1470782e8f62eb9e6e123c4362a94fb32e689e3249c714cfadb104d8509527e68268c304ac46280e9ac9e8ece175a1e657d69c1c5e3332aee765264b46dabfe1a4b9aa2b309a9d712c3cce34cc63e7552cab747b228cdd76b02175af9dbbeed4c9cb63e95c15d66b1b2561a0143c7e52305a18164082047e37fffb121cb2dcee9de4123dd2767ed29c6e9efacd2f25e85b5af266443dcd6f60cb9bc35c9b3a7b2b528f0463ce0097a05497ff12734be522f6ee5474f86705af83cc8f4d8dea1d15c593527d46b1e4414686c3d9376210d87039bd877be1517abb81755e05d31aa5ab856d367940e56c613bee1ab41421e52bf3a4e493af4ea50fcea473109f56f86f4c3a0444578c7e4d42656cb673c3838f79f68826b31e067db0088cb7b5881187743e747919e62d3da5b8f4d3b170dc049e27a6c901a2479f719d4e5a7b34a8691ffba17616b0b1ac1e20b64207fc87398d5064141d0b1ba7cc6b36a88483bc9663c9ff01c24b126af5991d19b5273e3dda44c8cefe01a9bf4860d839bbbbba0f0475bb3e326b7c7794f0a1dfd1e0c97ab08d0811effd3a410817bd92889c158071467a07bc7649cfcae94412dede7d5a3dba939f117e6905efc943fcf966e44fd9ae72baa8bc11b504a295f00e0acba092e612aa064fe9a14a86b5a1a1e753e58f917593795ea32c41f446250a8e85c2dc47cddacc03389e1ca84e1ff0488bfcfff07cd7ad74365163b908668365c13e9ac8c84cc65f58e752ae3bcdbba34b6204376952a23cb8787cfdaa6319c3ca64b75eb9e9d53eda5f75cb9dd04cc9add091d55b7c1c360b4444d0ac567686b4215b2d88a30d5f6b65295915051d2781e8f296117ede20765eb35a7d7bc9666f08a03d9d9e3a481586592543d056153cc40ccc503c4221458be2bfc4633ee66237fe076dc63249bec8da9e64a5edc769182738c09e3f10725b0728658d5edb4d4fa7da58752f6aacb7fc1e0d3327a7ee36e13d17064a64ffe3f8389b0efcd40e7c8e398475ba70bd1912699098b4e81fe4ebbae5225f69bc08a9d1a88ec5d41458a8fd0208b3dd4719e60bc9f072dec02bdb03a8c4b0044106736bfac35bb087f60bac09d74c1bdeb7855e63f89e82201d2f6c3b92940758ca988cd1dbdb088452f9461ee4408c960f163e8afe224bf661d47aa696b0440907fa6f5ae467ad10becf9fac09316b1d75012daf416ac486a40979c990cf557a0220bc0b7b9f7abebaa019a14cb5f45877b25f9116a56e67dc4e5402ed3609afe040f03447132f24da5f4420bacdf17629af2d0e6627b6a43c024a956865b3053c2da99d9130796c3df4d2fc0932f1c0f7d16148ac89e0ad86511d5a86f7ca7f2dff235a49c44ab8fb2fa41b1262714331b5f6aa3c514a8bd1758f7236dd386910510513653df34f787dd1cdeb138578986c49afbd3676a139c5d60a231b9f8ede0f260587d135b5d91779471d2bc6ed492992c31839c44f8873af33f793594b514c03ac0887b235d3f207ebde096b4022cbc2f00375f34801b67803ac1b0cce32060ba04fc931e37a16b0bdbbfc6fb36a9b658957a465e0c2dc144d2dc3f0910294b923d6e092eac850f7fae944630d3f396423a7ab237b079e5963203e38176280bd1997e19df6c3022a42f5fb8f19971690566a06e642e7fbb269115e42490e563b64206b1df3e9a7910973d806e81b61a54f3acd61adb7c62b9754be348a6c74227e22d99f4c2b27452a2286a811b94a2dc2195caa901af6cad2ad06e2bcf109af568d135687221dc71765d7619d85e38bc4d88abed7102a5e03e1b9fdcd6a81ced86e568fec448fff68db420588c1b6e2a5a27284c2dbe409d9383ae3d257cfd93b0c5907071be8673ec1e29a52248e760c052dd4002fdc40cc0b21d82b44b56cf7ba728ed8558cf4f1a8a19724ec7719b286f3d3b30e402d1b222b644fceaad056830cecfe77be7ee1b099f802cc925d97f4ba46a6a30384c0bed26163159df3b4b32f7809ec2f376ba927ca962b07eaeb8db56fa1bcee4285f041ef7c8bd18742ad7665631dcd9c71a9a6207780ab6e2e7ae01b5851dc1837e202ad5905de9104d7209381d0f501c6bb0e3d496aa865e03e1b5971ea118adf02952159f1114af3675fe16381d3a4af8769c85376696948f0cc6d4691de72393ee7e6a3b3e1323cd1f4a2d3ea4d2cd693859510d4f0b192de409689b3e40722a8ae69c564ea3a57512a215cf14d36fac6a0321ccfdc24d71a4a17ee43137754926355e0524dd06927019b988d540b86c5514e036c70dc8da472b925c894d237082237fd0d88900958f10f903c702c53e0ee6d280687d08826cb06d269161330fb3516ee75e55f16e983801e1eacfcb0e752386a3929d12e2e629105d4bb97bc7402965f41d16c2bdb5041ec4bea0e41af5d943210281d8a8afbbbb93e9325d68c33b7db25a52c21ccf391420f2a09023d15bdedaab64c6fb5aae8acff3d6fd3b33d967bb6030b762d93b487ec509465ab1bde31d129078a0d1bcfbab11f3f0f29d09b8a12b34691e3ac516dd4e2bff20e4323559c00b2c43f3cf32a5d5be8d619af9b8525ebac0cf7d697f92cf1696a88dd09077d615d144c37e31dc46008ab18d587a016c74c08d739f11c074c2c3749e8674f894a282bb0d0a50d0b9b1b8e696789fb105cb7a2874d5a1e02a663cb5124b6be93f69209773a1f415c8df51e11f18dad746ebb2d9b5cdc9a5a0a8f30d5176dd0fcbaca6b10da9eab9a1f8638e233598770b462ffccb5fdd729b78c63f69b509ca5ab3ae4a241516168a13a57ba93cffbebd40f4e80875e6767f09b7db54a5ce8a6c8ff81c21a44e57a18cd579b4d427074043c10c56ace6dc10628a4fe5f16489c84ea505705477b4bbc5cec078434c9e65213d51f2b1476f722704261ec0abe8bf7637ea4ef07e491d85d4a50ff844bf38dcaa54996767daf30d84796e0886750c26124e9c0c8bc459ea10bbf3f29d0b33754ee74323ad7f7322e5b7a73e0c17daba92489df7875037c4c279ad2a40feef6400f478ded119826188933434221c206eaf5bce659a17074ab67632d4404d82ca5a1f035d6b304359748d0d9cb0c1ff7c9bd6a686068f78b255950236fa8f36e0a766cc0615568095469a80024df308d540fb82db489da20ac109da40baf7fcae87f4896c190bbb4b06a0450f56992f064b90f482cc7a2b3cb51ed3bcf145cfe18019d16264e928b278243db72a5f6cbc43e31764542523efe515a1bf7f316faa893ece309cffde008e56bc719dba783d9b925298b6d2c2e53ade29995708dd9aef5f11b358b5b8a927d37797f3bcf7b2939956f041da55c6ec1dae20cccafe33103a462ac7d10c7e42e2236dc80223e045ce00734154c09acff3bfb3e8a98f3d391cce640596d1518e103a6ae968f4f4dcb9333dc2fddd504894dbe71a2598221b43f3b3d67e90750d9cfbc7d2dd54313283db2504343bb3779cb784a3beda8bd29f989bad807c6cce19a1d27a4074a0de2cc2db174f75310952a749478f91937035fb0351b9fc8dbd6e4bdb20ab2555640de7924dd66c3f9d5dd6576dd2464c5f57f1a6b3a481e1b890d0c4f2ca78688098bd63a2450d78a143fb2187ec6710ac7d8e13fd2e90e7aa81a554645af861c70deb1f14bad7c350f7830c0f6b763250d5192c5f1f2152ad812b2cdb9378324b9158987ae85386bf793b2b9f288aec7f31e0914d1b45719745749b2bb9b2229c0ba296637ea40dbe4045dba2e2f6f493cd16a76143c7ac61dba72a756015b079e0c525c5929c2bad8794b8ad06df0be82c4e8b0a7e33dc567e9b241b52d9d5f7330df69084cfb98fad85015dabd3e9036af23a1bf4faa6d88d865838a9169de26fc66950d1a5df50b18b56d25a37d786f4b9bb87f54bf8aa65e115b853f7b6a1cb73ac0ab95567df0bf30962aae3f32fbecdbd0ccddf7d3b90e26d6d0b29dab81bd147fc23c3e583508fefb907d0990151ba0711628288d118006c3a8d8a0f83bdaf6a7d6cf1b9dd48db185fe6c57d8a4fc3f0ead4dd4e8d1a5031fe6360fba474f76df8e8b917937040042de2aa0d669e9385716de715c52410d9d662ef5a76f8b44018dbe296c805f74499ff0786ef332e46af26481c5b731147e84b7283e1dc5451427f134e8c304b4a83044bef331ccff78f12c52863b70a62c9fa72897380ff97b017e12dff49fe21c84bdd6a4e67fb5e4b5b45159e17f84794b21d9857cddcf763c44c6f9075015dad5f270b947ee16f390964eccbe057ac369a57073e32773efe90888f7c53cf84c235edc0d4b8137b651b66e7894eb2bf0e98d825a2ce3d4fd63e12abd33d6d103e35ee029a10b6cb47a4b5df5eb0bd3aef8076eac7b9a63b46547fae009b1c89ddf746636bf96fe9d81fbf90f5577e85e4b468bb6272fa091f6b09950b1f85708af3f9e00f6cadc289d5d8ce54b56bf50d4dd8a00bcc8fc44c9a46c8dd03f41cbbbd6b358963c3b362d218ecec697479a05a7cd8212284679e839415eef02b54f7cd0b08cd89bd488973dc4d6635d65975d1163f2619a199569295a3434e1d0b47acc4212c8c529246040dc476c3b291d6ec9370488b09b08d6514cd2a2a0fe2597c7b8223e64ce3c074bc7b0ea474b969937a8282789b23d0e5bf88eda8fc0f64815bfda79c228bfc612e6fc6e3652995ed9130adc17231c22aae72e88d7750880b729f06782dd154dbc07b10f0bd2da78082e58d5c9b046a6e6b80ada9f9cd5ba5aae90e586e8efebc9c6a5d39ec4b3ad618c273f09b2b1a3f5caad051f15052308238bbfa5e15507fa53c910b752048e3fb39055f63ca405dce7882f7590f3eb6bda7ecac123b437cd43a0256518ae14436abbafe57a1c59bb769640617c7afc898d2545b52057c5ad6cb27ff2ab80b35d007fd6d629f89525289b0bfece5ca3d15d7a2d24296ba1862a7af97f3d89cf1c7869e00474b2343d3d3050b157a858979a5230d6b01151e15554d5e4ed83ac7c2cdee185c2ed01adf434079d22993ec5ec63e034295b14a30b4129c866f9ad769f9c3d5f2f8d6e218ab8b0efe159b4b307e70a7955ea8da93c71b24061a50220265f83682de504dcdccefb9374928ba1afa3a916e21b3fdc79a5f9a52d254badab2f45dbc788d5da4a29b9687e0544c7d086838bbacc91c034e41b4b3d7e1227f5d16ce11269cd361b987f986c6864e9a004ba7376abedaefbfeeedd9a3f69994692bf16925df33f3b7f445da6b40d3d5367efe7e78a393e433ae180da820fed1f4a011bb1efb470e476844828a56447c3b5a8e66db5f6d653994428ba07df8cf3843d94b7821f3be607e6db37f474f1ed4978e4cf9ab3c6bedb81060ddcac1addc360fd9564aec2af54f002559aaf165311cbb61fec11ded6d2fe9e3346b8deba5498c2407150867f1f0f99d82376dc97387b9b9db783dcbce18376bfeace771f312322acaa3ba4f26dc3df8ecc7c1f8171bc26e8bdd56c12f7b3c0eb2d700b0f81a939e0ae26226446ebf71e8a93ce12eaef6beb65276d1a20e27bddb1b7b23c927ec3d2b6b82269d12ee1a6ad915c12bc925d3583d942d89ca7f3b26e318f654adc83b392a6ff4c50e4427efdf336b7bfd54b480b1937a3cc0495c729ffd8c52076b9946c0f368db20a63ad264896e46454d6d331194d0fcc3b52856cccb0e645bdf6a3f245bbd89a8790d02f3bf67eac4d921c49e970bebc1c895640d3021714ca0c5fc08a619099824e6ec2b546535ca2704361c4deb1f5665822f8c13f1d629df8aac286df56ed929a0115fc04f339f3aaf6ddc532c69551f18026226450b0a03fd8db33d48e6368ae7fa6b629c63f2b0ba331ea6078fab82d5ee46f41c23e5bde20ad76c96a94b950c1be9b2bda51d1d536b20e73ba3d21c15ad44a2d3c1bfb83f0884aebd64f6483094cbf5aa70e3d00963494f9eb43e2fd9dfe77f600030ea43d7a37a664f97f3eeb5e001fb734094d9736a7ed93ff99bac41ce0967fb8a097e1775698cebcb18f3521458965e63e52fc65ca1cf0866a058e0a55ba46e4effb9d78b4ff04e835311f69e3ea0f7184d996cf467788ce116bd62bda1266cee61894487187441ffbb83b17713dd0ddbe396b43b43c6aca246fd03d1bf3be8aa5acfb4b3f3ed079f7daabcf3d35ea3ab063bc01205d3ce9982d7c118789fc39953d31cc173f8a7c5b73abf7d7ed8cc2c464ffa01f0e9c36acbc43fd3eec886308574e3e8eb2542f545167f76fae4d4131a34406956e03f4b546586d3fd6736f6531b46c601ab21a79aa569875a38ad5ca39c8a7e7dffc212920926efdafb3ef8f778be22daa97ba9023675fae30f5734c483591d9cc3ae6817e25d9b5a1870c78ac136c2808a0d01590da6e2df8adcdf0e356f76c4282144e9eaae75970a69072106dea6d6a9cd62219f661a7be3fff6b133a4ed5e805ff41df8e1e510a648a14d4e09c17c184ec720b37b6f91af13a478c46b7e9e0c7d59e5fc352fc572d5574e4cfbbb24628c80de1df5e6e66256b11934b88f891fcc0eb65284bfb4f796677a1feaf3cab4c723273c4530720f1ef66aaa123122e1d70d39b64948050cb7710a6f061142f79ec4cd3f60d835e23dd0a7a9df3c2b5d0668517faf8273bfc416ab00d9672f17f2ec066622e4474b20cd29cef6c1c832f3e561588181e25b80575ade9549114410f292cb82993e5d22af52b39922c4911e3dd0108dda90f2103d32c7bd2159335ae9e6d87388c891fe352fdea65a8eacb74ae19cd8a4c173789ebca4f04228e55b73002addb52f7b28494b5d545bf8f547e1e73a930659c90156edb0ae972192275096a4a626ce72305820f6ae079189edf3db397d481a7f9d5bfbb21e694c730c1b0ced9d523631092b7780f4406bc89cb8973ebf4bae89790cc67b0bc920701ecfebc4f06a413f0a4e520f17960b8537f73f91cd061430b1f3056036cbe4bcba5524b997b9a188d5473bb81078c0b0d7bb34d851c1b019d76e14108040abf2ba09e14ad734ed2e4f4585fd37dd3de71217404174c485bd8d60a38f07e1766c4d5203bfed27d0ed26d2e585c32fa405a05c15c77b717d844b8ee06f34ec1cfb7cf6e76cc9ae5e7a27c31bafe33fe82d12eb1b7e4a5f91277aed0017f6880b558d6f42abe83836665cd349f8ad05b2e21972f4e1d53b95e0eb3c1a5153d3fa3509ffa7b763b1f575848a9dbe4d67afe7f26b84ed4b96bc527cdfbf6593685a098f2eb3da71f6579dba4d21c70792077c0405220261fd58bcd5aa7ae6d89d0de27b70ddef3bf927ea33e56ef02834406d070a2a7a6aef44625261b06b256d6037752fce00d62ee4a2fd8b834d16aea27151f352405ccaeefef318517a8223d0e00484e6a5f2b0a22d952b237720b341959af03fe9ad88ca149f890e3ddb89f59a3fbdd2e28513878a8d39e85add08f40c07c27d70f00c4831e5dfdea63e4bbba0a4e160222d05879a01c6338e1db2e2777fd481cfc4b8ad05368d3ed02ba0c28ea1750eef120c013d10bf7d563b143debf4252f1db8d7797bd7d150f834e8ff0dd90a1d9ea43dec21847466a29ef71dd6f00c714497db7c01a6f5564f0e8c32f3497fd03c2d5f944622d99b7afe0e1d91f003e55100da0012ce91dbbc457ac0746752cb84378abc71944d413c3043589b33f0125eef1ed6e69e3614458d176e41f1bdb98873584c4cc628755ba0d1cece436f91933a4204df6bf392c44a90b68e58a0a6409f0cdbc686cc0f75431b5c957f794f2f3e2861307777771c37b606ff16e9758d8ef349c3c5a738e988701f328f89d2a0c427e6b5a934363a355a0d54309cdd535bb7178ef435734f50fcd40c0529b44612cca8c0e1254c03cd8d5ff4744fbb3783ee117a391cda719ff9896656c29a186bfd6e18272beacb88a74350311d2ae62761d67c81be9bdfa76a3cfcbe7479b7de70915b253f44bf6789db329b7c5c2558a68c03b74c466073b97ba49592bc6ba44506fc2dbdc5c77fc2a6acf54127ea02c2f1b736bd9c512339aacedeaefe2175a1bac3c56071893e7f1a51b61fb68eb39d2526c03eb5334bc9f19fbc71ad0401ccf9b1670d09205287f63d9e798900b3e8eafc0a6efbdbd1b122fe36c93316fabad3a9b777a211df93b362b8faf70a81fba258d74777200c3b399db9ba1342f6dd80d634f95781577f03e5345e186deb82c1d0583d3840352cc845e552d363748860aaf79368cfd9f64e126dfc31eb13b8c147cb5955ef73abfc05ba47ed6868f79578d5fc99bec7064a72f465d15348b1e8f93f5fdb5256b33ea0193a2cf313e7c7f334ed725799d40ab3c65eb2d92ff7c38e00c8c548e7b12d64d17793f4b9449132466c0ec395fb04b88ab84b3e686e3a9cb9fd3c37b76e3d2477847789a8fe1f480cd0b582281d22c0959c94c5a434bafbffe1a06080bf2db42ff02f933f431f2eefb35206d0a9743ff73753ee44fcf9e476ce9122e541fd5a1c393af3133c18299136b991724080f6f048402de4446e7199474207e0589bf46187dcbff92d95cddc6a55eddb49d0fcf271e64054211e84368689920d062694e2a9cc929271da88dfc2f62b4765db72f2dd96d24e31fa4618d2b275741e69d5cb4a1c17feb6d3e7d6d1c04d2eff9e00afa9262f58e42dfab4d1a9588a38a758eeea439c8c22dc2c2c5cf133cf0d206bad78806aa3866951bce01a576152abf6b6f627c83cbdfdee27a5a646b398e83ddd88a721d9440f208109fba1c13f084da850050a4960635608e35cefa231acac5e03c4e96231fd422a09b6cfc1eacae49ae4802718eea7b96591497a5017d06c2a518da62212deef4acf463180c4566b52eec4f868e67c63c1350674df5ddc06fe2f2124d18df92b7a1900cfc666ebc228a09251e8da02d97bec77bb5ce104dea57aa8cd573d7c9b0b8fc510f24df6ee529ccee47cf1d39eee09b5ba7ddaf02da8fcc55c52135f56012efb755a5e217e70871116efd418a38b766133f873d6b36564eb3eda19a309575d16916326db30efdd22e9e1eeadacb8c4ce8bc569d562ac1164a70c6f982cb163bb6e2ebb08e5ae18da45664344fe6d5aba85031b67e9b92c3b31ad2af1ab304bea5a9e4e22a10c5bc5cb9cd94cf54ef6cc6d2d05caf230e3015d4cd803f2246a228f363d927be56aa2b0125e9b0363c7412fec4ba4fa573835994c84dc336951c54158fc05c4b9a8b902b1ea63d55f57dc39f893b1a5be0744b850685e7919777b4b3e19e5b9874a419e64804df07ad694d7d0725c23aeb432300095d1c58658a5bd95e81ef30ebea74f78cfd11b263a626db774c77945416c84566cec129fff076ec3b79ff123dfac485fea2b3e14373953acdd505b321426407732fe28ce3aca529ff823c73fa7b142259472ef9d3caedd4663cf5d20b7fd97fbe6f2bf54fbcbd64449320301b45eb3062e4ba3ee11c5d539ce4209b3e23f320beb5147669db31156ad4bb47e7da489945ebbeb36b01bb5d7d71136491ed3b9f848f2f9ac4c9b2751eb0da2e8ac503cd4d7946b820a17cdc5ec0c208092b4541c576e6e9f5d1fbf2361b3bc51938b3ad0cdca8cfb924593250061f511b34e5e6f70028ebdc3984238f83f57d9dc0937b66acb22922d34455f02ac7700f99eb28cbddc94acd3c9d214231cfbe864678419a487bf3338c5f46cc56709249f6ef0518a2aceadcf8a4ad433a0ca50c4c0c84af8fc1286d4481e803bed55c8233e43b2436d625fe2885de7d85c2973cea23f6f5fd0324eb23e08c504205595d58ed73b8e1c36517afd8b679be4fc699183fa6ae926f9fd251d5077a0dde12d892199566d1edea98b66d22bb7b5bc826a7c100b968a55153b6f137cbb3baddc89805494546c9c4ee7acc2fe3b6269eda7a6d1828e549ea404fbac3d8ebf61b50f0949041d8fac61d1ba9de831c4a2f815687723dbd4b7fd5b777df668b60467ddbc439fe259f7f68249b2eb3f04e27220d3df5045650760b7e51dfeac611af8863f3e48501fb579d4eaa3ab28f422ad51413dba70c5ae3be84501f576ca41eb059e85f5486d9a10b6daaffec8ca1921cbd978c6b053864f3927ebf4d9e4e42c106dd34ebdbba49e270c9b9cecdfe5bb194ff61b4816fed3c02b12cbc75b0fa29b67e0c3ba497ead656fd58705f863666f0013a5596af5d0cd9f36d15463d01e30defa7b739355489a7c8937113ec3b1552d177e247d79f9ef8d0ef4297316c925273f6864c3cc1d14c7f84c83bfb80347a56da7831396d231fabd83f9952ce64c17f5c0aefe59d5d63df1ac49f3766a0b06b90427f5b3b70dd82ac95aeac8823538ffc009b4c714fad16663db4cac8040976a9f388b9c21dde5d4fd46cb85325688395aa0fb4ba2ef14bd5a89e7297bd00c4025949a3497d56acc79e854c9728857be34655aa77dfdf9c847a2b4713ee5c169b5b0073ceae43c0b0f661c2d3fd81d10234e5e3ee0c08b4f87821c6a0b927617525c9314435c6c33935e42b1b0831b136c8aef552439e572a66d4b0c73d5a98f466e61d35193345b16cbdf7e9fd1ff142d144139af3c41859a12a61b785b5fbf586cd421bebdc42879500116230ec614348417389d43815432515d33118641c7aa4d5d30b97c2a18c8d88828f292f3dd1286bb45ee566f49772a1f795761bbc688a152adbe39e86ca1992963c09e8837b9280db77222d4ef00230a56bbc00cc605a6c1c83acc09ddf5c938220737e6b551f85085f178711e8828081871de9bb0b96ca3fc299ae9e86e2a416e8b10486bd9d4194430116cf18533c16472631afdb6a697d1bf15d383961b3572a5e066242650ae034afbed6796d0ef22a3e9b2eacd4cb77c098062050bbb1acda81290b5e62102b7532772707758e7751b11f3c59f4c3c709e7c968159c396f14591b62beb0d21c64d23902034b961cd0741d3349e65f44a3a02a1258a797070e79f574cb2f302b349a5072eae40be7cee5c9003070a5b33e01e847e8dc14467ce611e24924fcc948726addd7cf8d8f8def5ba69f71b0c7a7f387a004397ba0ce86f42dd042c78b133ab356e3bb2b6bc2aa5dff9aca8b0a0fd4ab4fdad585084b53a9a47e97feef053607c5d5522af52a367dca42ab54d666043fa1232288bcd21a01ea6dcc5db33983706ee892b14e35b8ecf93fc53a950ef03f038ca94fab22446950f4b62d5178387f96cac419e39022c07dec09e1c2e61fb3cbf46cb9e1d1b3de60017af78a34c48ba2e30135775380fc7d10d8fe790905fe2bb0d3b6e59310520a36bc887a9ed362688b766dc6f6271129cf9e94e45a5b72c8782e345f77238949ce09b506d4aa4ce96a6b411325587f71659b3167ecf592a73bbd0ba0c1345834841eb682274bd05d93efb5e4cc3e246ae9a80f79c94611ecfe0e73e3db0aedc65bae2d93ce189ba29d23401bbe23e2a0dcbf722229730ce9dab7231ee9e66fea09786ab430ccd36752db7ce7706437005458ad4eb5bb2e32b5ccacb1fb0a30a83a906c470a98d8eef8d681d61cd5291234195cd8d19d87be6a2def3971fa326fe3891b11abd64745d2526792968bf8608866b20dc91a752b0628f27763122b6ab3d26e87e2af40a65a171f488d865f7578f7fa5a7fb36b713254c825b6109d10c6693c2e7d20f0ee52a8747029cfaaffb25cca9b6462001e2132c08812f8d458bbb3226be550eabcf8e6c1d0b6baa33cf71e9b385df8117231a8880f76cc67f43377f0b8421c6297fec61b1a56b6e65935b1263b421c1e0857285b95625f07a3d0f9ac79f0fe16498de5dffcbfdd6d4eaa2ef389c6e5080d28992411305f83bc93fa7b48163544abb37b5b245957f7f228bb0f5eb6e0ed8717122730ce0eb86366544e8bed0f7fb9a769e299f93f99af1fdc928523be222825e20657df42417de30e50cc247422c2100ffa0aa8e7457ccb17e8d5589674eaf395f3b49b663c4bc46f1dca3ad7f9ea757285e62887d27a82b0f9548ce005635471f874d5f3ec3211e8ca26c1bb3ee8eaffbbeead3859183e8b9ed3fdd335fdae685c415f91ee8e80d4a52d989846f24a6a092b55b5fe6a2447b90aa0d7fc06f7f9a5aeb5bdf27bab6fd687164e407cf2bf8657cb9e31c50837e5ad060874ca7296cc5d2f044e6640110d5c05bd1ca6807a1cd0a3e62792293d86d44184f6664d46cf68af7aecb7ec42acb2dfe3e9eba1ad8e55c200a64832bff158585f6e1baa1aac76ed66840e57e920e813fd2a564caa998e60019ff3c2e63ad9a3b98c6c5e4f2e709718f3b8068b4f665cd3719529b39e66af400ced4c7874b866e8dc829f5645def094e7b84e07ddc2fab340c8f864a1181a0199eacf699e6eec90e5d914bf1e9a43d8841643b52f5b43603650d14d5f09dd9c0fda52f4b10af087f87ddff1f84799140a8bd42a3aabd36259bb86b86362749122b26dcdeeaa7051b7ce5e7957489dc43e23e94a39fcd38089b83bd072b9616878e3d8e6181244479fb03b8c367d1b85ea9670ffc262fa918696fe7794d7075bed9c6dbbf656c9e767530455bcd4343abf94cdbb21438eaf9645de8ef71b40520691b96b60daaa26c658f212ebe8f99be8c1e83c40f5e8e4c744494cecb93c19d310ff8d995aeb868d040955604ae9dc2d6287b21896beaca11eb2685f9ab2f7018aac57904903a1a4aee2ea193633063b1a5fd6aafedc3292e0585e28afecc8f3b05ee03ec3c0665bfb460667aed4c1a64714101bb120afdcd0e583ddbc7d0cdb4088e4b58548ea41a0bf4483ce67c3d5ce23fad21790fe4da0f2a2bdb553ed88916da2574e20cba00909653e839bb1c58b04baefa0346da3df1515f9ac90514d87500409b5c54ec8ba38bf150a56364e40ac41d758eafdd0ee532aa99dbeb41ebc4b9a612e42efb10eeb0e5dd955c4d6ab3a8220b9cf5a525b1c6a27c7adfc4f329ca72788ed0836ad6d926dfed9e48630612aa23ecd0b905e724fb0c6b4f0a24ae1b7039522098e040f4f2ed11962a251dc8854c01cbb8466ab60237f566d78242e23e59b4ff22dfacfb51b7bc874d84a6a6bb6f7accc9a8560889826cf60b3566738c1ad19d876e514f8bb099b15357dd6c3c74d8a240a1f4e68ea1f82742a3331462bb4ab21863ef376fc86f4843520ea7e0ba29b4b252d30fd8b6b00f78f261cc917b4704afe887d895fa81d45e276383fce550b455a211714a12378e0c9d0e10a1f1e3b0d5238bea4a6e4430b8a4c7bb025e7e17f8adbb896776626b6bda6070bd42226cb33a4cf04ddf63b7697f5481107c1fe70c38ad494bc3ef662689a1ac8becadccf5630c11feac1c3f6dfef9eb6addd52aeb9a17528af275b595a1645666c351ca24e973c729ee92badb7b2f54553a4bf93b8a4326a6eaf4614fca9e4a7e0c99869c4f38d2bb05ffbc64859f0211d73f64a733407365550dcbbe21b15c39fa9d8051c75a05fe8c639b1ecde3e1867fcce29157868d5e3f9d1671abe70a594fec0e24915f73b89b109a9ec425ebe3bb85d1e49c6f6336b7aa9657b4b226c1b72e7312092d472479a3ff3a8760f697c1406a5dfbe707fd23a01e1734fa4ca4203887b56085ec53a2dc47225269f4f4c312411c4a8c0f37d51ae9b0fa1d6b1dc7fcf4cb50de6e4d9e5e21cc28d039efb5eee0d9ab36a3bf2b88c8777e899b4d56fa25c518f75921ecac0a24fd24c8c14ec3120412379ade8a7ea14bd494295875b43a74feeca4a32d1b83edd7042a5dc9944fc5804dfa09c5b5ec8b4d9f1692b0c4c9838debf739a2c76fbb85e75ca7346461a97a68a8d04c1988b5bc2fc2d64d51cfa0982ddc9f984080aedf42fd6e751cc49683bbb60e0bf0c462b61fa3a128958b9fafb7027f2cdff429eb90f7e2d676d56f73dcb0c874163c19240e7e74f26cb21f27762fa404eaf70447c09e012433a9474ab9cd7a07b4fecaf9b4c18dd95917c9f6f500ecb5114d7f0607066acb17321ab5c9359ceef40d7a2c0991eb2b6d97feed0bebef023dfa0f40cff7b0c9269b4ebbaef02e391603d2ee347c793ad23ac688fdb605899555bc64e16c20ba35b7c5136fcb2bf0e62d28af7d78fc5ffe24ed0abadf06adeee7f456a9d4c2eb85c2b63aeb6a640d926e72cf055302b097f5d69d91be579cf1445b63ed1da8b86818ca03b9c95ef59bdf105c96c93f4abb0ea7029bba3c49976c9b2164b551b946652c3cf52de80f8b02dd07919e1d73731fac2e65d99f0bee078a581964e994deb64333d67770e0dc2772af9499dd92a93df732c3b456c05ee0d4b35a4ea54621b8ac5e14257ca3411344b2418d5433d6a457e772d68eec85ccc4a391ea42b0629e2b82da9c3ad5e62508a6eb8d7d65794fc07b0b048610de2d73655086ac68324f9ebb35a64f6df9e6f0d01bd32adc4cfb54ba15a1af241354e7c0637cfb350c7703cffe11a13eaab75abd631e72da38a9117ca84b66316b9d802b57e3acd1a124d562d55c1d9457f862fcba61c40ab304832f6e8faf1a523497c77f9fe4321de708e7045ac777198427f214920ad632141718a0a68a105a38dd0b1333e048820edfac7a74954f2f1dc3ef99e73289d6b1e029d6c4188c67ab6c2e9c6be5a3560656c7c8304d058ed86ea10c6a66338ebfa322e18ca3a154db6163db0e6358a5cd4e4ff464d3e33d34e87f1e9ee4e794285c839194adf93802e816571cba6a65eef15ba9e78ab84d9646afe36e713067ae84f9c14aa313a6be54ec1a0d212d35574f65c31736cd26bc244d4c142245a21fd66c2a2336030db86aa9f0a728b19f874f9b4ad20f7b569770119720c79dafebc5768d16e0153226aee31fa37903a4e32a3acce9aeeacc63b99138de4cf580ae31d052f79863639591d6c92ba16723cdec05a826e0ff4d2e9cab6eb6a3f313959d7ea346ab62be86c71b1efbf2ddff6c127be430e7ca6ab68695dac2fc121d331ea37d3b253886aa9c7c8cdea8d7f21e37f81a0d91e70b50927018f7bb8613e5fea0cf2b12bc06d6151dcf80abc5e892f86b0f782652379f7b30732ecc468413ddb0e2596d61d1bbebb80e57c52600c488542d4846ab15afa37a0eca411e2592fe10e58eef2b5b99a318768e48f2f244bb8d1a0c659dac7c8a957bc15a5821dab654d924a313180a4bfbb1ed427a7920d31cc8fbb6d35852ae961cb31e099444d392ef179d1840b02516566e44b625d8eafd3379c0bc8293600d70f502299f510151ae067d48094ed115f24445c536f28fa0167b3310db0ad48d6b659212420005809003f0f76e3e4fcac5aae6170241a8ae8be62c576558576d807d2312ecdb9926daea8c2eeccdc87766625da3f088a1e95b119558bafaf2d7153d7526282dd146d139a6e96812eef19403386aad383d2653405648d1419c140395107dc1e2b79af32e2b9969bd592ca9768b2a47f2c510bc0b6c0bbe8eb7a86b3b5517cf9d1ddf48918cb40a0840c1f358023a3bdb4bf102eb6627bda25455d7f326b016585b142ad03ca0a1fa5313b0ea96da82cbd9d114cdf61dc24291b302e14d7f43364809ed62cbd6889f0674c0b31a7e43d14023bc42609d0f00fa576f32dcaea547820b4e0e5590784fc5d5ea2d433f1d72e9c2c44a519851305136515ff65267c603af27591eb7a19d79d6c81d6d6d27b8e1162272055c1dfb825534fdfe380f21596544dac852af313416025cab77de799d9316b1a9d0fda5b5ca2d294776de2acf2899ecf6b5df4600db2d8626c378cc7cff448c724d49dd47c883759ef44f20f1c1de06f60a08d6bbf84e4df60322bcf5c9a27fa251a424b94819376b53e7cd817f8749c283324480a12deb2357e90c6a7cac77cd935b588e4a3e6aabb491c22796267423b7edb7aabad5a566aafbc0b33b76c5acab44af6e6e62c21150ec31fcff8d1b5a99357ee54bf9c410022c61f41f66c029346ebe97c54d16963c9c79a8dab9d2cb6b14e61ab69b985621c1fe9a0bd786c132a87a4f4125030c83109ae8d07b29914c719ada5025832e8136202a6023af334783c3781e64ac2c5567ca3d2fe443261ab630b06750846111638348d086354b0e24c188149e37628c761c3b3b8625c897daa80b078a99be0b1598353309256f415701b5bdc72d3be01ba332f9edac32c159d0060a0ff6410fe54c9bf75fcbe55baf632a638522b5ff2089c30cfc8a4ad07292b9e0f2d0f264da54e0d70319bb250e211664a00a1e88afd7b5223b80b0fc61b2b3fbba376d7e679dc9feed0fc47745352b72f65f6c63f95923b1a3d2c359d5006d464171aa3ceec681ba4f1dc9e2ab131d3f1de0a9bc130735843f1e081348cbc815ab3d08122ea915402cefa713b57471985d14e66eca5326c9b8bff8727811437929ac337f25bf4485147df57b4ea69a5315dbe21771cdec2bb7b11f5e33312f314523ee6526962153cdee4fe0ed5366885617b2dcd600937c3a23b45b4eb85431fd48d85c0b4bb1e96d241b175dc2ec1b1841559b1bda98cb60f2e4f0646949841e885b967144ad3a277be51901806ecde7d92a49ee47a58986de5ffd24a1c36e5c4498106ec0e685b6ffcb5b714eff75ef5773cb2f330abfa5498dda1f00fa951e2330dd60eaf6b60fb066ea348d8b5a5b4f50c1f5904320be6a04f2c5ff76749d4af86e5f82efaf5e06d4c5cea812ff75589cd8fe0aab00bfed573e258b3a5c0e2bdb8ae1636bebc0800766b75fcb70b209c183078f42aff4ec12c461114162f1076c4b528b9dfe9e92033221ee29e14e72d649d4b7f766bc176f3ba00590b61d4752c5628d0a15b7e7553336b763c6cb01062310d83b98ab90fe29e11598f0c3704f85cdbdcb8c7a50b3556a48b57bcbca8b3e1204c17bf7ab87053c6a7b1a1197b96751aa058d7f3c459deb6400cb77336cb46f4dd75973212a532090cdc3ced117d64b596aca87ad333a4f300a99c4864506845a66aa6851a03f1dc73df0e416b4b3b7dafcb5e95025b2922192ee53e5a443ed1d0f8fa42f493bd9c25843413d34a53761d17df847e59758af5e9358641dcb2c1360af81dd4b7a148c5aeb04675fd5d344927d0da80e2ca4111d5148949f8169b37a47cd69b9e6096d091df3ef52cfe4c05f4e696eb29fe8467780586bafef98f67e6561957eb634a50729880a00ee847cb97918ab37981875f8aef8f085f834a4d43897b3e216eed3e7fb8472a84f3eec013dfa5a0bb4406a1ec5a8e616c6a56d784b422ea0f018c595913c170427528a799644cabe3a19c3c0b907a3a1825913bfd02c1c1a2be693785c5dab5b3667754a28ddd44e6a201951cd50212e9b01ffec786848e1798c89c733def283166aeca6695999f2105af1a86c60a276cb6ceff4486b31f6b2fdb4a2210ce9c7ea143e2cc8a764d8214ed76406d0e3b53a7d0e6ef5f22e606cc6f91dd22f5c0a94d90d0ae5fab4a2d8ea66324b47c499b4cbcd2082c385b2a3a41d0596b51f5af59c72b5080690fc126eb6154af49c9f2a5b2fb0b9057c86d530b4e2dad7278d12aed77795ab34d0a2c466931dce408269b4529bfe37bb60633f0a4e49614f38ade624275ef2afa2d9fd5b0f19ef3fd49db06aace1cccae8a78a2c6cf2e9d86ac875e98e71f9bf9c804ba12f480634babe52e92f5fea0dbae792c45c50eb334b93d53bcbcab4a5c03476edcd2987094e97429be52ed80a11ab63ef81d3993b44830c42a3b02e14c0e11c3c7f018ec9ddad698311e352c4af4d14da86262fca27a55ca098e0262d76577ae2bf37ea7c3d423d504930e5b1846401dd9a8dec4692da7f7fe5ba6d034309be57cf7c3aea7538e7dbb1c49ab3765a439a924047cbbb689d3b6ef332f0e912c86258422ebc71c9fefafd277cda15cbc7033be6182f379fe565d707727664156167090ad302d44f804785d3aaaa447c76ff1fa33ba2c845cba767294d25ea57c1be9dbabac8c21a7816f428ed8fb39a068fb47ab5cbcff56fd666a31e854a150d5587741b3d5f35abe7dbe358afc4114596a6d729afe76d6b94f40631a22be8414e7f98a58bd96b1e826625460db0027e33400dd05e0092d09513f1245830a934222e5eb986d96565861fd43d812cef0d247adeba0e1763291dd6760f79ffe9fcba4111527ecb781eeae6e9566715d18c32f7e6f56b7d7797750b0b9c7d6b703403a455e1f7065292f5f5c811c00c233126241f1649e5459d5299b2a198a3f1420a758d7c18dee846f233b37fceedd13c593c80f3a4a18f19689ac8856fb280cd92697041ec444f1587b1f2039e04bcfafc60739196e0d01cb9613ca494569af1dd82281df7817e10488a189d792c30131e6153fe2a7ce7702ad05728ab8c02626634bf528dafb1a9673290da9965744506d016bac2a4f15d2f7a74fbc65f663c9d6511a40120d45b67d7b886d2109348dcd0e8d6d1f6284419d5b395db39cd23cb58e9b8287a5bffac89f80144e2aff9a8535178093227708a011a70cef826c2ac66c395535b016e658b52e87b60243de32c8997deb88572bf45519ea543be585ad1d320ed8f4711748a2cfdac8100723135eed0473188967ccc49af42e71f336ffb278798ca955b45c8d316961cda143461890281fd1073d51cf9510df1fe4e4562ea545941d334952f6980d6126a1c3b49073078ed693b2b2fbbdf0a6480e42de5d1e4501c24a40a382898a19cd97a1192786c73a591e80839614fa8d49ab02e26b7fd77ca3911be097bd34b7d2350f136e6f530cf4916612e15b89039f0e89da1ffd2bbc10bf9119e197570e48846dcfec6e81a1e91142804806750ed85707cd6a1767c2d884105b07ff4967bab5d84f8e0854e2c5802bbe7553117e9cbc524d941d79e50fbce5b58aabc3ca460333df8aa9d02400388c7b4065bfba9d615c3b4e294b5cbe53b9b017638af44896076decaa3f54d6d08c45bee97d15e9b40afdfc6f14a787438bfe95fcb4147208b34b5391ff1aad30f0d95ede0f210ac1b42916fdd72cc8fff877cb23ef069ec8090268bd6ec59bff78d3c79cb8496601ec9ce61e79e72e8f2e6b5661d1f0562e4febdeb2b6ee69221754d9139fdfd48063e0f593e5b488c648c9f38bb4c127f417b220948491913b63bb1d721ad6967ac27afea7e33bab95dc48cab45c3c113a5494fd546c8e55e19f56538c0b6332ead2aa556320f7cfa3f9d1a08bc092deb161db3534087857366760109c0fc521ff7ef75919ceea7a8e1a906df0687059adba3c0dee6b5963b761d87eeca96e0c34e6dd36d5baac6099e720f2b723c3be5037e6b3d6c799371e8bd71c38e4a6b2de232b9d5b6531e1952f879e9a6d6b318a1ffabd8a210de39d22bd784806f884679590a7fd13ecbc45240fbe1c8e2b34113ebb49190d1d7a0a2109b25ef07cc45b83998af427822c6146e3a21b321214a00af22401aac6deccf906455b4a5f3cf55d765e0c054e2a4a343ce46698d8a5e6b34f7d9e07da208b9e338e2ced05928647757796f764f0d20cbede43ebe5da5803d682c011cfeab8aaee6472903caf0bbb3981766aea880fccb259e65a7b64d8c0ee6292617c866bd4d4841ee8eae6fe93e2e836fbf353831918fe4290aba8bfe4e57001c00ba6856f5c3949eff174bfdf0584e89db84255f9a5b3f2659a18ffaf1e4351ea9299479e81db504c1305196cbf9573e39d21d58b9a5cb16d9dc9f6739804c9e935b2e2fa418e4eab8a08671e268388a3cfb5f7d61af391a482af8425f83d4e3a11e11b98b8943e7b433eec563c635c407044546e868b740f4e223af71a67d3390ad7542cc8267104a7d470608e91509e7fb68b2dc0b23c4919e37755e02db7ac094bf142fd9400fe44d281b34a23c66080217dd232be6eae334396a6bbc1981a41485b829876e1e7b04023a2946be049f5f14c93ac1445e101a3b49b916316f5a43c7e80e026b791f92f118b04843f3f9436eb2592907d26f8cba78342a33137810d39ccc7e91fd90df164fba8f9e82d9f150e876d764d72f957a573cb353e4137bf1c9c3840ed27c2d1d60602729ed3a143383012bf1e597efbfbdb10cd3f952f7a3fa3b8d757439b91396bd6fa43466a6c509e34abd75f6337c74b4fbca49c5bd3d2e8cbeab6f8dbd77d5b01edfbdfcc683934bed056b6aff0cb483637bd57bef63c3e1b5fc08b5cb5aad281714a8825af3db8142b003f05e09ce211afcb10eb7cf34d07cf7b662109173f764e16dc748caa46f026e67191a33d51d6c4082cdd4a3a38c16b6b1bb2cac5f280493ff2cc3d53a193b9ebfe6c3db817f516bbf8d735f5dfe6f3416c7ae26b5bc9ef307e859ee78af684c42eaaccbc74371a6ae282ace04acee6e18ade472f0bf8e92328a132c212b6303132a02de138c0fdaf14883269275bc23c969d485c5a2080754e47e2a26ae29807112c39edb6bf1ebd2904f22fbdef40979c946e77596356584913eb7b04708c916ea2665844e3806733c264c7a5a59812a7402d54bc626476f94ee0bc667e7e2d86f0b3bd998788a366382301c5b3d1615261df01597df4a7159e6ac55ce4d1d643e1f07898315db365d191e3e08faa7eb807508a558c2db1b87875218fb99413f3577fd76d86cb1b3023ffcb7b45a2eae6c145929d46c8ef4ea27cea65cab7a2d50c33a071f67710cc374f758c79918c3a272f084b54e29dd102b3572daddca5e54afae6269d368c34a02da3077b37a395e0dfd7cc9c462a7e8aae18d6e58997baf74e4813bbe9ab7f9695ad7da7c5071f6e7621f8309b54de57f526f9ed0fc84e587da19de6641b6c0d61fbfd121040aafa6b78889d29595703ec221c3302f036fd22487d02459997300b905668c7308baf785b3b6dcc1e2e7d4ad46b0a06f8f696f8ae94e3cf9c49f58eeba7676f8747caea78bcb1964e0a90002a143d50e3d8bfc5f59f6fe1ee2984944b35f1f1c5fd7aa674d302830368f902a71920e7c3d98765a29698ff68fa977bba552d0a55f585c665a2dd55d7687b29045b7d0aff8546c84b574b900fff1d1adde0ba7e7c58b2c48d185952c880926bdd44da817146afd31526123544c26f34abb079f6dec91c2be2829859a0deec791dbc5cfe91f8a1713604fa33624e594911d1df22c45d1a7eda94a81f6d95f042debe554f7a32f64e49e802a2cb90452a12f09524e5a1517acb875cd82febf8260d27359f0404b63b58749598b9d66b0547cf5826c558fef9f507a28b2a99ae145843879106130f5dfb1d6f684eff072ebbd9798e89677819129e39423d517feb48cebc32940be7eae139d2de3ff9229616f9fb8ec5eb5a75b1c46b001cac740682cae20c2716b737612b614bbed465c784fe82ab4dbbc2fcb78a789b9cdc1d7a792ee3911604571f19e2f7306952860977e5511f90e351809fe183813133ab8f47fd193958e887f4300cc2601aebd96f1088b22c1c5249b1a2aa5bf2bf06ef5b17de94b2c687857d7546b0efa0b59ee4f57c9e49904a6b8fbfeee73bf71300f39ba9e2b0650d360e6b9873303c35e41b19a362cafd1e82ac17827ffa1d96259e7f83a7ead2dea2457d50236b45dbb7a9ed779b662ee83694dcfa080eb7adc357d39c4257b4e8df5b38eaf22fa22d7779e196bbd81b8b76e2a27c683045acb0d6d899f5285ae66bff4c06ffba2a76af9e4c07415e1968fd987262c61d2558a1ee6081e42948438a979efb48f7029a4a6118a15cee19121f886cb751723d548aa2284328c26f3f9955c60ebcb6241e7116e472e2deaee0d18b1ee7479089106f313f644bb3b0fb825de223a2223b5889ff8a87b385168046db635f7f254710e6fe02f32b51e962137ad02e82b1661e86cc5fe0eb92f3f4626395def3811e0814813a509237918e4c5100088f5b2c4cc968f4023ac055b32133307c6d2805abe6a81fca8d3cda1d04a0e5b932136a1624a7b28c0364d877b13c1d5b83b97e39a5e9eca0e788ea8f1b7014f3f5d703c189f29356cc07d1b3a820ac294ebb9045e0e07ee238a2c96a8bb886fb51ce4b1ec4c94ecf97523039e92a7ed44fab4660e8ef17db68ce9031b553095ecb486ddae8d42f03fcb0be2008b4839cec9cee6d7c6f3e585a74b4d1c570b57f524b705951b2e75826ea8fde5c8b1b0d809424ebae888496e166f893f3acbd13d8a66a39955bdda94aefd2c8731e8421524924dd0e57d542e916c5384eefc9dde691c7752e50131b8d1649d0cd8e25a8244254e8631cae83af7d074dcb75502fc2d06622bd92b4abec0442cfa35a1797254c6051d9ff4fca90a13afc409227762acaf36470407b7ec2d80a0425e4a861863c06f2ae50beeef73d88c6cc2b381c28f2046ffb106af6beb55dfd48f5c9cc876f4b9832b482222d63e0bccca569532fbd1b3f63c87f4c1578eb4553168f7ae198024200794d5f0306ac2d76b18ecdc807b82c2815f0ad05eb194520ac139c005d5f9f7b1b98b57e165d04cdf52bcb2e9c643b25113ae4ca65cc6ae05a0daef73f7c6d7c3eb5b415ce90a27944baa8554ee516634c0f6115ef791577a09b4820f4b04f1d5ec23109672a5d15f1de503e618dfa3159fd5311bca0a0144c4f4a42cb5ea1e255fbd34ed4a6ddbecaaa36713c848010ae37c80cbc03a98249bed3e1a5c6a2f2e4a7fec350f8c9fc0ac3325626c98c477aa2ccd6ff47c59c02ec15e32dff5d3ce7a308998bd1077173c166e4827c9c9724c034241dc2afa25a2d2210b79410dade4523ed0ea4d47ab6d5f28a6784e33feb6c4dc60308cd53317e7a8c1d704585f2f31ce320aabd16fdd44ceb95c700af26cb25e6257ed9594ec191a837f57d4629fe2a3ec9d78d8c1f096f81e9a4419289a93d26ce983cbe74275fc74c1d11591d9d3cb03aeef24915cd6c33c23f5caa9b17c381a6ea29f83fdede024a391a86dd71d8cae6f23b83a292141f6cc501d9f6ce8d698ea8da703bce992a170fa94d79d55de28563fd0433f6dc155c5e5a4103b9c52b0f66e55d03bcc20b977a6dc8860f46258a5f3dbcf198aaee26f2831d9461bfee38adb70a6aee0ec038bf51aff3cca2b4bde817a4e93f2de797b61fed688d6a21c3630f5d3a41362384c6ba3312ca31f1b7980ed9c88650c47c199497219bc34721f535a4f1706745b2e77ebf4145658bf615cdcfc97efeb86743df2272fefdb963ff9577f8ae01c8db4f4737b54cb58baa03de98ca21f6c8fc50d5285d752506a71f3b8e3a0ea3395bd78a872414e520a32f233fa4990e507831a3e15cfd741aee4d2567be7a970bd2aa5574cb50c21ed60612fa63967043ec17042b40e25b3c7131e01dda20f45dc659516ea50bc08d11199574f4b5a8d7a4c7dca5d148f93d0bff031361f42502bca3b74dcccc3350a6799d3f0e8fe7423c8e3ef0791255700e45acd9254fe0409bfac248210d13dbcbd118a8c7647d6752e5f0cf4eb091b5d316e640d8faa62b46f8e4e547d2feac9b811ad8f16a535c680af6274e57cb9d0bc8faac4ae7d021b06b00fa7adaf0ac762e8635a422312b5707ad7d9400f758ec43dd5efa176d875ce5a86f5f3d65cbe4a547217683a7344239d9c96ac9e88082341a3532528fad3bc6c811bdef75ba824fcd819e89127f621cddb604feea9a2a3bdc485a3de7966138c548a93d3d33a7ebc79b59e16d3a5efd96aace4c2650fd9e7d78c88c791b47f188fa52351eb4d295bc0fcb531ff719724259771433ceeb1baa08663233eb2e045f6a0740fec1b8f85bc7fd8ef8f501c6ec26ae0ad3aa834aefe1f820a9fa7d624341dc0e4b77bf839805ba401a8d00ad587e564255e19888246ea3b7282393b971f52e5bc4d334514bcda2dfcb6cc6d6f2b6cbcebd0d0eaacde6f42a3aacf9cf313ed93428ec0a80f6b9f83f93b08a4af1f1e4bb7aa65add0fa76aedad6ab457c26acf9862b475b6268c666aeafa6e43a14b77923f674ef4d362aa9b48d9a5d059b8783875040ad51a38caa72f6b35d723c42f08b96ec97ca3053c16287df061c513d5420c001403ebbbad19d3bfb9104378345f8f196cf7f30135da0e97e55da09dce5073762dfb6ba8d5ee5babaccef9b64bf9e0aafa27f9b65b0b9f16d12edf5d1b2284d629be2ce63b64c6b29b3ab6a05af3f096658b1c5b20689ffcdb1b98295b85e55b93888c347ad48c1f727faa5cb2e292c1c672ac0fd6e246822be761fba09dbb142b21b3a922ab68f1aa1ffce008a498fbb958e6ea54e69da76754d41f37ee233e673f5aa74e58f12b797c5fdd8c2cf0d5b2ae9aae05d3028593f11665d9abd0fb48a9021a2f721fefa9f172799b039b7ae62281a83bebfbd95f3d774980ca2db20c4e9a0a73ea7a21ec55e01ebd396635492e46f8e21538c2e00ee43f9ee512029ec8e6a82bf96904ff6dd376e9531a6965477c04efe14770700fc2793a0c86fb9dd41d3afe06d06e4bc054f527cb3c5134260fd97e7567ff341d0148261eba674165a534ad1766b84fd0a20aad32fdc62ced69de7f86b73a5480d657efdc11f178ad803b32341f676a079da77a614045e549a90af0213fa9c22cd3c4edae6a05c53616535e5c67a88082864b678123deeef752e915868121898e5a44835792d7448275f33affe07a25112e42e35871cc31c0458e4a1f597d4dd34c111a7443b1ae096c95b38b1adf018f0182725b576e8d7ad3013f14f27a3ac050c7c5e81b429da4a730f8301c790ca6a713b080a0085c1ed892f2da833bd44a1dc89ce7dfbdb7515ac2dd5409a65c1fc3ff2198d109fa1c9316ef76d9c322ade5454d72b95f5a9506a6ce6f732f19010a30abee98a810c2daa0736b587cee2b738355e09408bf8eac4baf55e1c8b19c0f01d1da9eccf812ccb385225e3138ed59541ae48a726c82e8aa5588661543cf8ae1194753d8e2d629527fe84aa3d00062e7ddc9d6b12f70d0c41b30b61c9a80f2a336d9ff6f39e6a27e035360c66921983583c038ffb7c2fc82d8db1e3ca3f6434ce048b037cadd33cffee3026aab9665c9ed09a9e1fe7af00ccf282481bde7eb17c243525358f1865aa7d5ba50ee83323f1f34435deac69a1d3b876259567f29a012aa17122fca62f11bacc70a14097f376880687577ac9a53a36c3607367bf0f1733b714d51061f590a8b4dc0828d971f9ed2f8e22ce208c69da567d9e052df10b0ce03c885a8b266250139fdf7288b8b7324c66870c203d00b3fbc3a335b67da61549a776d0bb1aa7f8ea5157fbc16b5f4ae5b44030fe6987fe32a573730e6fef2a3076e1aaad0980c9c4194d02313c14d322d85c8575b1f30896266b8f77db29e04b2d10e0f0e41c74bf22c71f8f28af3118e1e042144f3088ef89ac6c00e324e2da132ba382eb015b08a47e4eeaae711c15f484a2e550505eeb82da0e009b5ca26de9c80c4b0ed2d44dd64c4eba7e1127de58be459189c880fde406d0dfe65ef75b10b4acd615c3a1c2ef37b6e696015f703158e61fc362b23a51e29396d72ca3f21a225c1d0e28e628525395143232bd88ca26ff84a4e3eb378be4e92da608a4f7ddb201c154f10c4b670960ca2851cdcdd74b48857e054b3d8f1a9b94a52778fff8b228fb7b082ab682ece2a08282851ddc6ac80ba484e847b9214e2e8226411d2b784e629198a07177c35866ad16d095fd521359ca113fd46247526705e2b103f668bac752c59e61bb56ec1e76672e87807f8d98ab28bab5b22b1b70868a00c6982bed59c6deea1d2da76ddcb604b38c7764beeaa18852bc1fdec172898b4a050a76df3a7a5cd14e068b190148348faba4322329f9fc36979f99b2a1ffc4ff62513a6fa19b485c3bf4118503165fa9348645514e05bce473d8db6b7c0b996c3435b4d9a761dbeee6f3bce7fc2beab02afe2a2d3147f4d68c536356b4d8b22f228984f79716c7493ed7649c0ffb0339e547f225250a9e0dd538e6d3f75929ed1f83bf6cdfc836550f77debdaf0b78c5431e9c51fd944a840d52f552241cea8fc4322820ba5cdbc254058dbee41ccf36d0455491f69bf680931857edb2908e4adf5e03f50ab07ff90b7017279dd83a342d3338ae0c567571a16a2404533397faac5158d52d85a94ee880d6232e8c6c47ce27a0128415c83946f084284e733df54c08b7435dffa213ad92c71a835ad4c9760976183f47586b9b4028990c554d6407a4dbbb6943ddc3cae025fe367ca7086e4c931fe9e551a072f2a4a15181939bec8ca728288a5e04e0085e63f901852169b9154659f089b950c980f7cf7b67983592aced0a72587669086a2c08de301682ba821e8f89153e0eeebdd64486c77b4abfadd8a8781cc0b351a3b6d3ab7e12138bb0eddc034c81e457cb798c406b004da5308272d6ecd7eb15c1ffca2f99a6c4c0528b09b46f689a7492809d47f143aa3cdd9ffd039e3c41a21a2f559f45ea97c9b0a613651280a1aaabc1424f7a87b51518bcad41859bf0746306637bf4284a9354bc4601d071e63b8585770046c76093c6bec5321129546a74993b380bcf5a876acff3ee25236282f7854017c80571b7d6c19ce3723bed63437c1b8832b02cb1a6507d71263496beedec24b4c460b30bcac541e655a64e2a446c8fc27927215cd8b8262b8a484d47932c7a07a3d523e9a69196b3b31daaa030672df86cab909eeceb48bcf6913ac0eade68f0ff6991a553f5cad7c644c8615479959dd8c2422852df1cfdec6eff474c163eef42aa3dcb2bb879391c186aca5caf4c0564b7c4b15121da264e7e2895c43babe780757bdcbb510b9697660f245023c58e400a8a96980ba5685fd8288a8e203e3a5213d7c31b669efab7b725a2df9c636dfa2237f6a6da29293701e1e879acffaf2d5e8001c19397ddc46df67979432474bcf9e5f9d86b66330565aa51f26dc28bf864400015c1905f1ca24b47072fb7ed08acccdaf30489e8b1a366d45bb533e1fa7cbcb26090018e8c2074e2822bb5e4873f035d44d9819af5005e6138d5c1aa1054e06964dc3f81a047e47edd3b3b4a63a4ae137d3254ea4b374ef309ad98549070cc820a08043d40ad8369703c268e322bbaa724a2c55ae309793eb75d41fa5e553afc58a0c5b3e54526671da014c9bb0adb0a6a4af5632b679c5c0fe56720a2063ab8b65d59531fe54d103abde4cb4f744432448047ac71899cb72fde9fd15f69f18743e24186d97f15dd6d68cf4cc432897e79239b17493eda18771bfcce51d55d2cb8fb6089143a3a3ed845854eedc8342a52b63cddf57387ae94fbf43e415f9dccdfebc27126a7efb3f3b3fa5c67480d4fdbe58027706ce5c4b4ec16fc0951ba992e03127ec8be949e942dd8a3cbe871b457b0df746a4db114cae5e1f23de397bfa36217d400734b7d97e4d46958183aa550e3e1e48e55d1dd6adf87414a1df87f744643c02c2fb34822036533bff40033be5c005b334362ec51ebaa26c64bfe568c1f831a399b326156ff8a7bebb6ebf3e3416da3aaee236f67b35181943840fb4f495b9e64618ee05334a57482ee526558a964edec33697593ef91412d2ff8c5992bed48dcf3bd234fb2242a0eafd2011b703b0369cd1d8a106874aa013c282e6105b07081f0dccdb0acb0a275e8ac4b505157c6f3beb9f7328743c7a4311ee06357894f2d99b0cf38723bafaca6add0a2dcf0b429f560c0402f39d99cb7472f56c8de9b62b883708ccca625ad03f16978bfa8c8cd0d83ae8e8ca16ae3e3eb9a135ba884c9166610d3951b777e6503fcb78d38acdefd46bb200d6207a32dbbd10017583bfa662e5b66ceb330d376751eda8254e9f492cbb60257da43efac26882721f6e91c2f74d29189224c78fc88a0d819a5408430cc724ae667ad17c96a00524f128886f344dc31cc59bfce7df2b667d32069ebd7f975de40174512329dc064307119a870ceea6609a48d19742c58f9bc71f1abbc7ea59012164b20bfe7560900625f2b9b860c31fd2642493d1e9a40d8d38855ca1de71f26fa66535ed14a38877c1ade1c8553d31769b4aa55e3525fc47112172eac52778e992c0a1b3d442344e120034b20c2c38c9446c004c33782c9f5c27c46462194eb16eb536796fb6761bf0033b211bdde9db263664d79ef5089c600322b4a7f2b4400a421b14de7976f15740fe25c95a9b8f31e4b663d8d965926e3fd66d989b541449a607cec1ebf39c1ef222d3a05124a059a329334c67df075dcb26da1baadceaacea546399060ffac1e92387cde809a9f523310420f5aaa3079928e2a552a709703f0820311ac887e550e4da64054f5187744a47f1d3bab6af141cb427fd2323eae1dee07838fe915ef8950bf49f54b1ac6f8ff24d38c611d07694f7c3d3d92f24d5d8174d512029b18d5c59d6d6abe25b1ac4b18623381279430d2bc4402550d8efecdefe9955ab019335daff74357167dd15bbb87c5493d27c07e00c0998f8cefcb535102d492333636a352df47cd9673a95a9182b3996a563d362630334714a040f47338a28c1e8176ad5b0709d7c9ecb2999b99777ad2ef8818e31c738180e203a26019ae866cadded8716737dca58078c3b4049352f3835a17c360a4de5934235ac59205c5e229232b212c0e14e341a3656439db8cee822c7badec629d9193bbe5d68979c499bd67425bbf17e7f6484b2cfff32b595ad9c93afb703198ea111aede9469f814df7c2f12df0816f4ee5dc7c8bc418c0f3b0173ec1d4ba76a82bd41d426be91f0a901b1cc154c381fd1d49dba80363f9a07431f3b2b187c621210f3ec555aad628bd60d85dc01d4fc1e7c9e3c47d8fea40b5b992d661904412b34ddf4feaaf904099fa4cfcbd261683ddc801e3c511a183939f438ceffb73e30d6310cfde6e3fd469f29afaebcd7de5234b70a63975080f34cb8c48a96e78af99d3683b31a026ad1cc2faefc977cd0c09bbc780af2106bd0e0e0623242a503fe1b89acb7ebba9a334a78769032163fd77fec3c7b6c30b2e3b18bb74633d0956c63acad3fac6beda732090ce80104dd5121c5ea56a19210c0b33f9e15bbb4ba97813aad65a0e1c6ddbbee1858c17fe9979d2a593e4c57be8b869f09a9d4050e80f2eae0c7de0675cb578ba8fca7f047618b512422404336e35d69149908f4b486ef256e17083b0d34010f3a42e914725bdae48f9d2f3ab9eaa5f793994de0d651dc2d813af22dcdc4017596c99e79cf52827ac61f05538d20165ca5a8ef04cca508df50aa3e5b64394127875bc3609050564d32f1362d135aac8721db4f80d810515dcf5ec68b6eb126b4b3ca14169c062a966ae05b19d071b84ed996528cb5bd595e2a238e7678e6cd3f25b05570ee26f80f0f3939596ae65aeff3888a47a64f3c36ce763bd25558180dbb54ebf597e9f67ba18bb52c67bb656de5628bf38e08c76fb8405a3d741449af52a4c50b3e0d21e46f667b3f1f1d2986dc16b85ed58803d357d60769dceedaf04292d8194c739e9950eadf87e1f0ee72332561d3bac87002c332c6e0e7d6fa0f9089bd34c185d2f34ac88944d27034b15d44b7e8aaa88c86e1c62aca7495e1362e0cb3bd273c1121bf5db6779e6d8183fb475997c3d9c9371accb1a90d22448ece39e22e3fcd50b811bd07c32a0f88424068e6d6074c36d3a1b873a5acb1ffbb6945aa8d0be3bf5caa09e2be546d1f85525bf67d2c8bdedb68f32b1a2c685a4177db2c00aec403a845f7401106db7e472c81b26ab36a2d08721810489beafff600b4861c20d24af04e4a0e2fbfa555bfebc8299054901eba17698e50394a63d80d5fcc085145e43b6224bc100cc6cef590e67c69845e2d03d7770d63262e431b80771555c193f1f5117f480cfab6ec83c02496b8c9b7ad0a06a09390e8157e2f8be13a8d3d1fafa82f1bf8eb6f66351cf79781bcea8d1abe831694de1b9e079db345348638297f5760946b3083dafc3c208865593b3e770158e28a702e9300e6b0a8d3c2c13027d39da0693889939157040cc0345631733f876a4e868d7822fab4dab35c47bd646d83499622fc055f2077c0fa400d6834f3d324e7e83613d9d05ed8ef3c73b148a4da13857a0d68650abe69ec1f17c6788c9c5a252d7041e70a8edde781bf3766dd073bc1485fe7176e91cce6b0f7064159a7700b05dfe289f58ef7f497c34e57b77542e5c82d5899f7b31132dbd3d320fe9f07ccf654f2f992d02872e12f1569ec07ed3fbfbe6f5503ea260c3ec10ab014a6ca361aad6ddd83df1b582ea60eee9f3d04edcae54588b185cbb6ee4819ab2c4942331217c0cd2cfb0f239196b31b22462a236612e16f9e5644703d7babdbc46400fbc3e9e739ca3b1ddbbbd168ca86e56017ae199ee6dacfb345504807127ff410b965bd2b96397741104733dc049e6ec3896cff8b9aa64c58866585b03a43ac3bc22f094d59a91ad51987b75460342131411677d81746fbf159d830d7935561ba791178fcebcbdfc85e2e56ca283e928d928340f845fe189749f76a757752c2b05953cb25445d1973ffde54df162dd2373175a29b027c5af2aa299fd9ab67f87911cf5548662edba3fa3a2aff5da4310d1281d34d6b943bf4befad0e6f400957ceb1031acc45de4a06253e6888d2c391d356b51cf1b5a04f6370a692a68fe0c480ba37e5d2f1ebfa4064ed93fc5a4881986c80a685b8ebcef7588e67240b446ed03f6bf31efaed0f74a322aacc091aebfbc29117fdf85ce5f3de0a6259e618012611978b9ca4817370a22a241b1e02503077925bd930edecb13c82638503a5d5930d791d0fecf05f1ed3898b39f75add337b4c27c819a4861d1d101d26533eaf6ed10261b0e969cfe9d6546d8bff2ad12eba74086538cf1afa1904e9fdb40788c82a000984f646e6a5fbc781dfd2c255f9268fed520b9fda9baede3be4811e5cbb9197fe8aac2dfe08ce3776241c1a80ec075c64d15882f92cb453c13296f9c8ce46c8695bef081ff0663e844157c7133be1cc442a7b94cb51163f25d14363cc937e6594619cb40ee9c70401bd510bf824d0ca536b421f40b3a11f3a89048420756d7870f24c15370387b3ea2e062bf91ff956c6682acdb58ddba5200d03e5dff44c1b93245386252a1839f6174061702067de7f99a94aedb525f30be05bb202eab67210b8df1218d901d44087d334c769580f7691724f8e9afd5abec10dc39b527c407710fe7d7fbe268e49d90e65972625acee5c517ac80c3f20d765fe731249450052dbc8d2377289579d2146d50d449ae9448d75292fa21e56fb59bd4f6cd5f5d0e5e5d423aa8c24041e5592b70375c78b80907af7203e7fa5bfa7147a7069cbbcf61b687e78a9a11c6114c4fd7b8a031e68a5f8a24dd6e4c4514cb613c1244438c9a1451a44233472d465c096d0c313cf4029a51f318809faeef8ff2c0ec389b9ff9e7db34b20e2f9f3144f405f55eca6f8e29d17ee1fa3cc76d1e4512da9aaa35ac3dba3e333af3540a6d7812105c3a577dc2864b49e76f87ee5bdf9b2fd0baabb3b1dbb6c820520db0072a6b1a10d66554de8a0282024f24160f4b9befb22a8433403241ee256f2f8efc8463a7df2a929ba0597c24ead053d78d661e9bb760dc4cbbc946f0c9bd25d83601b724b4c94b7cd4db72ce252f36683ada7f2c629515b5d4a27444dd1debd8ce45a49120781792ca9cf835cb04b47ae2ce50f6cafd6b7428a9d905af654687bf1889a762d2a8d304ff852721143b0ccb77198e9b63981dffdccfbfbaee9f1039c32d6864698c7690758de087ef279b4c6bff0bd62e69a84f0861a40dd4571180bfaafc419f8b5510a2d95d4161822d2c507c54dd592bce6f8962f7eba26301c9288b0e0e99c369322201783053b6fefb1c405b894cc869d154a705e4c29ce8cfb2af16d77f5b44abe74a59b03fc0ce0e313a123d6c6a5732197c5017a624655e6ae9bb0010d2dc6ef304a06897792389dd48c395a3adb3f4cc4f1e333735cf251fb817216ac1ef51d00e77fd27aa806815f90ffc6989c36356e35658384fb2fd21b4f2ccbd08c59cf3727e7b4de6fb2d9b66e93bf66e8142c357332710ea76161738afc0066c4d3f9804a7a6d5c6be1a4c3be584e7db28e88fc84f37cd7df3135249bb5cefb5b50071b6b6ba35d2b05b24efa4fc31ea171557af48f7ef8ebe1bf8337b841ba5492165b4b80cee48225cdab13bda3a32dbec58f697d23216f6899129b79b4ced924fb9ef6c23550555c98fedc55f65d3d1603048843771e6318a13da7e1d5bd9a85a0294d7b106ccbd2bdba6f754248f5774aad830d33741d549386cddb2484ee58ec2916a50849a3dc7430cbb934c71304ab5727b52c5470cf4f78678beac64849f88762e6086a1f6814c57c34f000749d5ca6d93bfdf4e73124b2f12d0ce05ecd280b7af46a22b7e7828e6d6a24d5995a2b5d4a704c8df2d8b8fa009f07aa2dfe7e65e13e76cebdc712d9d96b3b7730a74529e1d7c301a91856c5a869d7833206768419f31d7d1f0e6dda6c83f22a8466184d01c8d98058e57905e157047249085a703b7ea00bad05b3eda65c4424c6e46ae28dd6d84e59ead1d595800c5f0c2341519780aee3b2ef31e17176b13e553f2e3579e4a343faa93a7043bc8e86788095e64e7809bf37719fff9420fc112f3c24b14a9ecd475d3ece2079adb17d4f18742b7e1de91cc8205c25f27fb32406d6c1a31adc340a1ebc577e55c9386f908cd1d957d7d068978ae1b78d475a84fd5e971ecc924bb6379361c55911fff0d1b038709d0471e23331228f09a44642f3bd1264b43d2f6f9f9e5df620794152d1ea1b4be2a18a9edb2f88db1d3e07e3b835d4abcdda42c32c3e734458c48a707bcbd5046ed0b57a3e7aff6e865ffefcada7890ee55292051708223b9eb42946b3eceb6908453dd89f0980211800a775ec7d1209c34971cc898390c14492de771872755e15fa6c6aef309859c65ecfd27c73f23c9ceba39714e8735d74288d314492f8cc0d161dd78b3f496ab4967603cb38868a6e8936364f15ab88362bcff2d1944a9e65948fff1ada8710a154e911b99cc43dcdc23e073c134266a29116b236ec7bbffd205e3a8f8f57376013be3e640b8a8550d607e8606d957ae64d50d19e7d4edc64aef36f7eef9dae1bcada7dd693dd505d72a1c87d2cd731d5ac6a70b72201c0df9e0e7ac83f85cb68a0f209f65c8be49d485912d5d39b3077a0d4003a8f835e1f8ccf3c395e0d84789f3b52e93eaef56344079763782e1f9f71279043b8c095d58c479c29ea8a582bdb8168cf7b5972ca96f3786dc7bc8917d0a8888eb8d7dcc6ad222bf6145deee9b731dcd2c74e20419bc24189acbebfd4de762b90d85e3e1449a5e45c4448946c18bd1a71b52e5c895de59f0a0de8bfcb44043cb3125e07aad41ef0900ce245243591b5611d8506a4886fdfc1866a5f266db0858b418d02275343e7c3136aaffc0285e256f900866eb3a0c131e823323bedcc0b7355e8927d6ec4761c3f0aa4db25e8ed772d769b6898dde274995b3124e287e8f745999fd4184caca0aa5bd949fde8d217d6c3e11a0394a462f5d8bdf68eca448a490879833b5dc09209ae847c10ff83b72b2b4dda78f3360d385d01d7a26ec2bb430a4a62b93b9d0a4ba2ce1989e67a182d72a542d095854c0a2b5a65fbc341cc38182e4842be48960cf04c86f51ecaac191d56da42fff944da7b69fa544ce49e7f98ac578404cd5f66117f53c5879f8a5ecc45fe04cd2a12cf7ee209960d9108035ecfde371251b98e6d1398d3d50042a1fa4e556bf19446601a60b088b94244cddbf5c99fe3c5e68ba8ed171ee901d0df848ff84b3f444bea3a95e0cb9c306584c11bcc2ad3d1f409cc6eb8b641af5fb954b03463ec8a346ccaafeef7bec210ac4a804bf498f3bedf4dfdf7bd1a70e084ce989e079c09a2bc93a7f87def2a20b0085c1d88b3c9b6944b70bc7a772eba345f6c5f51f8cde8ec8d42ec8b4169d52c63d7be4a07181728c6e182ab41db38ea94695dc22ca9c01b1a7f16f8065de5611f4d453cd021985013adbcf7257884e128c59cf3f9f8705b6842834b367b25328a064a8a3b0544de2f4d51de2cf9646205aa231cbb8490786df6a2f1b3089702b09a0531727debe3bc038228b60ef109002b1461d2703067d2bc252ff4342edba37e7a0bdaf3051d42caff974d96ab2bad7083dfbe2dd1a1a3b1cd062adeb19434c841cd3ad29740c2bb09193d79e0cdab01534a077cedb02a5ba5d1ca6d4eb71201996129b2e31f14944c5301c224b6f2e0a8e1445891530389412549205ab4a2c187bdc9a87ce8b4d8af460f9e8591cde3ecf82d9e48fab30d47be6b964ee7d4c23a2331fa5009a7de9dcc6533c9be5f85bf0fd2d1453846d7b38936d39884148a0284f3cb9b076017160e67a133f1bb27ae066810696c86310abc332e944e0d69847c590cfeb6f2096580d747b3438f67cf4f3b03818a7b823cc9068afc1ebd6d2155358fa9f7a7e34577dd62cc01fbd8ddb47a5fda5b37adf0dd810d3c92c6aabf4ef3d7c2b3f430c378371f9cb3016e4e27c7e5d80f7f2bbd021470b7a8b779e37624822ff02eabd8c177fa6b1e95c903053fc5ee6ae1fd356b7b7af4f10fcfac5274b2703a16cf7fb03a07aa79a8cd008e851da8a72a1037547ee67bfbfa42d269ee039190ebe98ab9ec2ae3140fc1f7f48f5b76fe8621bea02aa236f85710681c2f7bbfc734c4a56e70eb0398b9c5891089d6d2b158c0d187d13577afc387ac0321e7a69ec6ea958731911d6fb27987210624fc5d7f7f442a2ee5e9bc246a638ce2457a6b156905484c0277e61b38a84281d7efdb07519c7f537a77d764a91c1fa771503450c5accafad7a3c113702a66dfd3167dc20207c54fed53678d32857057da764cb282a28417110c2dd22a02bb07bb4ea98505f4777af758762a842f76216c645c94d323be01596952a9fa387ced1a00df79cb66584b2d95c0d610b47394ac56c787c043bb1c771973ed77ab90f9a24c58c9eb202fc118501ddcc4184d3b789ae8979c0e8c3ff978622e75ac8a0b63bae383b41a1eabd7232967d57a80ebb935292b6251a729a9a3cd0f53f5b1dc6823a512d77d26fe558d44a008f2d57a085e54632a9354230928474d1709df1a4cd82e8d8ca58a3cb028817899c96c3a1c55495a7b66af26a228407930ae12cc82e000356702b7050653f334640d52df1a11e366226797396e98436790bd6346aae04b6c6db5540840772b2681e1f0bcf47bf89e566fc21dc5e20baa2fd6a027210f227bf6c2b83601e8dd0360f7ec32c5b0c602394e6998f68d7b8a0a17a88fa049f902ec94be447959116abb252b1ff4b706250bce5ab4a5243993c678cf55ca2b36843740acd489f4bd59586b9337619868583c793a56226aa346f1d6da5ed2538540bef9acbbe496668e44e2a55d58972dd4cc4596e4e36dd4ffba346e7a8d3804a39738ce93f172c535ea684d84974b5c12d81a988f61baab8f688de1ae7a4a54980d3fb53eb4f4c953137acc2d7d3c00c5b1e36b476b5556127cea3cafaf11b7d583d4e5da71335d5d5983154f15ef7baf9521ad380cbfb9eecc90ffa8879aed9e5202cf9328a1150bdedb5f7e5d15247e2e16e9941330d93da003b36bf87fbd23747577c2c9cb48c2a6fd1dcdebab62b299db80f20dbac8118e206291ee81aac5b672fc2e5f3b9ff71b57d9bb3cdbdbf82375cbfbaca1ec9ca52e235c0a99b3519ca012ddce9f0439a87f5eb6fbbcd134c30d43828ad82affcf202232a8c019309c670fa844e37a5c3e104234c91f6c65eac108e018f61030d5fcf58e3d0c4ef55bd8da95d9ad8d5feee1f0f32513597cad2f72c9776875587e66dc3949156c36ac7a0ba2949737a014b80e3f8a9966259221433711041b326d078306b5747deb654c2847508384a58922e6f5851aa73e48bf2e33dc352d812860dfc0db01ae073dd3af76315e382ee193989cc492a23adfa6cb588e3e6c293cdf7e6342aa34259d210a7313ff5308045e2b638e934e1301897a98f06000f559911bdab2e4864ecfa842b44082ba048616e0d03d0bc65a2698c952e00a38a312e4e954606d9cc1f7f04d3001f4e28bf49c8ee894d15ac5492e6b0f3b85279770225476f6c3ef0416ad32c5c341ddfc3d85e2ae331c0b9c1d9476f7431db513df7493d9fd5f67391f4d2ce36df57003c79cad3245e421b63bff19c3c233dbd318c45ec47f4ff44f833ec7092c47606631aa37034657aa3663bf4b2597d30d140c4e6fb91aee83a25ccfab325dccb6af4427705bed43904620346a97656cc82bb65d5d086f8a2336f30f02d2ef9b148cd95816598a10cc2f1ddb2bf0cbfc84a0c8d919813453c2ac7b13423d824f75c205a9dff47604f2cb6c7ba15e80de0dd1bfb2308233b0b549742ca0663e22a5ad19a1b293f8b384d6ad1886f64a0879c053b004aeba670813211baa0ca807fa8468007644f4799057703a2cc9bfe0dc8ddf7cc4523f783689dc48ced3d39a3b44c46f4ccb3467097ceef55b662b55b12c1ecf5c0f1f0339e3261a5288c5d0a85493ffddecdaa3a2d8a7060b56af12e9060ab28885b720fa55769d944a6857274ec576a1bf6bf4e6e29b4da2d39a13eeeb0929912cbb4d3d7a466ae8f05d398fb45914b03a5bc0e9b4b2f09c377b59e6d1d31d8a59918d59df4b9f8ebeb4b38dda7c541f1c349acd499f8a80236023b29569ff9c34dac53a6c3ea4ed948c84b14f59c7241ebbf15ee76b256716168ea10389289143377a39018cdccc2045fd1b0ba949486ccf334906cb1b9fda6a6dc3d79aefddf7a9c7933e5fae7c81a3b391af02189d497d1c280837a6a1421377767054624a41a53ed12fccb1a64afb37ab941011132b237cc4d8a50be11e7269d6488638c7104af1e6c98ecfbf92283b20651e92949b3063feb0ca6f468b9a41e364704f6396d14f183497466a264c87edafe1cb9f5e4bbcb8a1048e3b96d02d6a8490ce81acc42ac737c33e8058a8adac7503d5045cca9fca7387cee2d77ba9053c4f57922fc414d0464f8818d02503f1d4776b08f97034e218ca43b550c1ca1d01b2352a9a885d31ffcfda245596678f44f7c58846996e21246f6fe6362e7d676e772dd2d43f8d0e5dbb1a9dd0a7f4f63eb9559a7d1d552b555572aeecb02f0d2f105cda83b32e9ebda0319593430081ad3a7298f78520202666182af039b2d3febb1c5d2d37f7410624dc92ca81df588fc5e2d2ee9569ea4c71fcf33a2e0fb9dd01935ae6eae57672a833482010d12d9dbd505499ded184b82c583f24e9ba92104009c0280b819a30f70e52fc531c72d30c852b2c2659f04387a5319aefcd5c2e05394bc6e1b5fc45a670f12893d393ba8cf67a8d4c81c013039d35072f0f1a7faa7eaf8cdc70fa3738ed9afdc52c26cb627ecff577d049269bdee1bbb1a3697f213aa590bdd53c26b743a6c251d7bb04bfbe7e5ce2d5aba506421e6342871294b16c7474ed127ad241e5293331105171fd5616a63efa58a4e1ce58852c3b100f6b8bf64eb2721a7aa5e41ecb4be9da8e3affa8dc5c3cd494a4d9e13317b43311455923b2b4b5366e90c71c359fb2dbe1e8b8fc5fc9f1481b0f791ef87e7a3a166735bf8b9fbe004f9de176c6981dff19683a871d34ac57389adc951afaafc5e068a4b6fd612c55943a28f92addf8dbe652c14b360b7941eec772c66a380d4e112ce852e126e5dcdf817d651ccf258a928004d5329ef1959eaa0f2f6c34537200f6da9d7077d2cf8ddfb943abe4a46a011a5c7d08785e8dabf2188fa3b8f04711482d0769edb7cd2de9ab382bd529bd46ba60bcee25081e2e90b8f7e1c4745130f5dd49715e1994a3ca7504010ea4ebbbd06c53ea8d9ba3b6771a8c15077bdad7d30c37ba67e65f3ecbb7c957eae906eba94b281c2c11830ff23c7e36bdc294a39444732409d6ee2829b2fc9ad1081d49050946270d252d65644c87a247da0b806e6a19d0b16c1fb3f9ad896d486953dabe6c8b8d72e48b15410fbbeeb7dbec4bdc656e0174688df41ef8ea059a8786be0560329f8750cac73d5c469ca8622f7af9a78b0a2f83758de9be2014f9695378c2673318ceda66171c94013f57c70f524abc758988c48083b21fe0244916f1a60eaf7564008c4901fba4e4e2e584873aceb485889fda32701bf70d544c65e02ea3a39d96269d86af7b6013b26bba6ef6a14024a5c5381619ccd14fddf7230786fc17f78cf83fcbf9adc4e13f04e9a4911f7b7b6ecdf31f601edb326407a0b68bb74bb0a342d37b8ff950966638d6a283589894ee21e809e5926f45a17a5258a4afee12d6bd12316a4e315ff699fb2810a847f71c45fbcdad11acb1225d655c558802c84bf8c95c0cec981a1dd644940c65ef7dceb35d9ce0f87f49f43552417de4a477df0df24f661048a6aa222f4de864e6eb5de8f2d8c5fe855ffce4f2e66ff2da1a352c61eb5aeaa32d14f23e35490f3cbc37cdfaa1947069cc775b163a5928043a1c39a05b2c71ecb78c0bc9b46e9e935997d2d9db8231e17d3f0c3e20c2513fdcedb8070dfe6ff96f6b9187ec2932ba0809e5084d11bea8b191604f16647acf6cccd259670586193a6c9acda76e00db269e010ea04121332a84d1750a6d538c0854ec7750d5158a7de4a23624a7c3f9091deee3611f96bf5deae2a6e275a35dfc548088bd7b0146271181b1e65e8bba7895b660a280dfd8a279d87f09362dc39cb1bd20d66140d1d4345f018d40194dbdf0aa8afa47aa774ba8d27fb99719f2baf55b5daee37798918e534cffb83dfb4937fde02dedb572af61db82f3843da3e269751d7c1f7a4af957a77198e3a9de49ea460fc66b9e86b3d3b7c90a2a63aeadfbc6f071bcfed1a6ddae1ba697c2638ee1a1d1cd396f9bf323154b75e0881030f5487ba171b618b9358d20161dbb3f02e1539e00a1f67515eaada99cdf91152a304c8635b589180475fc5eeec6634091d12a39daf1d2bfd83521e9a6c7739c2d3401d4c4cdafd1de65ea063fff337584f36619a8b95ea9b7cd9e6f813ae7cc8edfcbf21b5076050cd469f5ace415d6190e97468121faeb4251ea954c76be5226e97aad62169785e1dc1c6a8a2ebf2ea304cf8c1045292ad3ace6b0d25323750ac292eec272a2ba863c23f6cce76b7b15950646536b52de801c67427d85fe4be22a2d3e90a6e1ce3badb2f6347ca6374b084c34411d508802bd9b0688b491049767063fe2d8259c2b48c033266f2fdd437e634ba31e5f21835fc87455418f4f042da8448d5592cef97517e214feec821472827747508506248ea017575646dcc397e1a24aabb7bb49db06f97d86ac6687b8ea493e8e5b59c472671cfdc3bb5b2153b2215b0f232ad4b6620b6513dc6595d3bc4fc8b8afde68ec0f0b3d9a4cedbccba5a5919349a402244ce061207b8374dc0b502df84af5203648c7fb909874dfd3a1ca9a4ad2463692b82d726830c90e71ee6101d47e87b3291f30d80d8798ce7e91bced44048ceff0525b6c673270ea6725583f7d32fce9f51c2c552ad7768fa51a9ab23dc9194e9075e1b96a54e46d62bf06a801e011c2dde8aad84aee96e3564b0d4047767343b7e9ac5e3d5c417c07246908f07b5bad20b9f2fa0028dec061dcf4ca29497c3c8e7f38d6442c8960726fff05df52c91b506f99a5023c57f603b291e4c470d0ac8f490928e997f72dc2f27c4bbc14cab3d277aaaa22127bfbafbd72a89f7facbcdc3cc47e82ed1d2421dee5b74a8926c94dd8052d7da6f458d29e40cc214a13242eb945eb829957dba167bfa9806093f2633b8540e867b9796eb9eaf098978a589aa69c70b94b04e80d7edca7cd78ac87b09e2b478af2017b6be547afcb95294d82a3d69e4db78ebb7e4ec32cb58b2e87e2d7f5b709d5edbab9b53efeb46ec71b8b6985ee9543c4498ec5613a563b4e39996602af458343a05429ef7168281c655d4f8884053a2cb1da027170f796a1e5d67adfe0923bb34612168f84245f9b3b962d2fbef287098f47a18e76c438ff7a9c051f08270bdaa970aca90f61f3942ac2b8c27c0d2b6e74b35042f285d87966b96bbc8ccb3925b32bc958156a7b3ccd9d1bedd2806f380b7ef3f1fb1c24e9708353da7afc870345762ca1e9d68bdbf76e672f7f9f425a787a2cb67f506a6f6cdf850c5d997b20880f3d79e4e2bd419aeb9f98153971a2e15cd1a9b77caf45a391693bee89cf1a167aebb0a9fd2083c5880d64ce06faf27f8a97cb0718e9ea858ccbc94d292cc3c487731cbe840e57850f903a92c9bfdc57a90ed584bc811cd7d1d0bc4e59665bc914c6ad81ccd4a4cbf536fa92346bb78277441889c05a7ad9b96352c0ad8077dc021058408fc4894012822b7a865bdfc752d7b9da53d7d6b0beda0e0604a1c484f7945d087d30fafd70321dfe57372487b56e70c45e5eef3028b8a0fd7dfa1f7aa408b3a5760c0148accfb4a9ba95ee728a27dea6abdbdd261420abbc8f74d29f58184a231aa43c3fb646ebcc9b1a440a6724468bc24b92d0be7d417deb4923d48594fc52ff25c97ee8a377ace4d79d5f4d770abd6a58aae80580bf1c3ceb7a921515a06359ffccfdd2092b4818d3653150dcc4729fc03d439fc2aa4fd56510ee5088496291dc1aca760f9b74cfe17274274a1e1936a8df5f274dc0f81bae1d3d3e1b76b96f75b2ff8a6a6271da2be8d6b2d04fb670a7fbad31eb99991751b06a7f443919a0ff792da489216223d51f60836bc9e3a836651bfbf74187022f2175411b7bbda084943e03dd5fe7300843e390072a5f046e2688bedb6fbf6879fdc767d0eb03d4c2ddc78310febc57af7576f22d307eb08e599803c96ee65190c8bc7b7041ceaa9986cc9739fac5c9c39aac0b69b49ba5fa0f616fe483b8b91b169e7d1b88f1665c9473d7a1291e457b415bb8a8239c907f59eeed910a570342621ccb9e0d633fb12b6a10a8e01df9957abe0d2923622f855c5780f0536e158c24f3ac5d17a27759149a4012f8b58fc5d0671823a8fea81049c3aa84634f67c386c41328ba3fd1e6cf8238f57eb037f421efcb9630948a12cfad2cf7c893f3b6748cb6ae9cb4fc64a961c8d88b6f74c0cb33fd940f26d579febd5237e2bebf37f1abb11c9a34fd11feecd9cae978fcd477a0ddc7472a846ce45713f458854a58e04405774f2accae8da8f96643796720dba949fd037f6bbe96fa8cb7c54d95ad37d67646d08e12691f14365767af3cdc7905bff5be2d576caeae6e9333b479771c761777e1c3005bb1fabc0a3ab392c3aad7520cf7c978512fd83e75502a1ba851653756e989e99f75b8e37a5ded9539191547b627c0276da080b79a919d0eaf9bc1b52a8254e3641536c66bb319677bd0b37683ee0c8785fb9f95f9847c8b15095d78cf729f7dd195aaf7b1def65476a0bd62dbd97ec47428b7f60baa9844fda47991136d0167304c9f8fc7ff7efa85d14f1c44d8928a7adb5e9c57764ec5fee8a5de0ffe5d19cc98e9482ca449be7eb53451f10736a58b9f53784a9f666dcd8c02b2188f26529814ee764b257a93b0befaf7799b15418ba8821d466e2ffbc15133ee5c15c186199ad07c6a9fb0bf6e5bb7ea0e1321e0eef488e94d7466cb1fa33447de0da46b86eca3c188d80b716a2517fad8af4e00cf6b68763f73730775f6e649ce3ca7002dbe9033aff6b0ceb6e88af576847fbd493988c657ac568bcbffe08d4c66cb92e9f3af8aa6de99767876b9ad186ba84f95d5edcbfd65bfff019d7ac24c6f859d6b97cd4f9af669b9e4162dd8a263977d698d194cb4091964663895fe5672497246aea43db01912a6d56a22363fc28daa3892073ad5b95b50a2c4f6a7da459c921e7199d4dbe5a11f5337eaaa5b527f320b4f703d13ba437855b3fa3388a3108d5cd871de98465ea0616577890e61722ba4cb69372ccd386b54caa4dbf01a634f43d66aee490b387f73195dd8797277c6afeca06ccc07fb2d439f028913fdb291b7143377409fef74f76d8c1c200db601e44712316237b5bb7185602eb6e76ae3f24805f2d47d01e295f6ef9449264769ab28de2ec8bbc5358a2ada8ef64fa25a746037297ac1ca9dc230f1a4bccb868fb062450ca1451c5929326bdc3702fdb088c6ace06549ba9e7db10cb6e7601adbfe8095fd5d9698c41f937d93359ec8f65c5569dee8e9af253d098ed90e99ed8f7e8d92ddd39f44460cbbe4af581a09e3895e95fb30cb13858d8fb2bd0b720b526679da1be28a9eb73ab2fa3ad5d17a71cf67a7f76325ad59867eea102709f1a9d2d4b9ec94d51b293955df4167c73b731d7a1710b149ced464f409c941bf356c4199cbc4af53675d531553f855b019f8ab9fff6318cf22851ef01b079d8e146d349be7eaa86446e72bb910fad83e9f74f6920e2327c2ac5e6746696b3d43e7d4c5a4fb2d8466f5903e3327eb6b9ca996036e3166105581bba3a29b03e65a98b13a102c8602ce182fd7a0f1a920e18b49bd1d9924da4d46c9ba19bf82aad002f729e5b32245ecde157f0115d61ae39828bb0728a5ae1b058159196a3b6ff50992c31eff1e9f236266d48a026d5038bce5ff5a337d3c6a4e008222c3615cbe973845c6840f9f6b5bc7d27c7cc70b2124c7535d0213cc5d73b6b4d711ad25f5e5a3e3f847b2d7ed436412261e24f2918d7f1afaa0801f581ab7bb7dffb214c0b94a9e5dcee755aa796032b932fd0c8bd852ac8c5f11427a4a32ae3d432d4c522c5657e400131c41fc2e2ddd46e6158f19301f390b6da25530fcd439205a53fabc3668333a167786164cc7ec1cc2ec5079bc4b353d421fcefded88efb1c0b669e9562cb45010b465ab5d725fbd2796f174f5aa1d589b350612fa6b4cb2be585b69826c214102662b7d99aa42fdf6137a3d9df4863b676cf1f129061692fa3ead5fe58fdeb8a75387361cff86ba04436cfd0932872638d3a6f0de008f68fcf96f32ef9ad11dd9907e33b9024a33536f62b31be9f345400f6ed79edbb693949046130d73c26e91d9313048111bdfc167d1b8c98e8690cd1cb85a1970e8ced81cce35291094849efc5c25ccb0fe2f54b4b77f9f98347acfea5db165d92d04516cf54920d4b1c751eadd5ac71db5cebc002514e2bcb173eca00b618a252314f18996bbe8fa38aef3a4687dd20c518467d598b5d22268614170067310a6f6ed600d738e51a4cef44ed2e7a421863e31ad6d70145033a8b2fbfb6d0adb5f561a68ea3d98759ebbf536dda1963a0c8a9f43885137fecb027b50175794e26a8763bf5128e2236c47109f52bfbc93ddf124c8c6c10468fa72483f4a50405067bb46d061a78b750bb2bca45667d87deff79c66b835e7b4a60d00e6aff45d884a996691964a4d03be769a127690bd9556986b73e1e3b109eafebe0a5fa001a6e7ccd0878aff7697c35725af2fcdb1c52c6107889e67a9313eff5017b85c8431f0fc0ce3382a108a5067bbfa99875ba0389a38773fcbe22aef87f0604fcf36991cb6f0990ab0117d32003faaddb333f7236ecc7f9b457454a012789eecc66fd916b71ffe5a983819dead243fbd54ce4f70eb4e5971ac1cd05e89a19ff50ab70f164f0ba27cbed107d550e538fdae702ee8c5075e49021732c8b7241cbf2c230555492ab1c95b684c43b20e995e0c79d6384e5887b41602f52325ad760480fff3b082b455578ce441371b1e442404f7567766b069be1847501c91a09881d58f4bec130228acebdd207f5c5198d66b31839ff50e05e621bc725c14fba064cfbf5e63e414121b03439761f0bbef57acc562a2502c49054292644011f8885f7dd05960c033aa770b3c6f0267e45d55c9c12e5663bf7bd8c5be4ba3f94d2fab0b783c3287bdf08586365d966bfcb5b7aa421e279fb8f5b01a7f7f30be63d8b911574c2f019004d821c50189910da01272385075f5ad91b5b52f1aafff0760ad12628dbf952a934d2ee6fc2ecdb14495340a170813fda6784fd4e842a221a59e892e4cf70e488ba269f5a035f8d84779fbcf9cfae67b21858722164d5dd431d1ddf9d6f5001a31e9e65f55d9f72924f8780d7ba44191b7f695b012c0e65b4f0dcbddf01a329b28bc0ee59b82c9b5221aa4f548ba9c579e5d43f53c5c52380f4fd59de6919a5a884dd84fa6d06136e0c72bb8c7d6c59c0e0a59a03b7a55dc4c241c501df412261a25816b203f4ff475971e7aa587b3a3cf68027fc4e223d56c24c0fcecd38053e53d461d25883c97dddc8b48066a04257e06b9563181060cdebc4d80416ecdc2f59098aee20cba5912ccbd861a2056f1f4b164081813e6cadc4aa600a025df5a800f924e2681202a14a7c89fdb29a01aa4ef3a874b26e7dd18e1da99e1c9493218fe1c968413f702da33b58475128137045743ad97b50a1f0f0f1814db0fba988b321a7d1638a89b7462a0369f8ebc7effa338c7773eb5fe89c38ab513252577ae6101bc3eff67b636f93f3618621731efc852560734b1050b885abc1ae75438b553b1418c1c7094de1df58d87b948f4b57ffcb8dcd8331b1ae3dbdb43c3b97bc93aea1d91936038a912b28f888434e2856211c370278563e0f84aa3c991f088536c7522e29b8695369dd3b17cef4bdcc38858b92ed8dabafb997a9c2047457f86d52ca404d791e50fba30e2ffa001e1ddb7def83a445a08e5fc48817273c7120e6f5f2433805272968eda09ec8b3abb665c3e9ddc88545f9a2a0540e82624da40fa08c3da923750ade75837d40c56a59454fc42d73c9a39412ff8bd3c976d53e352608d702bbfd3a316a97102d132dcaf5d76fa088745a8e020cdf14d4ccd94ac82781626d405b8bd7775ddb17c35dc95546cdbc16ab397b7287ae26e39b593b3b9e7c0eaa6352693423e9c2ed133d4634e7a3a576ddb850647ccf5d22cf17ffbab9389c5cf94e19ab31211d85a262ca29faeeed4cfafdaf9caaae7646f3587ed314952f3818709399482c5de696173aade028804020a7d65888a2c0de298ce5ddd0230d6031955b3faa65763158cf1313438d83431b2a6344a78ce4b3c962b1e3d81a471220859f074d25fadc0985e66ce88952203ef8326e9e181c82e1a561b9b9e5ff2075aa5e802419c7172921289a639e2c4df2361ebb4a0c82601c25c7571914de18ce79e6b1f3f47e11925c1e65fff8e7a8dedaa9b6c8c295b9b18cb17ba20062e05f3e645d8ed64333aa38379a1f1c3735d853eaeeed77e3a9fa2cc49f961515046057a6254ee6a5b867cd6e26ad9ad8aec7dd06d317e708b175ee7a6e8c5d1c03e52545cd8753579b26111f8cdb0010edcad89f88076c7c07712e6675ad40af9183a2cccbe174442ebefea5c27da4a5b38d5718c62868518d854487336d3a11bbe338f4914a0dbc088299b67757108a7d87b006481612181f4b2781c37de6b275e80636baeb7600da84f0d8a18d613fed244823b187fdd33ccff39f21701602ab7a4311b8405c0b7ef52d3eb5e1f077f22cee4b36278b83aeeb29f7df704c08a56470e9dcbbdb74507b4a4fb1d7ba1a90eda0f5e3f741af1c5990d559162eadc23596e3faee0b47a7667a84123b80420660363244fa3a4579bc9e99f0ad59fd2f491b7e5dc17c48166630a0d36cb1a71fe8998646e5dabec031ced4b4249794a1403b4385cf1a568cd8539d982772a7b719f763a57fdb8d801461c976adfbd1b2a76ae9dd7cb47858b224d0be13ed3e51d0cb8f993bdf83fad95abac40ca174dea81c7d4ee019e644de0150659d2b11a70d64383b88b967dcadf0c82c3b13d1d6a0171a3cf623c8ac556d887de7ad66c32dd44beddc985505dbee126c7e5417ed46af006efaaea3f2d540f993417dbfacc21dcd1f65de0a263f2b1cf49fd482c201423cfa7c544a324ec867b66aabe034a995fba24f63e7749e780ab17601dd434fffb066c60f552e5c9fc6531d1a8953f77b768dbbd7e294359fb6ff9493a1f7c340f621f3d0305dfe87a92a0423857f1c66648e2692881ec80a630176c19d86daaeaf1ab137bcfd4a4b01af57ab697a7123649e6487ca660900f70e570a55305b057ef4e20147b5ef77cb3edc5a2fdb509febbf4974b99365042b450b46745e4089ab08c6b82bc15bc48f9738fc23b14f49b1ef9c4c64e3f15fe33f7cedf9de30e9a66927fd8231bea0402093681fd615c75db3c3d90c6259b19602446b4176fdeebf0292106b89d7e083a9c95ddc1195a725439ff9688eef4e875fe2965078eda6573d1eecf9d130a8198aa680c6ec1b39499c5d85fb22216e1ff283e8f81237621b0c233d7792aa902215485234799f0f52ad4eff24a2bed9ec47e93d8fde0a8667013405073105e7f96d1403664402e98338766a790636e935ef29efe1469ebc26a8771dbadfefbeda792cf708efcbda6f2e10ecaaed6312582030d90f783d2e49a636db3ccee55b07bb55f4cacd1858d44297b3075ab2a176ac9b417e0029d2f5e295bceea9cd65edb6fa076dcfa401c903b2593867026c316b4d0fbe911504b552de1060e22f7ccc363f1869bb695fb0b881de5bfdcf8126cde4f33681b7cca0a9fd2c36e71f4a0c1dc3a88578086f208529213046d72d7bf4877c3d622ea80645d75968c854e316ece0649450f6c59d97d833e4f10fb4ccd0b1727c1078ac2e01d3d3eca6ae84d14a4f074014e12b2bf73bbfa8031dbadc4a9fc9d3ca4d69a033094b11fe71a3b8da440a55c0ed675f71e7eba0dc327112b03371effb504208ef054e608000327e04ce3450851791671436ce5c22190e7f913176f86292f16498bf7352589dd5cd586ecaf51fd4d31140a29b506d43d5f46221cc866078497b136ee75e7c8f71b47802b255694eac724e715008ea0d1502c6be514cb83733995753bb907c6ebb9b80b8c96d9d72bd5c19d192e1819640593e6ac24ce009dc8091cef9575fb229334df84ca5bc668965ef7961ceaf8b46170f06af0f4077855e613fa4373219e0dea816d2978bc94d254b72b43b18facbc9018af48be6cf9656084cbccaddef7d28cec105cf04136e5dcf439e29fdf1b05aec0004e8d6ac52ef2fb542749bc40c62c01293a000876dcd12f83311e321a9000a3eff08dda7359213260ad7e5696c0d246064ddfc5772f3b9147f2a7646f00adbb383e5bb6f232b496a101b6ed941c8fe7e2fb0b762eccccea33a6cbab7acb38ca044f059f6cc15a89058d925fa60f39528f10de137c861f580a0b88363752b7bfa178180516620f10b4c31f7661023399961867ea2582e5562ce30438a53619966ad8aed7c8411f5fb8068499b04bf3798343ac53736a506cf40d15a5ebbf958bb2d6f518176aca753224b8492b1f7a5a7419978bf4f92525b5d4d692541e119fc0a57fa5f122484495c97451f89d6cfa0c34586af0d82bb493391e7418d6f4157e132be24a1e1d559856f6030980c3320d1fff976b77cc9ce934f0b52adda72d352b86fac1667cf99ea10800554035f1df29dcd87b2811049f9b47bd4a9bfe9583eb7bb8bf061c1614acbafee555f7bd60de38c2e3920781731803ead091b41414dcd73a5b6f552943418e07846e28d340c91ca335debf11eb0614fe85a68350073ca1371a2999a258e2af04061db292c97d7bad01130399effc96ba49617e44a49e1d0789709153f754f6d68a4fa599923fbd7bdc0ae1cd18b3a16839b1fed9bd270faa250c5b29d5327ea0830123c26365d878ba16bf98ed8d3749b6848b3630b351f1308fab10f94b93d91360be0563246eb564ca74ac8bef561385df81e045295ebbff8f5892db26c54ca7b443417a5ee7418b0220a8a6a45eace6cc107b892c3f31ec05089ad47468c985795c717c286d6e8747f4fb78d61274dd2a5c7d0cb17bc8da6387570285e0553127cef13ff0c396065ced33d5ceb77f5396d1930e44f99c80acf5e0e608622a6d5907c531cb79ec306ac37431f020dd19906011d28d41dad856cf4e6c109ea624ac6ae0dcdf20c91bda42fdd54d4ba649f3069dc563830bafaef95ae6d47b77ac72fbda1ef0b307dedea1073811a04f948c139568054dbc369b71958c4a102609af7bf301a30526d7849c75b69ce2d80b73929e3f1c080397fb476ef6950bef4c99fd5cab4c599fc8a1f001a89545a226873c51c5edee3652a72544daa0476d0d221fcd0dd5967855c00af6b6a3907a71b7ba73c07e37c606ac63c34ac694443b2badcb2b906c4440013bf6af017722f3e382561389f2c319d69032cc825f2ccf6e507e93fe540876b0e5156ab6ae9b5949a7999e6c651165e7185513743bf525d4c63f9df2e26bea5e89b1a3b11b01d3a2ed13009d157d6326c485d3bd7b053de9c0ce142b534b17b331853ad18a1312b176fae37092b4031f256c8e1f4bf28de49b67079e87c4b6dca0fc26647ca441fad7aecb178f7258115c17e253e947059e00508af2386d6e7971841a14d04ae5f9aaf4ab9bc77793f3c51b3cd3df15fe02a2fd8ec2ad440c11ab42288168c7f307a76d5b0c2b5546d97673b9dd350183904455337fd7fbc48688291fefde1cde80035ea181828e37d13921c2e192550d6a5007696628fb0feecd97f92386c2df515b7acd91b9f18236daf844ace0b0664c6cad082793056d9ddc3a47679ce0efb9e0221ac858a94631356a8656c08b91b11025007c69291346c4cb0440d85073a03e218770bdd4b767f0823a80850e701c243a2cb2fe113462e265ed57b80be252c69d60a364f5044dc30a5fca98416ccd19733ca0624a551d22151df98189d9cc0181bbe399c47507e859b60760c4c00bafccb0735290bc410952955f6d1ada5ec336acf7ef58d2bbf002239e646d96df9b54f7cf0aee5fc14f2aa8782637f165bf7e1252270d0602e9061a9ede45dd6505d6a67e1d39a7126060fc8d36c18d62def1b3f41164e905b944a84f9e7fb077abb3908f5ffd20899bd612b3fc6cd03b37a548a298d395b36c2b651042e9b3ffe40a847e77c05c5a02936f132f0cb0504351304dc877f319fdd2e234054088cefed42e8828ded71b322b27791bd3995164629c5b32acd3c232541ba9f01909d1f4e26008b56c81037d6fc292b5bc0593fc586290c4566f50bf808a14092b69ef8f277edaee48a7898b23be811da36de791d8856514c0b54480703290d26b6e02dfd81cf823ad499eeba8c92d33145f3d7402406c63212a5160f97626bd8bee662e1caaf14425240eef44930d980eaf2b96bcce1d5b9e5f678a14e1ff734330733e7eb0521d06ad4890ac56f1c4c1c0d5bd1eac88abe446398f0e80baea5d0b645d1567428c05ed822b4aced4f5105a44353161454bbfbd4931e237e7e8425bfac46d0fecc2e1e2aee019896422498c8fc2ab61c5d186bf5ca6b8730a0b98f4c69afeda1547d5f1cb9f456bf6baa7c51f12ed7a7301f9f0c7873b09e75dd5478b11dcf96347941212e3af092c248eca732c0b4b2d8900d6ae04c8733d5b67983938b1785d60960869571efdc648ee11e0ff2dde260f04722675cc1940fbe8725bc4e1c231089943b9620441cf483a9ccd174e5bcd0866e7c17fbc913121c5b204b686780de53c402b000281e04ff703089bd2fdff72b803844013e386de5d9ce2549e9cc6fe6dcd26a569419a8e199492d018d8465a156c6bbf436175bbb69dfb23da236008338e9bde4a4c8e33dcc3a5f653e5469c8bf7aa8ad94302ae48e609a12d21e5b9aafe04d99e684ecf98786b72141c7fdaa114d3f4c9b8497a4f17bded962c4ab3b1d78ecb12271ee800402a946fe1a8590457795edca42ae6da047ded8fee3340b1d3e3f46f46ab5e703d9e36c39938254baf51bee1eb8394763dc2f72ef2f9a102d6e743a87a673d1b8c6cd79c9ee6d0e9dd4f95b90df61f5b3a0dc0e673d793ad523f87374848b4f3db3eaab3c54b9255150cc0461dee6ded1fcd6d414a83a4ed8fe7944349ebc271f9af3ca46c801de047e04258583b839367c640c217f86c715f56775ed6ba5b9bb51718db0a33039d727ff071d46c46526ea6b073285c576795ef0e194759bbde146bb0705e375d1c893485383eceb1a6d92c9408b4ad67823fe8f79865c98867cdc57a03a049d194b8fdc14d1b2804e5e41f51bce306527e84757a4996c52531f154a715a0d55a4da694654ef92da50f0b09c7512f76ce8755450ba412af74610f77dba317bb1f6a5e7d94e43ea2519779ce5d44f882f80cecae01a31f3799fc45f91ef9bd6f347fd54327f78966279bbb10c77d1a714ebceb1a3b415102e01e2744e94c0ded5841380d6b2f5c845bd82a31e1b09d6f95b8a8c83e0e3131fea8cf0bc81e8a9ec77898db9956ba55cedf90496a08aa01ffd3573d1a3d08c1611eb98b2ba2fc39a1c211b181063998dae8f099af3068c9dd886091f7caed07e431e1f747a57767906b355cc29b9de67174f32d3ed89149452fe6f1a8b9c4915518e9a69a288dbc0bcbe24ec8a3690e8b36173f9a5cad61fc29913e865d8b2c9af9942998d03f0a46b9afce93aa86e4293726ba69bbe38361991a01c9f0c4086887b5dfe549f4b515b81f19716b3bd69df82ede4121c033220c948b5424fe00d86e4f1143aea016ba14140d3cd353ae2bf96659df0a09414ef553bbef1c4cc0a11f34ebd1d42d2c34195518271ef296139a6cd123f70eac150a8aa7259550852b87d52a3c9c4b4a5719cd515785e6f4aae6b3c971d001f3f9714e84a8f4c7defc7a6d8a617aee264a059dfd01f78d1dabff47297891f84d25390d0bc5df92a970ed37fb5c78872772d7af756a990b5050898ef104c076e672723ccc949bd5869f137186120e30b2403978c17b4633ac9ebb00394f42ab4fb1ceb0dc175bf08d6708c3ed05f486842ad7946e1ac2bf22076dd8c31b9080c954126d397aa38064f8fa2f6b2e077745c305bbd7f04e9ac236207752035e5482fcc0de18744c0f1f091af7629c0c4fb29abeb46f16bc040a41cf0e4698e045761f23d8dd811ee052e629454073a3519e16c28916143af52beee453fbc676312bc740b1d7c4be5465b2177723a640991149da5008e20c71493db6c797a9f888a9210208582e30d957f5e30ca6ca18912c1db4475fedbf5616b3bfcb1c500e77042dbadb299dbea0e9d750cffd718602dfc4079dfdcfe318ad951f69617c8fd4df127cfa82cc151b8444116dfe29aed0da3d06005c201ca55c6057dfeda8f87b33c19b02f60f6c5a5eb32c6ddf7723cc1e65c0c7bc99dc7c38b8e7822c4c2d23ffd6b075b07be3a3134e7f1dfc60117f1aa02281eff96d2fc3986d16976e4192f2a90286a5406c1f9afb09c34876b81f09552b6220d3ae9e1cf81513658f6693eed44f539607ebd3b21ec561e52b53b66de04e8e8934672dae88ac4f5180413c8dad53462d680d37bd25218f79401bf2da55a605f03d41b10e7caf4da7824bd92a74d6ef3defb1ac85bcfe4ed4d4d1f535e9f66c4d0b901ca8b943e255052a6e5c6ffd9a0ded1fd4d0d6b27c53c985c69d2e40827683d927bf5a9b9934eba5718946e366e8f8b37ccafc0852313dee2d5366fc553912b3b5e97b8b81ab0402a91e4a8e379aacf48c76234c79b9fa610b9ea46e5d31e06a3f18d220f350bdd5bcaaac5eb878259950ad26b18664122a402bbcab50c84f58f6ffa0e73ffe7b2ea1c543f589225c7c5de9246de63086d425da603baf9dae3be7f794d69ae1c8e8f310eee1699e3d51cff252c79d91e02b334b6d9d35422324c21d2704519d3eb68159b0fb540f721210ba0cefb9a9c49ad432c32545415d88f667d5775af30fe5ea42920e08332c3a3d56ca1f614ca936f24a2a4cb358d90f4934cc8d274e0954a3d90bcefe6a969b246ac67363c079e673a7cb18b2c071477b27dca1ff8359145f09ef541d9c949b08e17b42ff0ca31b87d89420e3a9a3883886749c566eae37ca2cabe532586c6f5978bd331d1d8d33ef10a722c7d16b4bf4c25b3fc6c987d124816d4760022a3bae4959cb50e8714fff59787007e3709539dec8d92b4a74c123985ddb74c5a237d393dd5420aba56f200d94be426d7452aaed39d39fdb7eee959f8512c29ca214a8da6292481e4dc64d527a1cf049089d38b627f4fde981b7a8837e4c3698789ac25ca2888a4ebf9a2fd3d796132c55e83420761aa897f31f834c6979a9e4166e4f120f18cf291d43392b8b4f2a43954910c59cb9f42c615fe0860f8a7dc42a5eb1f9f471eaab962beb9daa06a90239beaff5bb8e57e1a0ce8edfab00e8e60a41cfde0c9134e3a838975e727bc194974d9551484898a72d3d1835ca590543ce23071f20e68baf47be422850463cd3d5c0e3e94f0dbcec52fdbaf2a678105ca146223818a3869f3fcf61c781d77704333cef9d34fa256e3ebe97d8820fb55ae606476c77cc374a905514f523a94b9a4a3305658d62ae8dbd806f008af574db9342876e40cf8b0225b5c781c83ea9b28842c252aefec27688053b103aa5f7c5c663f515d5c8c8389869bdb97f1c21779876e57791ec8c98f033c1f16bb972bb6918f1074ea8c22a251778f07d6e7ea21fcc4d93079abb02c9ca5cee1b395fc82c5b5dc82dd2984d1c5f9583fa8e2a505d9d6f031307518123eb059bbfd9ed05c4375e9b0c72bf034020464691353daa79c7c45103b16962af33ae3ecc14ceb97f47dec8ce9a1d176efd5cdf7e80542a5cee01feab3b2175f99e6fda988b040d8d3eaad04d6d02b9235a26c68aedf955adf2bf2f65981e388c62a21f1ef9ac9572bb79976a62513639cbcead6ff6a29f05a2c90028038cec962b427ac278b83511d81c06d351872736a1955ea6fe810a883dd68f87b8d236c446235c6751671f6404be8015039fd06f4e385e7fb67537d8e83acc1cc5135a9ad5d19092f833d411b5ab8b0c43f22d33f3b332081e51ba737f9aa324acc3fa7dcabbd12789c1678121fa00097ef6bb49ae60c8364000eeceeb7612221c9a867f9c8317c56dca690129e424e2d06dba3361ae11170c8bfc9ab534389b8651616016d3158f16327b3fe6bd12485d5b09f8877f6d5432e0c0a57b93513b5901a2b1f2d1d1a5b3d5a1bedd91639c95d9eb7da54bd80999a13164ed625c2139ffb6c418cdef835c0ebfc57699ee20ce7be6d90dbee2adcdf8f720c2f98249080c0814660239aa170ac69c1047eeac41f6a48532c2fd7cb4a1fe90b25c372d82c7c30525846c8343efa3d0860ed1b6bdcb1135d92ddea087e250e5efaae1eb03fbab4e129855a2ad642498916a505c232007042dd49789cc269494dd36f12aaf72dd4e2db086147d83f54affcb35fd9ee31c4e3e76544120c5e3fa504fdea8c7161cc2a0660cd650d2921ddfef0f666ae325c68a7b6924963fbb0f6faf3f5613379bd6fe292f090c920e2dadd0f9ff7af70486f69b66bc3d45de855f3bc555b845938e205bfa1e2dcf6937be39409d947469c3961f816ea9a67800d6c668388a9a52f115bac7c942ce2fb68afa4bdaeb5d7c073a4ce7a5b801e4beb32aa77937469149b616f20e64239aea7ef7068d23e62debd48405071d4b74e338d2f141a17e0c42323400809552e2f5ac4429b4d9aa55c6639e2a10cd66e451b5a3d9187981df3b97eb098436ba49a81205f2df1ea93933b32fcb7ba7afbf02abe4637b98ae73724c824ddbf8a1d172278ef705476c95a13c85f5388175c97b996c3795913e6fe9eb30879f95862e0ba4224c4390c4c99c9477a3147af71af0d77bfd4b2dc7370ebbc5fc3626f334f83fb5517a5aff0679fda00e5d7b8e6ba52785b47f41cf5503543ce22e51e25fceb574bb7bfa0056b71c56d8d1574b02055782308a39e546db3aad11ac39339640cd714623cded91f6234afdee44b53af38449f234a35c48e60d4c235aa7d2e71a4c3d7ea7f47f7ef6d9771b2c1984c3ef02a87a61c04d99ead2e7abc703d17baad2b672c453ae73cbfc514469ba8c690a6869cfa59501beba53c3b7e5854ede077e4ee58716d78fbb55d2a39057a72a155eb9d1a093970210549ed0a67655c76ceb55621b278aa25bd282fd995a9d48423391ab3c106d6dacfa640fbb6a9958ba9843487b0b21ec8881be9f1fdf97a0d9b6e4e598670130ee18e4f8767093be46b1eacf6b4fc67cfc60cda38ee9559f6a92cfbd1d2e2583fd8a909084401d83f326b30484ccabebed2ee2a0428445474acc9239e39b388d40a3bc79e1f35411626d30a5c6cb58f8855d283fc1ffdabe94e18c973d6d7d54dc5ff149189ed4684d15af4e13163cfa328a4b54b37bdae0ea879bb50c0a9fbc16df054e21da9502ad69f6fc1753ba72641a9fd95992d6d2ab5f4fa891af68df2c3496ae6e8d77840ca8d08efa411c0286934242f839104eb49db846de30602e93b8fc438069ad8440f4ccd1c07b1814a686368255af25a9236257356e0a6936150639837da7c3421ec8fd353d7db30d775824611d4101219f752be1753e007b6924c6e13f8675ef410831257cef0582d1c3f7e0c052a728411eceefa86fb21ae00683203579d678c7b357341d2d240c6686f8ae953cd41765208a6fa3b6d0b5cde9c3b3fcb6492ebb64d29ad5f69e26877b4dcd4cb7fa6bfaa375d51149855ef17c16638f851002a776a6ce7821ffaf4109def62f195597546e01040f9bbea6f8846a7a5311c6d7bb530b77fd8d380764c717330d45e79935512ea7887e5b4ee5aa781bb01f87ac6d0852d5434fb0c62565ce81a59dc5dfbfe793a4fa48836725834812f4d15c679ca2e4bc43380584c107a2f4092055dc5d1ccd2f96deb2071f0229697a323b604bd0f89f80857902d693c9f30154411c4d1452d4f3a71aa8e9b1722b8ad024057b45af0f39f034a235174b2bf5df013cba5dfe12ca51b6ffedcf21ff06dad0fa9f1e1354a75787be9f76b2f571be986b1925e1fd66fbc57121b380ed261087edac75ffcdec980ffeae6b44ed7af2f8d7605ebc66618b6801790001cbaa6ddb53a216a7bba3c76c21a68c9727846511fd7f6fe72a5e277a8b19ab691d1df77da3bcc880f863615f3f866b303a8f3b520c976f1df6d529333ce30c302274ba006ec01f58070b2c6c13e22c109d20fbaf3e387ae0d8a8945251301f186776450495dafde23d4257e48015d12a3ea417bcb07d7d7e0f6d04312d23e6ce32467ade1e57cba1dd9c3472db382a0b95bb0509d2e4ad841248487874de8ce40a7a0bcbbd3c126f2544c7505f1196cc396b526c55379689050fe7d8b0c35872f457e1377ae2e9031551d03bf37d928729f560444534417019b23c5b79f2d4df78bde057c5f142f7887209901d92ce6fef6a0a6f383883eab7ab1e4ef25ce18d4833c5fd4e68203316862de266309357751cbed40b9199c18a1852f9787bab91f2a84dc6980623fcc040dedd925d97ac6a95f054c0886f417c0f0f8ca1c7c32b597b605c6b74f819bcd0105168c15cb0c0b29d024b185148e6c2db21db0ba4e2acee83a92e2b6992af4ba4e733b7aa41f8528aafdc05dc88891152caadfe2f575f5467ddf794dd3522b2993c5471cc4e1eb88d05b04ffbeebd9638eb9621381574a77199309cc59e5d499f9f9417450706be78ef69179ed9b7ec4d9eab58dd708502e31c0808bb412d0947f6ca5229db83100c779d7219e28cd88f60519791e336eca703e4259e2679d922c82527578c56c58e2eb92ab2ac4e2ce6cb38b90406f92db26358be0d73e1fa8b7b0bb6dba138f79ece8bc24bd08116d69682a4419da5c9f449f4ad74e22ad5ef216b50ea29df5aa33a35fc7beb03ab8e265d43685def159b23b0ab7d9b26a5bb36b5bf6c05b9c4b31f0e0b9398efc2e7724395490ab0f3181efb1d6a99040198c58d8bbea2b5e6d134de9071b429c466302edae31687007c1f21abc561d459cdc20a322f0c594b406ee12db7d1abe3357708b88ea07a3b76fbd0f78bd456c59c61fc5e828949df83945a1d5e9b3067c6fad16b3123bdffa68a05201a00245840425893debb3bf43bf053830d97dbee13c827709cef69b0c2a3b04ac1c6fec7b1ae47bc307f484520512af9f23c22224c86a4c17614ad550460272472f2e037804cc591941b7d7fc73afc672a1b313a331388fec53d439229fdb1c0601010157d6da56153462d03583bfeb8a6139a446d098f15bd94f18d0ba359e54cfcae133fecacfc4da488aeb1ca66ad9bba894ce480291bcb8ad9d62944c5332509b97619996826cb9792b0a81a7b2c629a11ac9faf9646115b0c1378528db1984cda0a28f871310cebef944cd48e58dcbb918919fb5a2aecc1b879e5f93dbc371fb0e5a769e627d5921a4a705e03426b0333368f8df2f578a173fc99845339d5480789c9a365d5d847abaa1ad280241220832ac3201d7eb15d5c32a5aede651f3b472722db78fc2f806e353740e5345a75d878edf573f276e1cba42e65c8859f6a30fbca6233a1206cacd93d9b697e58e909fce152fc4873e91458477c42550954bc377a207c1cf9fe1f71a49717cd6e0f4d28dd282849011ff0565cb2d2c0c2aec2737758902b9953bb68e4e4d090be344ff50257fc0e996c7df33fff5a82cbdf42a72b500d99bf8109d241276da92a8f65e414809f221f90c1a5cef74d071e5e48884324e6d1534f0ab5484a8cee6bbb9564a7b9b45091a10ded976c025cd3a97709ee603a3671500bddc322d66cc52ce1495be37a37e14c7bb346a05b632662f12c50df96213d93cf3cca0a4221363a6fbefb6f669fe2465eb93138d13f450fb14d9afea82a9e59c646226d6ca90a779216ba878af88431782369999be30ee1ead20344fef7e07a5290447c5a364c921ef1acf5bdba14d5d242d82afe7fdfcd96540f00f4dbec9bf0749480528defb8fd85c45ea18c65d3c8b10b0c3b23811f4a3ea9589a679bd700e7a156944c4fcd2e2e160f5d47b8c459f73a345cec9e2e2f58100b80ae158bc7d65eb0cf842a7781532851d7e6f2f9ddb7b34c8e960b34cbf4b1448103aca2a533575f922916292968218eacd3375217d9aa0af6aaa22fa721eae50998d78ccd3f061422d6d34201458f40f84601750f7e0be6b31f64487761bc5b4c255167493e3c76e550135ed2a8869a3d8e753a41aeb9575b07f48325de49717a3e55343bc98eec80205dfa05460273077ed5a29fb73cc463add7e2307ca433f2c4c60702e38697b6167c58371770ad04fd5b42efc289644bc764d055ec11da81d50122b1ff87c418b087604c00cc4e37c7832455b8d4b5e3d4948a17f90883f1b6e52b9c0d0a9519c2f150e1c5a34e192bb271f4af20619d6f352d99de261db494c75225b793ee051ca1fca90ca02355be9cd8afc301c01957a3e19ce899275d395466b14959f9fc6011d5d95f79937f669f2be769a023f6827a66837b1379f94bae8adacb7d8a53ed4595f58aecaf29b8ef591f8fe49f5cd72a8f44b251cb1b2c8c69ae3ce15760e0a48d3edba5763b7e8e6f9ecc4e3d998226b8aad64ec5b4bd563568aefe08cb5446f5ffc2686a0d667588cb7493cbfba8f80140807fa625fa792dac60d1369250d9f2e2bd354538edaf3f271165b41521f4b51d48f3285a4aa02bd5daeadc02fd13c73aff0f40a4e249c7e82e807e3db126d939b9ac2983bbce6326722f10d26fe1acf3f50b868caa23ae4721bbcda55859088635330e252fa0fd1ac5f90f1bea431fffe98124cc6b558577071e9905299a51bb392e55b804e91467d030723b6c5ee6cdceb990d78ec0c9c3e57e30951e6d40e8d747cf529cfd60704b3b07f34b71e1d008cfd7e1fb46c9ba81efea3bf8d99004edc581c6d47a8a5a139f295e5cf9184b4abe26f5c77e444b02981f1aa27c1a16cc96c042630d55739d58eb3404b440e6568fe2084cb1e2ba2228c2a8b4ff48a1d839f97fb1996f445b079b36fef33f905511c517b6b9358609f8112e525d50b35737913ccb4afdfd7a64e1cc271c6c8d2c8817b3560e726a28758bef7cfe5090670d221a3ac19e5a7b7b3a4d4f2c4b0fd61e61981e94dab55fe6f4bc64c05810afc76b0cbd6d71506e7f8149a7eaf9fc9a082c4564b9ec629cfa1bba29eaf8c05402d5d15c30c9a34fcafa6df051e5e4e21fd92fb7391682d8a233e6975acb50e95b2c2a60dcd7895259deba53e763d8d9a614f7e8aaef89c3ab79444ebf9df9e376ec3df530a4e4bc0864d04a68b7ea3ec0c7c5e45a2cdf9bff9ef4a1bf0c20b712a30512972c3601b83edd95e8d87c7cfe140e3df58d3f87894806cef2d7a582169644d2d6841f9d3105d98b016b5200ad1e1f1599532a65b2faca59489696a10e2056b560b7a2d4b278a3b7263dd6fa50c9159d2cea4f2b4dc009d4bde16836f8166c0ca7145eb1a32486bdd860a6e62d629646e132a10e13ed9fe256a1bc17bd05033f5d80e3d6ae9f2033033856121c04313829a3891c347366c194cf7e939410a1a327189542ce1e3349c50e39482e91f35e5d98d6a62630bfdc1dc0afae0ae22357633480fb27eab057777b04bfffbeb719e2aaee2e3572b51d64885e65f656c9dabf8cb1a51f875cdc38edfae7501ebe8b05e7e949ec3bd22984a36d801079cea49f1f200d1495be1e10320ba9d42914de239b99ccde6229da77981a892376174f73588046b0b6ac2536c45179e87c50069c086f53f4c0a597a37deb70e466264cb0ee47f18dcd63f9d6b4c75d9bdd654b4091e7d52790fb2243df7a2ed8add1a0ece11fc2725f09e04d053b3f741dfd31177c7ab8b9662605cf9426ca579ef1ef6b6421d00dfbc61e1783b477faf6d9c6556c770aab666631ffcc914c5fbbc464d01c83065ea5cbfdaa2eb14c78584f8e1b136889f7b5a2b3e0f7d7fe338747ba757aac960775621055c90bb7896a182391307aa7ea9bdb27b39c63d893a7c3c98b867ce0c1b091c175d404a98b525ecd5db081210f4c0a4b45165ebc927e4f4069cfdd90be8b8003e7f977d77e4b50e174ec384161012bc833dc12eed09c3aa4317b08fa0c367bf9e98ea5d320d0b3e162768b9b959edb610924fb725775e06f99a437c9d13ae870991b12a2bf62b027c593bc0a5d8af66c8b6ceda8f950863d5955536a156248f548ea4e628959cd53cf1502f3dc4381a2c26132933ed34a1562a355398e5a6dc19951714b46bb98df32d9f654b46f1f5dd41a61f7cbe1736eafd7de4998f6f495fca08781e50050700445cbd8fea6e36743d16a2212bcb86c73f6b647f913a21b1455bfb55011b2ab3c7a99e679b010b40437d8a20421be76a115de6da005d552e1f9e9a5f48b141a26d191d74d1670482828475b3af439efd5e31c2293cde363d4caa94acda0d9a38854720b57235f8504113a46a89604f2d9b94143b3461525602ceaaa13293bec05bbabd0daf203771227b7bde10b4d1b23205d23333cd3d5505e2eae28b8dd6afb1b2c1a557daf3b96f386c2b5e54af7aa35ea8ed554e476282aa8749aee1d7cc7330bd69848521f780431bccf59119223d3f6d031fc36ca528bc45383f42458d1a88a65f5d62652c279df8e0d8ec275362f8c037f82b96b60f6d7e8bf6b8bc27f0b113f334956de167fc67eb2019a379e25abe5cbfc2daa194764695785fc8bb4e5341f686e88c8b5fee7492807d74204319a2e560888613ac9034e736fe08986c8dd2bd2c7d378dcb6dacb75bd67ff2f040bdc6e3d7f56cd55212137d9c2dba9bdc8a7dce4111be05e972f32cf93d5a507b0ea81ae3d0a1fe942aed00a569652eb3b8ba221be145cbe3b540ae1c3846af7dc850569e4e3df4dac502b1bb0bbbebe52b244b796c3f21c2e43059e13796f7feab59298b13951b255d3ad8ebbdf06d566978b4913b91caff07ab59d56ba0499c6b1895a47ffd2cdb723dca4c084d117059adb36f2fa25d057940ab9aecea47404f6082ea06348cea1127838eb118f41867d1333359a52ea85ad4a26ba108fb545f9688d755f304deb449fcfee4dddaf3c5ec603c47a983ba73a8b1e9396320e26b461ab01e4607ba4ae596585bfef6ec7c34c3c05d3db0e328c92b3c397dccc10852280c12c6aa24074b53598eb0c1186297740be6d99ebfd6896bd1a516ffc1d270317248dc428a12aca6cb6a6e8467dfc7ca69849e57574f7043d984abacac770ddbfd783234a34d630455d93bd4e0697cd6b89af0241c2d6ac6f7c78d0b01a77d09070df7b846b93daec7c80d86f2997e810fd03efc75edcf8cf76440da5653f772ecf1f06c59729406de4ab077dd908fa81874cf8cd1cb90984efcbf7644b15cc0b11b9f7349311f0e721c3459b7b9fa625f98f5c7eb813d0ff0a6642d11b32ef63e215b31d035eb3e5eb98c8e52f5542e00148cdc0bc91d33f30b0cf1042671db8a2075456257a6a50248ec48527a4ff7db61f138f21777c529e52b4c0b3f060e6715b4b128ab149d83e23621954d78ddaf11658c66fbe349f602774cdc2f6386f5a95393bd07926af88607001f939ba5ec742cc8a5b287052d1edbb85bdb592f07ba71429c6c0028c5ded289c8112a6a4a026c9df4af64ea898a8776bab87915c2b38b0080a39c39aab9e6e06cd64439f5dae2fef169ab2d7985273f89a0dad73cab42ac6ea572b4e21b2ae5e312d2d188a7bcd101025d9df2a056dd2dc8ddf0f8f37114995161d0b63dd0167dfc0b59bee9517b0c06c305f4e15a5ee50eb5548942fcb90831c5a268551e29b4096b25a7a3d523e11f42941c8d9d6e1051b6373cdcb1316cf757d4adb367ab7b85ddfcce67bc826b21f8a1b4e66c03dd83e41af36d317db789ddcd30df56ace3b31fc60c4f278773707837a5c0e431397345c786940f1835da667736853000b81037aa2df017ab4111ae9d83827d00150f7c7a34bb4c4d52773b02f6734013310d666b929871e8f3fa5521e80ed1e94485905aba5f84c851c4b04659383fdcbc84ec85a5b992ca67e0a5bdaa26523dc8e19a51404d6142518f987e5d90fd61545a56d9e18f3335f29ea615fd458e4c8a474b25c83baf71aac3d828b0c29c2fce5b1df7d627dad99a912ec36a4f45bceca68e37d69b326ae08dd4a9f640713a9fb3b6fa1dbd2d661982ba174a95f0ba7b93a96fe2ef1098ba1e0d9e1516d2d1ad1085581336b7918fe901074c26e1320ca884a2e77c4f6b423226dcf1ee0f13370460bf98d9e1b543f69af41a337b5b3fe640f70f9bd3c40443003e0c2bcb37ad8408f94b8616fbe342051f8b052cd316dc7810f056d4d3df846b5b1768466dbf51b6361f4df8152933c0f2c30dad9d07a61fae4a3218e4ac09bc91e00a1d48092f5108fe67c313030f31db5ee1b35663a53ec2e994d91321140832c0d2d92cfb02a62265ca7e8b7da4d8966f7a133e8f681f7c04ca8854f635fca2016ce15f295ef9581799109e5165f71b287400a8d8028b1299ac4e73c832ede945d901ee756dbf463e819ce2435a8c82706e45b0b0df9387be49130a48c2464f5b3e23b0813a99cffa6fcf23d6cd61a38c5085a7ee0b7374836804ea63e7f1a50d13a7f97b46eb5760c3b5a5eecb371ff095bf993f02cfc91db63c7824c9566230bd35b0325443466a271c8d05b8b245038f54927a2ea8cb576e08bb91cf4499d1c135969b95df1bf73a52521874fd49d45810555fd5ecde6e3c5d7cf03cc58d000dafdda75b824a61a359bc823b37c0f41107bd20fd41e51522f54f4e37c7658d3325a6f72945b20dd856c7db53a46e2eaf0c30e1b96a262cfa2dc8758ea7af689e5aef390c2824a20bd7c721719cfea7ac85ee0b91c7c1e5e0c0ee5cb923e955ac741df3b5b5098967061f0087db655eecd82e5285fdf2ce5d3d6de5914b3638ab74a9d9f3c063229f00f2ba4d3e772c70685e6d5bd359b02eef22adfecb4eae1f018e86043e19446aa96df64e4a5bd4cd57aa4edcb0cba7a049d8c05c01cc5b702b9401b08a9ee4f250bd5be6fc3faa9ec50b3a2166ee6bf987f00ce2e768b61cabefdc30f613ef84143e97ec71006175a0a4fe1aecf79a5abd000ef377557a865164707b00ac39df16f16a7767d3e49906d26b8f5d43a82aa6be7bac62c01c7b6fb5ba965aec0de6fb394761c4993a58fc87c91f33650d2f8857549bd2c2b75eecc3a2b294de03f2dbda8a8360476a8988ed1e0c502f940b60d94033af4ee76b18dbef7f89bfb51967f1c312ecbf59a31ec31e99c31effe4212e7f92e060dc6b2f3fd87c02b5fd29d19d1b5d71e9db54fd09d62b1992a331d9f542743810b466047cb036ea0a618c95a6be7320a76ddc0b1672b1c8c7285b537abddb5a0fe0f5ee9f537bf55157ab81624253ab69b1849e525e4f689b18fb01683156664dcf8718dc52fb8fd91769eb0d5a96739b4b8d696aeffde54a046235a9da8fb2302b6256d804a6360d9eedcede424974760ec640d6f993137ff2159ded15eb0620a802e66c1b162dbeea49747d5ef6aeb42de229e65aac735a9188b21a8ae824d8c31d4ff424afdecb81076364f19e0d0a075ae3b5035830a54f4f4537f0ef9b7d47b97dd534b8818f8182d3bdae932ac32bfc8cc898936a1b757a19c17c9ce6d8e8f8ec16018dc60ce684a161ba7de764b6afa32ab61b526db575c46ada4337de95c42509a0a6c940fe14e95fbf0b5353d2288f76754dd46294ca9fa846de052c597e6d100714e74a7aed17739f9edc738cadcef923b0206a136518dd695407beef802cb4a58bbfb0ef9558fa7646191c3c4b571e013a38ae97dc3ba9b05f9ac4d9a0328c9748859fc41228d37f8f7ee3412daf9cba16768ce00b83b9ba09472ce42e93e27602d27b6dccac715a5b48100372236768ecbb4f8e3cb63c023e10ec788e512e864e4e520c0149b21731a3b4957c63aa21366e73e8f66208ada64313f08d4121726c5df9b9c198f9982bed1f91f8f263be05629ac6cd723d761015c0ce91ab200aefd57df2ba198919fa92155f5b21b57e7667518a15b213e48021daff243354868572db02cf82ebef2a7f1d84e93f510e861020017b63a9d021f48471e7cf854187b2c740ade7c7b5a775fb1aca355873be30ffe9d228e94de7bcb5df5d6a82f2c902554977c6bdaa367ca0a78659240291c2c742604a76a6a4f37eba889fa7fbcb4392abe369a75950c4445013e0a7488cd9ac589ddee016e3117619228353d2e3dee628a01f614609b59374b2615e2ffbf99b71e24a73eb44959aea0f53c9f17fbaff1fff8d8c25b26ab1bb9718402c9eadbb39d7bc7c6c1f65c41f18a44669457194aec07b116a1ab32eeea321462f57c25daa283827695a71bfb5210ec7e4ef45bae87eb1b4942a05b456baa6edd643518943844908c7f5047b00da6ceb8f6d605ed54272338dfef8ecea70210b72d5469798b0ef6e248329ce6b91bf888150c92cc44f67b0b0150a34cfc4d517872d9acc183a189b8668d44cc9c10471574cd51cd78d0cc94cd2d29db9b1aa6527696988a61cdc74194bdbb9ec0bea43f61fceb4db29567bead8032a4d99930042a54b6e0fa18add5a7d98aaf0b4a33b8d0a6ec2499c1a8724d197983bc9d9b94fcad99f577161fc32b1bb2ce97f8fc21a6168e8fe614a955ef61fc922514b23db5613e74dc29b42434b0202a135b5365097fcb5a79d7e8325b35382be4a6ed985592d63593e4b5e12ba4af5072e5931fd92d23847fec2236f3380b05475b69a3b522486eedae8879678e9e617c1e9570f2feef629808fc6967be00bd3d4af1abc191dd72da86d99b8ede98bf96a9e78d3bc613f45dbb112921401b06aa98f92a8e1bf92fa90dab37b8783a63432f23fe2e88dfb76c305fdaa14d03e75d1b0e999c578414b1b1724d88aea3c087969f92bfe49cfd40176b70e9afd6ca1d3c4f0ffb025776dba728042aed4dd56cedcbd5661024bca62f68274bcb626e7cf200e3571c234e13b18e29f242cbbd1df3ec7f4eda255972fa973b674da5a290388fcfd9401c7616070c5a226c5e3f23b0c70af9d618419250eea38984dc683866774adef051214ac81b14bf711e1e4189728aa4f9933543b664d9dfbe4593d203f9d6a393386afc9dfa69db3dcc93af3948f7b63a8b088f0778f3730f92e0e68fcf457395a0ee503c43130fd359b87e789d16089d1867a3e1b73e250f3b4875916cb3c00d2d2f5cc3356fc5d13c4be36f25b290a3d95def7b4790e98f3919215ccf96630ea2e6a895cb2c20ae686ffac9989c4d55c4dfd12635b511e31015f6d2de6b52e3737b91783e5c34d4bf3e8d0d4814c22ceaece1a05cd3549bd773215ef6348c8520425e19e8055b56ef3fc5830feb5a30722a4dac71ef0139b1e78616bea596ca6eb9866baa60b6b0f6aa88280e45cc69667f08152ea5ff0cfbb3c6f87ce654e3c3d7b178b9538753fc0156fdced8864514040b7ed3f7da60cdb8664f0e290664419b36206d53e128d93f53b18e6bed16a15748514b500f5b63f915b0c4d966065fc6f6edf0f4e01fdc612523aced457cefeef6755e5420e26aef7428b65a18450e93329fe852924af0dd98f87541b70a1a69998a8dc8e4040801d08dde69a1744c7bc01ef9ad7b196afb3e7d514d3ad46d41c861576a8c59bcb6e8179247f9977b0d6ac01207a89d2c8c8e22463d761985657f69e99e3d513180aa39596eee9226747f052af3855e827ee413b35dbf450d6376a0427dc6cf897efcbe0709ad41974036c0acd5a3b11eaea2917001984748e86daf5f3e20884f49ac5eb8faba3516b34859728956e9d140639ac663909e0c8fcd00940854962b50d30f19c36b2e2d9a0d19ec3a8cbea5e85fbd032b0a0d482adeeb9b39d07b036ae393106b90d67dec09c52077317ccdad1feb966e48a898da075411b55e25a87ec8f660a4b0562369680dbda0166374b61c39ddc40a803f8f61e58a1e5a69c77767b695cd3f40ec99f7f42c58d371e5f64394ef367aae1c7d4136dc3d634b6787ca379c52d2ea38ac969f7099f977e68cbc1f2c1a9cadbce7ea84c8f0d546bc6ac1b2aa6ee2f12689da2b18515a12defeeedfad87bfcb26d1a191737f9ee38815b87e9bd1ebb56e11a575f18a461b86101b788daf42b4fc71436c7821fbb6b804cabcf608de9901e5eb30a95df362adb8fdd735e26b44779a9f0a99ea7155a05cdcac9b663acb2def0b01c769f253e9bafc9338a6f599c8a8f32b2bfaf52c74183b412261c1d7ec4d0bf189147f316c40e135b3bd0189e5f7abaa070bc26c0bdfcec38a1cc30949bf6dd8d307a48d4e72e936310de73c2f917e043273f162a0992cbc445df4c51ae0bca5d9d032504d41eb7d1889787983cc8d368e2b61a82ffe5e7c2a37f4edd6143ef88719c3459511ee6000cb8b3b8eea46b8b581f771d485542ffd77ccbab9725820ae66ebaa1de2b3e5d3f079655552f2cd1cb035a6dde5da8ea137d60c7ab9bee760dc139219ef1ec18ec0c4cfd2e2c8480fe5151dde7b73f0b9ac111bd532c689d853f97e4416db2bfe5cb82b3efe48ae068ff91767b7b38ec7d76d221fb2cf1b11b997ab7be19f4a3fcaedacfef63cd6b887027c8ae2235c2a520ab17d86404c911005b5c20eee3082e429e10ed880c375270dd5b7bc821bf4dc8dd5e4e516c43f87c785cc646473244657a0c50c20f0261ff2bfff2e5b824f650e93e4ecab8071cd3a3d062e0c88c6fe187e3139c178f5b75c66c45067d05683c806e64cc53bff17393109a8745ba7ae9e1289dc5e944cbd1a458748e3692e2feade76b5df42d62708688db29fb8d4475740f2408235f0d2a322c8efe662a3c6ce16ac5f0e1d1444dbbf3df4518fea3d9cb1fb5b08cb1228943c10aac4701bf23ad6d2c9e5730a2f66f073a7540f42af45fb7bbdbf7fb3e0d99951b6e89bfd34f512e26a6685d854f15c82271738bae240b36d204e3ea6ffa44ef3612a863358b589da77cb5fa84222cedd7aae6062ca9c6f0189ec354463ac23f3b7a6a623e54a6c2420ebea1a3b2ccbef1d6e2625cd4d084e7512e48cb0f4ba1bd1646973a0e1c144470686c20770db86bc58e551a2db3e1c73a3f2365845d18b9c1594cc78b4380666265f83b4cc04f5b1d403452849a37f352992d9340f7ee4acd6e8acd23e826f81dd55bf88871203134207ca8959c7ab4781bd85e4f82f72e30d52e3c5f7865ed82a6ff92f8f91f6de33e4c3a6168fb826f8cfa27cdb45b498c25089d584b55b2b3d24334ec2b4e56ed96ee9bf678941840c2e3966c9a7df38ca94874c5c9c1e5dffc530d315f3342bad6bb2643c0cfd0dab68690c37ef96899f74bee9840080c118faf746b9c287b833270fad143d0a9de3d126c46264ef3b897440d6624ac1c17e28ae6e885d870234247e4a2d4c5abd9846aec652fd5c38ccf8c40ba4cb7c238c49ef7cb1dc939234b9341de96c434c5c0ac78cc198fe2d044ebb95b8061b0c558e04c00774a9749a9cf4376e79160e2c8037cd2ef82b437e36e0a8ec105679ebf203ba9514d04b4bea43794395fb8fe508d8ba5b65715df05eea0221c552fde065372c7cbb96628d4c35510775c70b2c06e677f0c400f16088b5af708b29d6fd716ded779b54fbd05516677c8ce2a0b0fa6dd7c87175fcdb7260324cf8c823df405c0197fdb516390ba7b94a259271efca636c9ba7d3a6dc996c9e10226a19debf52195b85cd878ce27af703a13bf18845ea27f91e4a762119654667a414a213b818f6c800d223470587583f971f5dd05ce181452f414a32e85e865bb881b7a658759be213447850e2451d550ceea34eac1c9829b5f68d0ed8f39bceaf0f9779d29a6860effeb31560e41a5d02c592d3c00ba4a5ef310b3a9b86de66a1de9282a1dd002fe64ca817f74688fdfdd24c6ea547bd0584c10400465f04fa7a293b67a5fcb79cf3a2ca378c08afde348e70b412c9c3dc852b6db131fa264c46060e0ad4a79d2e7ce5368ba4645db40bde176c3ff3bf9a50e4ee14947fbe8061650163eae9c89c29e8de7c3c0fc912a141be469b02f0452bd567ba5d5d555459cbc0e7469d9d50b4734f7335aa5075b4f985733e615f1bd5940412af0df80b3b838ae2c8aa4e6cdd3a5a43d3ef2fb607594cf045449d57b56f4c7ddb5d67a72045e30b9f735ec09eb8f1b0c294b1923743fa8c13185119994b794a7a4eac7db6e88327a33ce36994e83f2bbc2c0f442da3695206d915ce42962a739ee39c1719cb91fed7b4bf56618f190fdbf39a8a633041e9fdcab9dcd0dd1649e78e8294bb0345adb716c19f5132ecb5efd60490af239cfda5c68f3a000ac565b31f41a30a89f02724e9582174e939a866d84dfef31474179c02e1a80dd10d52bc74b2e6f71127c3bde55571eb018b71821a0b102de19a94cce2fa593e8fcc6ecb7cbed71853e6a8b5b796b3e1f5decce02e37b1df0505a58b00147349752da834569e62c5d5a58d8eeb3a09d6d10165cc889b5a44a9f0080e91f23757edf0043efc3f34afdc554cb04702db242ce7ac2fb61944a82ecaf351e3747487baf8b682b242571cec575fff15bf3556d686ee3092d24e171f974c421820c36095c0716b68f0ddd1574ce38ebef46cc29da0bdb63245d11e05ee30f50d96af1b308c836b62a8afa0612f902afd73b1efbb597fa22ee37b2f403b622641f9efe5b2ae431bc06c64d995599023945e28302560e649ba94879b2a5109fbacdf6d26b99844b5d9d85e99f2230800773d4af24db391712e52ebb96e9d2636ba7b7c3f7ec6c9c379339efdefe00fd0077514e14990210319f6a08093f618be18de0b886a17c8d983a29aaabd1d5a9489fa4b4c4d18db8be70789a1dc3b52104ac4035e8a3114d7fd4bbb6ba730da432224bc126edd0d9daa13084ab6c9d25db6bd655e5e2b548ae2dc7558ceb473f6fc1c435c9f359cc211b74fbdd53ef695c414a6a963c9a7c26e37384081109acd6e7265e61a1849395418604304090dc50a89f7b521f64563afb80e90cbec398856d41ffde07c66592d20200c8a71f059fef7faafe6fc259036beeea3930fd6606cb27a086a75a29bc39cd805a3071900efc03ac3ed93c17777f69623945dfc63d5b077d995a3f2185657aa664de31b5528e9a152b68c6294ab2596caa23df281ef8927e4af3bd80887a468a3eee0fc65de2c714a53e40f2010c31db1f05fc1fadd559814c4a1768f5580c336e4e41b1a1c2f20ca47c42e95929a581243450ff2c707708d62ca065a57a5179cefd44166fa053e94a5e5177b344de50295712e4ecffc6ba46521e879c7dcb5bdc72ff21afd9d9e91be26f6d99fa78d1cbc1c7a2727fd2ef84f615281dbcabfb7e0642d75586e6ab3b617dd3d360977eb1acbced1a71fe7f2caa5add5acce774d980c296bb7bb492af1b938128634350d3c27045f12b8f38fdf5ebfcfafe90c1b5860bd9c1d926c9331d4d4e2926bd3204197c74cadc061afff41cd04967e07f2fc14d989d293ef4b5ddd7888a9e8e6c6b73ba79fd668de0a76d5cd331cf32bc11ab179984c3deb1126988cf450566f0ff4fbadb0b0e8d732bc78b90979bd97df8686144c9a90b3a0d1a67688b5ffed19e45cafe1047e8c15fb758210e46b54313d85f3d1f40f80e456e3826df5f1ecb457ac120d7b94011df321ade349847210e1152a9ca93cfcb668349b08901fb1c746d69c649cdc8ba94156581120f2e875acfe4c135492c55f9791bf485ac09923f7d49632a9c214b3154177769e4a39c2e9cbce0e70ad93208835409fd630bdcdd74cb5982167fe8aa71923cf9bd18e96dcc3327b99281794a8a99a1a395e701271ef73f104b2569b12bad37e11cf2faf9780798d3a89fa1fef45467af613fb3af3e7bbe5e4f1c28fc5ddf4f1a60a610d79bf7c33ec21bf4f65298819984d18a21cc6d3423ec8f79ac8590fddbbe05bb1803b32d65e175a7f17fe38be6382fa75ba505580e5172656ad07e6897090383ca785a92a7004be908aecd807bbf87f981eee6924badccd6aec179e03399279a98dd842cdf5e051ce6eba7da8be51852004f56a66ecd7241030bbecee9d0652b14290a5e344d893cff82c4087feeb8a9bb83a81397453b92c65a2df919fc6d4cae3b8b23c00bd8a9fe2e4ab9ba9730607b2659dd911835126954ddf665a9aa5c5f393cf8f2d45e5ec0c8a69832f770fadf196efc373a0b3a629dc5c70a5334e44a0674825e03f49df74191e7c9074827baf3504802c371c4b61f533b02c56e4a2c085374be2f209c475f78553cec908b6664f1529279dc6e557e3a7d9b37136e0ec184ca6bb0af49d45a89bd3190f56fd9f156077bd8f01e1775b1e9455cbfedc023b446e62e3b3b7755c0413f0b6d3915c05ef3fd89fc3077eb2d82c5b4e5087afaab6d3079c5a8839970a1bb8f826c1ff6c5985bf546c50b6f097abaac1ec6208bea33a19507417ed35ba4fe2d69f33bbf84edbd0f609ac8abe500d6111a0433ddf1c97c79f374f99c3b9b680682853e9af4e05a6f3b0ab9ad8e16dc957efac394a065d2cd01665b76291a4f20b16bea6f70e4dbc502782a33005b185a200124c18f4149e5c6a83c5ad479d64e0bccfc814a26ed738d50a486788f29b8b7d2ac9b6fbb3fc3abce394d19fce3affab003a09a782696d768f708b572b041a38e80a7d1c1fc402a9f61edad9ad7bb64d362120d7c6d1f5dc0181021ae87b5e13fa0ffdde830024019aa3cf31e663ba085913bc8a13a622fb80659bcf139435f1c51590bd71d77553d5f56260b13f805b886d79bfb427b2726f6e2cc6c8a9547ec7eaf4fce6efc02b869575f00826222941a0242a997fd61a90f77293cf6c52c8951613b168f737c8412ddb33e1a22ad2db7609200e81d127069ca0edaba6868fc98169327026a81d36a692f7eddb4140fbcb7665517e6c29085f0cf5b158e97412a554e97659aab501918f565249cf31b05a4906a31e8284e7cc9b42eea89ef46288978e55a644ab7da22fe7508d17806a02b767d63475a7b4bd7330f2492781758103623b81977cb625b2d2268ce3fc8af6d444848c35afba6f27d558a23903bc09f2291c860d0a8b2ffab250da5139b6a05ab35a184d6a1263d6bf8f71686f6af7a341dcc38f4ef7d271b66dd2c26c425387529ae38920821ceef12fb27ac802cf4b58b1f908edc591b6dce21f7a79cfe09f67451eee2b458a38204b7771491b6ee43573e97b16a8d0c3d601d598b94222217f79979f6807121b0f6ae6f1c37f699abeccae051f0e00ad758801ffc2fcffc6d8d21d46877814ff17d710b1be6d3c31ae9227cf0b437b4aa2c9253e9e65225e9e352df4db0a3e618b85e7d12fdce225a9b4aad73e15ddb36925e0c41945a3bf17c533aefa3b2f867a5b78a416b3af1fdc7e65115c2a84428472b8c3e9a96fe0155f8f3207b739d30bd4964d08776e8e48a3f575a09b07e2b1ff8626176665f1a65692dd94a83e2c5dc759ff34e3ea9bd6f98dcd694878851e30cb72df6b8363a76801d68167e9265f66440dfd92cc17634071b2fa183111e8960be3e1f12f12c52dd84ffce19c685bf19d2b03dcc4073642d74da8f10cf0ae3f67767c45a96c72b0bf11a9728bd61f36403ce1e5ffb37b853240432681549f3e62e2e5774c352a42b6d39626de7588a8f994364df649af684d496e75398b6c1482c59c8be4b064c2dc78954517fea4ce7b272135d209a52b11d801013ba4aa2ee782eee178bd69a1d454750941807902aa2d35fa794c3c02f78912d0aae1b60baceb880b90336d48549bcce88c963d3403e59c12eec9e4419657d050d50153dc117a35e209857eca34338ff64da5d9fca76840d6156e9294fdb3545ce4af610ecf838691ce081cc8c5623ba49fc6b6e84fdccfcfee2899c7323e7ecd13a21ccd1459e5579fdd307b923ced38448724f969c97e5b13e6f80c5304c6901d868980ed8588d8ad0f58ba949c7b2a88695910150042076be953acddc30a0a3a7866b0dc636b377e3a5fbab6e6f4bc990650a15964934c09260edb9847d1487d7453049f91d70a79ec208c0d64dff3e5bcee37214b60bbd2536a74b53ab19305d1d205e835f7e9081ab0b08abd4023823fd5893eb95e307f8121dc71de8eb0ca46412bdad244404b45290fd32748ae0f3532ea428b69b88347f19e5f756f7e4c76d712e14f370ea53f02f34d02feb921668e75a6d7970a97f2a327d524c189a94108bc0a0b86bfb116551ccfc4e1a4ad728c28f080d862302eb79605b2546a5034b2abb56aa5e955242eaedd6d074a96e9f1434881cf4926c87f8eaedce0fe1fefe7369247eceb3f5502cdb57b289f9d63e836c6b4ac53fe22dd5670c402501fd06576fe755ba74c6961365a589341221228fbabaf37e4022088fd45fd76ba4a22a8f1b856eda50f81bead169236718a0ad7c18f0d3bc59a3e83a3641bfa2f1cc332ac13ffe00e6d7eda1031167c3d4a404ba9aa5617813f70445b635e502735db6e2be40ad15746081311ad0862a40708e1e1849edeb0482609455314b58fbdd4d8da26b5dc708349e35b544d72e3795f094a3c9315419584e8b94addbb8fe84dfd79b3ca844cc6b1f1fa0d49df511332e2a49a1fff1d1c987b7b352f936ab260c927867ea7528522b0ca73feb6f811193905d480fd778522da4fc9fd5ac515e1825c0a75e1d6b63eace7f22f9795558bb823ea8c4f7b4153d913f66f8e6dc111de5832b466024e81885f1ace3951f48d7557924ec9548dae96d07ffbb7e7d2d76dc080f84aee47036e600333622271c4c9310c8462dae029eb2af0a52bc79b3a1d091c16d2b06c6c2985d150a56c3327222689fbd63dee3809157ebac23cda95ba2379a0c46e778c5b53a5acf0af852ed3958e25bba53d1e6ea126cf81885cf818491175c00950652342b1d5d41b59fbfa27c1006e1eadfa57ccbbb52f7f4c6d41a5746f745909dd4acdf10ec102dbf3c5d2f9c5604582abb5277be97021bf7a0f56d85b68a5b4ea390331f00b4f0f068ca6604eb7ba248c0970c1cd4b346cd35287d0bb2d7bd15eec7cf968c42b18cecd9f2a52ce2ff677bf371b793faa412d42092676440b05e2a5b96b4edeb4e9bde279ad483c136775c651ad873cde652bafa89cb814c69152cb55bfa3a7faabf13cfb7c2e22b244b452dc3649576f9b3899826eb1f716d18d9ea8459bd4e9a6858ac0c241263b6db0937ee1935557c40f9df77a029d9b5a127cce10e3eae911a37700f514580a5cd29bdd6329ffeb8db9057edcb72005de3c643163610d49754fe2cbec30838278dfd8c42f9d4c9d6e653765898c1bbabf9cd68333e4f75dafc9e6fa211627509ae00e5493eef4ac83ff2779b8fe43d00fc5ea5641777665403e70784a023571ee198affe307960ff07c410101e08be400fe3dcdf5b1609b20bae33e143334b8a5b56175a84a937778423f22f0a4cb4f71641b6bbf90730fdb30a466120fc172d0fdad5a090fdac7a184c31d632d405d49c87e9cbe245adf8087745208564fa6a6a26bb1ff70017ae574c430204048b84386d4dab735fb890389a2c0245eb35c7149d73ffff6268eca3046e59cd33436bc6d112a1a59233b882f8b4afb7280e52dff037d601764b9dac1f9593c76af71a83fc6347d2b214eb40467cb5f1dfb0bd662cfa7c360a0108ef034b274fa823a5749c24bf47e35f3d1df361ca5284c1f1c304dc17e67540c1a3d8e3780fd7bad36e45f3d6017c98cea35ec238210d11bb46e6c4b8788f0583f8b7ea254b0df281242104f1966e83781c32c26a19811a43354d7e7b686d089f37b6d8bb20398137fd047202b559ecb21d8fa10c857950c75ea82b4285500a3f232c927ac8baddc5a334b09e9598824caaa2984699f2ecd7f52631469aa74fe980fa1b68d3a6eb9c55b9b68175e173e250d78b8dd35e5d758a902dc08be16dd90460154db4dbb9d24ee6bf833603d6af6a3462c28c29cce9292cf3ccd0fe42bfe2a785c89a0aa8c1e229ccb5dc01ca5066c32100e70dff8beda29f9e8dad3c8767c66cd4ac178f1273f7ae172aaba279fc200a048e12f71aa08d09afe968798cf1345c17920b46aeacfc2c92b3aca12d3643e3a4fe836805a5fb6c539c78ed256b5cb8ebe9766fb8dd985c4373d42a82d15aec1c1b5d4c405ba9dad4f416c738bbffa243785a103a1cd8d4abd072726e204e804f64ea9c34938dad01e0dc59679d4ce0bba37b84d1a862adf713b0ce1aeb7308dbb58eff50bb55357e493886499a04c1d35ae66312be4ed1b7888ff2051f9ceb02a24fefd1ce247f04dd158ef20249924d1215b3639f1cd50dd62dde3c0adc75cfd21bfae2064e2e5913d36ed68aa39582eab6adeed73f9d028481d4b55b26d66f7c45efc6c1dfdd80521ca6de865cb73d08cd2c15ce007730d6fccde50ed08f9ab54e32649af9b1b14aeb84e8fb2be33df9084dd9420afa1fa2d79e6311f1162b0b8486d82bbfc8b1dc14e0ead0ad77a606d467f68085f31e90d13e22f18fefecc977a3599cb065d6334a83c4bdbf4b5aa0a14c4a4e8b2b6fe2aed26f589a3fbabd146fbfd6f10b286ef4bebbffd19378496f553410f817107c661c8d79843f79b7de7f1286626b002ca483fe32639b6c9e64cb03b458e09cd6292d138c88f4830ccc663dfb62e31fc43e9d55d856a991f502c1f075b0d1a4a607b7fe7dcb6c31e34c21f0c21a7496b209043c8c83f6273c6bb0b0476e81a65094ef103c294aea0494c3e7f7cb67b4e3f57dcacac8054a33966332d8e125a4f57ff0aaff479c29849dac68b90b4b3f6ac51815cb499c2f392d9e6732ff7c126cbffeca790ddfa475557a8bee0bd4bbe5e118677285b384c57dfbbc4fee3e97ce5c332f568e19af552bb00cc5bd599e7b075c3a918b8d445364e073a496f0c6a5666bea2ddb6f7a354524cc171442dab9dce985dffb7d7cf6de0c8ab552203ca04a3ac0c3cb10c2320bef5bde6dc3484e822fd2f9984329bb692f5b2d279a82bcea02b522031dd5733e2485a3bd5ce0980575d6f6d150d6e68f86edd9c1861e172bce5cd4110e4e4715e1f83e51ecd9f725bbd14ebba4ed26c6c676405ee695db109cfbc672068a0b526fbb57cf216e17765bc00c90cd5bd79cbaac86e5f1e6ff8866eda012134821bd69ae97eb92349219e3e55216a632a3fd3d4e8fdd2301399963bde678b5412d2798ee909f1424702e4e51c38c08a3d6f519981240ed8074d3859de534cbc20d9819cf284d2a50e9be47bb273656fad35e9f8546324823c85e73effa423b389ebf9ea5e9d603eaf4ae5a0d2ce292759f26e62ea0e47a5844ce8223726a1bfafb2c988ab1dc105849bd76e60d555f372677f9fa185c847efae14b61edbd5ba0490ac38a0afcfd24899477167aed33ce4a65ad66983c652b94848d7d164e9118de4e503e12b9ffd0fe7ea35164ba5c2895f721ba911656009406dca068a268932b0f87cfbe1679a2291619293ec66f45d281b0884ff21cd556c10e02542c8d7a7a0815290504c6756025284dd44f1957bdf3962ab252e18a445dca8aea10019bcc646be6f4df5457051d7d80b930bb1c5d4539de39a336b5075f8d9efd42f02ec0bbc3e715eca10775aa6fea65e9fb686a87eb26f6971264a57d5cc904d284809ca871a2d58bb923c4ececf4218c4270aeeb5080fa422675afb0676239cdc14b7f87c983200835950cef57ef63db5205dafacf068fd2c8977edd36418069880513ad3c44f23570d15332ecaffefe241eb5a12a4cb21f06ddb7f728fb348c4e59056101d18102b9c18c593252385135fa086fdaf1f33fafe5f4eae07f159402895f8688ddcd1aa1688cfb72bc441d87670ab909f7ac886a50aac12ff40ddd6a2d7971122cbf3cdc9412592d8850903af0d9f62c38495590d90b7cfa955f9beca797c2a93aac8abe0aed2b3f8bf6a655aeefa87102163a661b41717572478e63301e97a2839794ae526c8f14804104426f0e75b9574d2afc79ebd97b4171c634f6996f83be4fcf9c11fc556a4ed2addbdf800c20042b3f7d4551a7a0ff4fe18cf179bc18328c50805b45c781f646809a135674cc6d67ab3a5c23390c4bd20c84a16249d793c025e556016bbfbf9f48ab872b177beb695c0be64f00bfacc8935436acd2dfeb6e16ef0f2f4f81b5e8d93f9042631b1f4c3b4b83daf87b5b126e6c98c8fd40801fd7e87386c9917edbe9bf85aba409a7dda625743bceb39030c426146515fe4c6330463b2e29555c196caea820952c552fbb7ad0cf7b160d5d72fe03a5aaf63618a8232e794d268061440eb1d4f28d94708228ae15a52645a4717900f954888f49b05744c782e69c828cc636507818fee851a662c01cf5f3a4197290c94f6a26dbc69d077c4bc0b796265317c92971d9707020ebb639a0e9e890846c1723cc0c62187919577b17d27bc1dc14bb27e86f7e298596f04aa548971f9eeb77c6bf45b09963d720aad3b1259ac7b6d34c6fbfed46a5096a725366cb61df7c184bb3e1c6848ec05193704fc0e1987ab6f002678fd93dbe7d526dd2faf6f957db4cbe91dfc564131c499564f7a163411a8b039c7c9bad411f5db1ab62290aca3a70bcff0b2e7648a205494f964b50e05bf6519ca806459920ebd51937de58e27e75d8c1dc7ca58304fc2b62aa77c1b7502a1ec82817ca576cbe82bc4894bbb12fa93d78f50715615c03e80cec81dc6ab7b6c9175100f4419a6afdcce3719c2af0a59ebf83e92bebc64af20f7eb3065eb7577b1c729a49c38fa8a8b9118ab2744131fbbb76baef1557db4fedf52637a2c2c34111c963b8f1091f9faf2e369d16f1208c3993708b06e01839030671749bf68685065cf808efd8bb00219a08b3348b4bdd3b799fbecc50febb1f3a4d9a8b44c1b0ab5817961a28970e224760fc82d6405f5706cba6f27881e7cc86e3918e5b984c800258749566f5672f3ab0389ca976bea82239604844a32b8971c6561f9360e426446805360ff8819515b155fffd238e69742cc1feae35dacac44e0f5e4ae04efeb64ea097919f7ddb0cae85c5c9bc5f7d2efb53a5df220d75b8fca285c230ab1eb976ff8b6001b6944eb00bce45af5eccfbc35d34abc99b6a53a9eed83c7abe6f68dd3fafe22eeb6e2d4e69880df370b4e126fb78f6e20a693c1a035bb969529b853009197052ab0fee5635d131d073bff5e1861a6987c1e9df174e50c1ed5451dbfbabf5b62adc626d98908161da69801aba490e33d00f3eb29542cbfd8f4a08fe05c7e67996b4c820bb0b6e7bc0426460993f976d467fd4c5eae1752976924ff42afcc7df89c068566b37ee1a41ce5d4cd9df45fc594cf0277e74a16a39312bd87d752f8b3162c92ad28b7261a34c73affe8f2a637eae775e04a68ce192a24c8447d390cc9d95217faf1e03afef81fa51c1528ec0ec3369fe960465800c18a4cca8d9fd499876f57799e2899c7c9655451651e7afd2c691eb904fb30aab48dec2541b5dbcca65d951ced5169f69e822d5faa1df97f20489af878b9c20d0f2f8da10af93a89fb45144d16df2366fed9c9943f2a0c2c36d9771282ae2dc816d9cbea28fa5c97d843dffc7a1c23b26a3c03c035e8c22221731be181c8fe5e305ad31bbaccbb450b93d1850a62d357efaca6eab7ffa25174800844c4e9acfbd4d8f82cb0d54b391e8efb2282fd239610ab695122eeace79b732458f0b637a8a8a33dabd2fa1bdc8890624764663b1c3a32a26c1b449da080a93247163375fdbe2de044977f9a572c6e27ea8fde053e88a88b267d0fc2ce9737ef6b409a1499db409a60affa5ce33e8c6f58ca4d5dc1e4aabf5d968b34730e19fdc8fde6f49d147407d82ab6ed475a563e245d7ae43571ff2a35364e22b57e0a81a3026da0add4ab5d127f95b9e12931dec60c1cd65469d328ae49dd64223717f5712717d08bac2dce69d6fdde7e3beb93c8ec1847d6ea590ad1a35f5067a2ecd4b7fbbcccc3f826420f42062e35286371b8f7cb4088341f7b0999b4a6d7a7152330ba8a5c2179a8771da6f769223497f5c53b155ee495d8288a81509dcdd695342e6347c55be64e4325c23aff98d076f104d8c9af2b96178602710fba59a74f9b93734a62efc74406dbb61166e707b2336bfbacee038359183bd2349ee3eb9637321d770654590073f3be774bb9b6707fe9c55768ede00870b9b2b3b5f7d598336734b6ec0d548d1028e8e6aab67e252977e779312c38be445f40cd2d92a0d65e5e656bfb26d73f1a570f8e10c094ac682b3aacb43c932fbb4323e59af757f506b362022019e83a4581620cdff993af5037ce25f5c3bdb4de45377e72ef067c6c5c45de9824963f2eb229bae21a8bb2728a260f9826a37ab41fdd10c2f065eb36869eba73815112ef216da35dacb89cdfecebb89a28e09789f915b71535ed3ad462d210652f7b26dd9521780c1d440661751b6a503c05c20328ed00ee706c2190cf93f8c2c2c71599924b969a53e3c8d31de30486b9dbd3b40319246d599ebc0cbbafc96291c26fa67667283725f6aaaddd2bac769f6f2948b5fa7dd6faf6fd2dc973328acdd44f37e615e895f638f888e4ac5475e58875c6230a5c9f8b98f15d1620ed64d569703cfd0d930abf1ba4b78d0df6b31e7104ae535e0d5e122b1f56e43679f307c4b7403324904400fc87a86f327abc0a5cc71fa9851dd532242b4209526f5d1cd9396d54ae1a10de670fa04db9d3bb1f1db605321399854e3ce7b4c67d9807253d4d6cfa55b4487c8e32167b6e53ed8447d4da2b80d92d5419ffafcf2692469fd41cf4f26c77dd9729ba003c3861ef930a182e3907c914416380f34c8c64fc84b2158cfe9914746a6f26dc5d33f210d3c058084ae5086a2d742b8c7890b19f4fbfdb18a0889d4def7a49e1896ba20f0a979e3db6ebe7c2e3ca123c8a18f3197a667bb6aeae6e4e06810ad28ded57e89c08b1d4a5e46ec12c21a9985dd7e61337d09c5341460d452fd086907001cb0e5cbecaded4fc524e95d60890fddc253acbd60f4a68656396a3107a90c99b6fa6476abbc70df0188c8d153cfb6ac35299628c8f8e79c7e37edd7ded87df94447fd38e3b0d5fc589499ac3cb4747bf29bfe2692427f82c6710a5a7e1e8685f313914fd58efce341cbb185c850a5243f5f8dfff9b20c6db09c178af39d26feb7e678d51a8f687d6f29af1c04e90a6b689bfa3380e21dd4ff42a9b45fe0c3a7ca55984e2678298e54a02ef8d3f5c552f2ed61f315cd3b0ee8b1909093dc1b0c16ce165feebe265325b2d73192919aad0727ea7b5af949afadfec9f275b6cb9ef58bd172988b575a74a29c6a616f6c32b574591e8be108bbc4e5eb7f8230ef974a43874ff9554acd260d4b1425d2b85f780a45b2be7333bd8bd8dce95bc14a5152541bd121b0de3940071803f6dd3966f8821191d81833cd0ff455bf90654e9236e53a6b77a4454e7ab974526f8602fbcccf11f513f6ce8d53732ac6f0b03be6c3ff01aeee2e382449f50706961a58608d11651b1673c1696f28816215b82d05a636a61e3b82eda3dd9e54e70fb9912305e5deeb37e3cf21193838fef0d8d7b6105ca608ed53d1d8e965fb4360a3dbade477ffefc43fa284aff15a55eb944cb4cf3b1e8b539987a43e01a423e7cedd946b0b273a4a92a9468fc915011f29df0b96b08a43edf0067904bd94a4b17f86cdda9be3afc3ee1b70afa76837fb0a103f0d149d5c797a5ba2ced5e30d95ad2574a4107b99795ee573a8a4a46a2b5f9acefd9de45eeb1f0f9e0c0e9be00d6d1078c271ee5e6cc2ab67cf26dc2e247506819d70a0dd92fafe700a496f9ba85d9c71f5eb39dcc10e30aee58c8bd596acf371bc8fb92f7a8c56f0a2f48d43a17418f88cd1ba55f0a9533015e797043808e71669d6cd23c3ea125ee23c470e69d0f26c319f8531811b58caf8129570b11efd3f82cb14a5c80ae7ece3611cc629202ccc6033a75a1d7ba88b1d883e3956ff75f424447c57d65beb22333c8f3fd8f46cdf548d1a9e7bf880ccfeb6daa8efee39ca4ab54f6ecaec41fbddfb74e5d0e35df93c817c16b00915489eef91330c89323855acc6f7c01b4b43572ae8ab39e1247a44d6c8297f473177e8ef8e8d6d936157532439fa0aac8e27f77237481e7610a1573ca3876f77af0c4a905f7922a9b3116eeb66be72a1f1c94979876b26b4bfffd1aeb06b208d41d7355998371a371d238b11ba569d4720c3e89a264fae60af6d38c3e144374e00038df07746abca1a35972234ac32ffe03dcf6d0636a1aac6a31c942db118e64dcc425077f40c9775e6a3e29e6ab9767d296bbcbc28e7147b6fc018eab209fe6ba48d95cd060013112eceadb7bcf95ada12cd8faec4b7871eaff0209aca9d28cd6a49c62ea53234cce9ac5c78ca160b89389d2af64cebef0ef72246434b2d26b8ad617af8a9396b0a8d8a6fc1f37ff7d96e2c8d9e60f1da0d4617045eb10674893cfe50a5496dd6999b7e8bc7d0ea8324751e4fc543a9620dde20475fb386c99366e4117c0dc049bed179bc084ac0513573c912fb3ca8ff730cf7f3e886261a421e6d320a1f82f120e8d0ef0b91ec59a1b6f1664b6c502c6e325f15576307ab4adb4ad59562e4ba20e48f5c8c013f5c0e0df8916504b8781349d5a7f6e755350e0ca6d58c269cbd2d93b10b9f6a8f97d01d4da2a8b1f449e061f8b4ec75405777d04689609b67b28146b211041f98c85d687dc27d1171b3468069be1ecb55e5e4eae798325e50ea9f8dabf09f44062dbd727eaf17b7aea3d5192c9e403c88399e42ec72d136d2e05da38d10fad68c3af4954f07abf70ad0b2a99431e1fa76be6ad23a9d6453cc98a5407377f1c7b87e5ac8da999035a916c60918d4a79e021e3e05d4e150daca852968520e94c8fa17b606c82b4c761ae50184148ed044393ba83706a8244f5b3dacd623a48c1d363c94eb05eb98f8d5d87783b68c89d1f7f639967d089a05ffb6e2d4b5d6e14cbbb3e4ee5a9ece01033c14fb51a807e38f162b293b691c4d7902986d9b7ca26903a0c081ac564512973e31abc0ac848b746dc93afdac2cffb2fe0c42ae9d51297eab6ec353d5c1692e330267c785c764b6641f3bb38d726c22c94e46c5433078692a2bdc61c83a6a4fea14cd9fa875e4b64c572b509eb7807538cf0d87c96ea87b9f5506bfafd9dab975c0189990bd7e21a388bc16ba199844ffbd99e50055c93efb428f03ab6f51b7fce69c652d38916065545c0ebf26a43c1037e0b0d22fe14874b58a6fb430726f4d1c47f400ff16307a3ccdd7c85005b50f51544da0c2d1e65425fac0beca8aabe20a808b626a9a5ec1d8d004013cb62b5114487cce18f278ef6edc70436c5588eef8b9bc36d73ac7f4225cae7153ef64f5c7b9c7baad9a41e59c467510d880a0a03d6101848a1a75acd73925c5e6680610246cdaf862e6e4f5a0540537eae3745b293d9f60c340d3128b9973ad251a1f06527a78e50c1f2cabbbe28a667d62b6c254a66aefae63dce5aa65477a407eee3bcfb838d14b52e1877a9945f5f9fa1dbce8edf58d5933abb28e3f729d4a5974dcfd3303c51235ef54717cfb7f97d1eec6631d7cffc92cc81a44c640d998c62f9fce44d1bd9189f55d8ad136c8d2624ef290ac42c463337bd2a0f96ea777387bb1cfaef9a79b5bf3951223dec65c7304d51501e621c007e3621d0991d1f53b5f4b0c3791206cdb066efb5a9fbfe18e6eb94ae45dc4a9237dece33454479b03770f195fe67c345f049ee656ea80f3636d0f5e7c8dd3af6c06ae7ec2592ace7861c7f67e07cbf5fc939c43ea14bc3f057a546de3170671fd67db65144600286f0296e48da410a0ebb9313d6232c3c67e6d7f76eea8c512a37f615d84dc07c1a0494771b06dacc9b2dfcfd4264767e8d2da334c093fb635f2c8353713275ed218b331435526d9653da422b5cfbf4ea3708f8fecd7b9534880979da2b67951231c6e92f190a4790ecaa50822b9b11b547dec8ae23bc424af1ca8dc05385c29ecddca71685afddb052f7eb105c88247fee6391c2bdc2679e428bf34bdce653af163c3ac2133c136cd8b891b688ccd6a79908c1bd7dd17a43b49ee59e2d96c78b0ee41f07c81f5744c490b22143b850e004a8725b5e266964a77f92d8c7257047359c1bc07c1c0180238869c6b6a4a13213135b25603a23bb360d13017efc038cfd99740b5e0797047575d9135e3abf3d71f994661bcb14060683a150f096869be76c70cb5044d4663a442225a381a55ac86787f7160163d82e1e02ad0d194e4abd10178aac1a72efd922721ea6a08e000c2454cdabf4650204c45fca6baa0852402e350a456d6413e564c87f81a6984bd2c0c61e2232ea30c5838716d8d760ec0f0dbb3588aa659f6bc02d9aee7d800abdb20875b620fd8ae1794e2fd23229f2502b9ab7ed3efb3716f234fc951f1eef4b7118252039150f8ac419214a41ee28280998358085af4c8469b512a3464c7f0591b0aa33fe1167d04dbabe5e5d742eb22d6e2dbe55ab0b575560763ffefb529b36442af414aa7417c1ef2cd756a08600bf2c3f694f3cd1d78fc51f54f3e437294a4b43f9b3c5f900f484f01805f27328fb6a59f8e0a1f2a3d7ee803930c3d436bf424a880431ec3d276d3e47d731c5f4b630df8bc93908895e26811eca89b46d0ef4d9d0361581d70252712036f8265053421f29f0be5f31b290a8b4529ebdc92ab3ed71cfb4555a16eb5067a31562ee04b16e6a265ed1d53bf01709c65898c9045094dc7a5e8df30e58ab2dd6310d4686a9849f35a5cbba0e78f887a4f999f6bebf9a7e2e14da1f841f4b64cb111868e7c822ed35ada1b4b2b0a7872acdd943c48293e1b6a5d82e66d52689d9925b3f5c63036ae5cc1eac3629ce9fbadd3d7f557645a06215cce450bf439845f5e2308e553cbdb1f5a25ace6f9ee05f94cc66b9a5a23ccda16250d59162dfc47720ca4522bc09c79ad106a711909bd2fa89fe35e9b3ec54a519a474923f05ddbf8a98e29168d2d693389b6fdf51c2d2a4033741ac7f44e871f3845a50c99107fc6062e6a3e97769f5fb7a747db94dff36eb7f6078542f77e1764dda723cd95bcbfd1b8278295e20989fef3d01ab9e5f667f5da3e0460f24e9699f05bac1a0a879c43e2846bfbbecde0126994a2ee82787b6517c05770ccd41f922913c188881bf23d483531015bdd7bd9801f3c5a43919df6551131578907bde706170fc3c475d9c03dd1ae6bbcd0cfcbd3f17e184433f38e89ef5230e2d515a59785ea6565422f91d69d9e18e91a60756289833697e9786a2aae0cd4599329aea01863b976b334e8a4df93cc24096578d87a4e10de677292a778babb9c27f7f3b02c49191331a46cabda621848d685285fe929711934baa39ee22dfe5cf88eaca3bd10a28f62c6e7c340f2710cb3303fc9b198c995c59de394c380e81b7384f7c46bcfdae2a123f9d0095d2eb1b69c6627bc075f5d508b14b568057603a9f2233711d7a2dc1a88975030548588764c4fbd6272982de68444833b2e6d176f70f53bd7524793210bc3b7d9383ac044de665b66456dbb07c1f062151213da5a4f1b29f835391da2231d7ec8546f6cef82756037a34fe93d3d2829f9c352b9dd41025300b6751d32cd5211492c2413cca40a1552075f8d7965e2d939f1a59d8ffcc48326522de40f0cf6cdcab93317ac0b724e5665b5c7b87e2242768299d4ff34a8db53c7d80e8b43815f6e5183d0ff80f870448ff2dcf5a865ed61d6a2a6190391454fde3e1304f43dc4867854b15d3ae1a5da2ad3977897cddf8060e1ef63cce7f945a042c2c6f842d7a84331f84328d9ce4e1c142fb2ccf46603a58618f809973bb55a4eff3d77c19a1e8cc7cdef187885ce069aca7fd81fc91451ef19c5661ffef611685d0a8b90cb05d33f2f8ffbc38bf8df0d064d046f67d64ca63d6f5abb2a56783c9fd959384addc1326c3f7be467a0c6eeb49e335427afd2a9095a860565a93c2e1b2f5a4c3a578b5db51c8b746246dbeb2e9019e65efbca8166ba839c4d6b8f67d77ca6943bd42a8ab2d44c041ff0bbdf37d3f618632c12f758d71097e19993e4afeba7b2ed7894be57211a006c28cca413db7da761e8988834aa9a7512e6f5d889ebf6c58c4c048a2e2611536a8ccb1814efab9f6cf29d3977c0ae9343daa98a2bd9633ec4250f3fc596edc8347b3dc2c8f429fda2a7c108bf3795e405d14409360a5e3e69b65624e88af496f1a636c2cf2e5d1459ecd466c529cfcf9e063c1effdeeca68ea5e2e120016bee0c75ef2607714c63a4c515666b628a21eee05b54b17c189d8bc749920c564c32a02dd6a46112be22d97d619ef6a2e2c5a3998446c36b7234ba02efa4c1c7fd374e139d9bfeb21ee3073fefb38f1586831491d315eef5410a456aa48ffa2fbb85007d9ade674eda9a769b317cafef7e5d8dd2a1cdeeba8b8642eaff26e311ca6ffbfdc287d71a427f17342c667a22ee4d066435308c9184b4c0bd30bfd7b86dc090e7751d9078227cd331e90b1ffcc95b0ed3a1daac84839fe3377aca7ed7cfab233b60259fad79b56ac3b2024655c6a0d64c10014c5abbec788dfbebed4c845b5184203c705fcee2c742ce61ecdbcaec76b6059a1c9b2179852593c934cf0cf2f38d0148f67184cc762bfc461df880929558c0fdca217c0dc51316cde883edb122b78a658ae2dd88dad52ada48a27f045bda144d1f4309cff90f61f243759fc1a7ca809ba85d42d0c393b471d4fbb972fc3954c1294aac035d6d03aab947d1e8e1979628334cb0976e0aa9602e5f43bc7fb0363e339749a123afeaaf8fb6d9915fbd45f8ad218b889d6a537025947946b4f7f611df382faa232e6bd77792936bafbe4cc37fba88ea59e48ba33265eefecff108eddf2dabd4bffdb3a81fda9abc639067768950ea54251b9ab53f116a944e2586c6df806e87efc572df3a22663d1a75b8993a918589fe0a2ea7488b6d8672d6b9bfc049bd650e37b8f8768412221b2ca3ff3561017e0a02c8b4348294f453d5e51de80cb27d0804d17916a807173774ba3fd95c5874a8da7864e004f1bea9c4483939b98f28c8406ad8991df1432d7a2fa03427adb629ef7013555233e06c898423c25811c6d7f35154a8b45bf54d11c74b3296679cb86005e393385f90d3a551acef58f44f73c84a3d0f23889f48cb96baf5b53ebd98be0c773236b35074c7d70fe6f6bc6d88d2b2750572f140b19ce37804ae9c402765669eb80b989e33f8d58e81ccb207ebdd3e3c5b3bf089dab3e9d463fdd41179e4836f26f15556ff4e946db7c0130f80f1c8f33d25b696a5d1cc5154a9df874bbce90d000e514526723b01eb7c0335283bf0823bd36f8b4f80a481a5fea94c5d7044cf3998eebf0d17ea63f016269b2b4c1da7e7bc0029142af71610b1a307f8fdcc06d64e28a151ae4d5172a8a32a40f25c703643c4708773953711f64575c9caa868817c0f659547c4e75de0138162adf3588a7e92fc6959e200d7ab96744f6287474c761be8fa6844268d6e724faad3e29769d19a94fe845ef84cca58310570202d6e888fb15abeecd5382091bbd0359a3422f316c5657fc4ee502088bef72668ed63c985da07c5fce726b49a83be9e99f4f8827da10e8c9c0ba6f2faf6cef0c9c26644fda3844a477f7a2c3a579429f17ab5de664061a9a983cb9e371268dff6139e9ee8f226223807a9df5b4a27fa345aa153ae6e6e26aa4f341ce051d5353ff16fd733f8054367a4bbe5a6da51764afcd0f042f04c1f01a71265628bd94d5b68335951c8da66f6bd3b0fdfed54fe221099a2500ae39e3524e16c9c2dff58a0aac119e89211952d0c624787790f432bc31c8ab2e2c75b6abb22fff3e5827d5787df534456ff4b9d5df4f63601648a7516639e88425748a6f7e170a66c47908cf0528ed74338898d2a37ae4437a74e6b3e8ab909ddb02998a3e0f469360cb2b9c4a97a0b00bb2d53d74bc642d6ba2fedfebae0835fc802e7df2b493b9306068cb36c50a218d3825dda360b6d04f9ee56ddc8165301d2a49da9024bd5a71a8a8ab65beb857a35b02ce3d8e2a7856eae36e6c8a836f847515cab59b09ccad3a85c2026b5ad7d29f6680ae74cfd1530960d70fe5b0d25bdc1fa2834d0bdd03147fd3a3cc1427218de9e1e0f1d1327a116832643d1cb62e42fb0c29dded7ed406e6b10971ade39f82eccbf6c6fec8e92846635585a33e32b1930cd085c33a4c97387627b0b82a0d37d90013bc25400da9039afe8040bdf70f11c5c2bf4020bbb77ada7ac3213883ae215abfa113fb8cd1a3b4339a57b438d6043e6935a18bd0fd4693b8613e726c3c0cae5254cf637628ccfb3d81a5255b1f2f8427d9d814935eb70858c8a9ac501186a573811d5ae88f561d822330185779e8980e529b2c7447d88975af8c5f66f84a7cbbc7058541c0f0d21051733c5b0224ba3e305e328568a227b314288080d245bc89df0f839cb97975228eff9fa6a0f9f29091f0a643c1dff9ad4902584567ffa51a7e57e21326387064648b16b1f87c9f14a500fde0c9b4505af0e77c3f6d0450957fb189e937d7ae77ef1fed3bcaccebbb73a77f884468e4f8ec9b8e45e27efec5dbb7177a515d6ef50f828eda499a1268410796b1d0d9f33c3d8be8a281d3066a21462f8cc799878d13173bcd206146bbadf4d1f4c35940a2f50fc6320d3efec895c61192462f97f660967b21dc6119c171f57d1fd7ad6dd07ab779aef7b401bb36b7e217732b95999e4727310ffc56b054b5b98c0036c8ac7f1e68fc048f34dc2d89aa6d13b28c4bafcbbe9c1f938323f0a8f2fbf874dcbcd53c23c8d4bb232353ce28dcacb63c2c7e6304e47621526090eb485567860637f2ff719c917ec620eca24fe39ce1f8caae9a6244417ac308bb2cfd3084336ee1e3cf2fdebc515a00c18483edf33ff0aaabc84d7d0155dc88a78dbbbc37038eab1d8f724bac42b11f590e07d158dc2cba780ddb3e6e691c4f175878a537ad208c9e51296d7c43bef7a7c8005593e29e69ff27d4efd0784730db44b6b79269104da3b0ebbf65b15d50504f7b6f0eb12c6d55063eea57cc52d76a585ccf96b79ccef83e206e85bd30b3244f1ac701a6eafa30aaab511903b582b2eb507d090382e4c2043c8deee20b16c3d10a8a55202dcee79629fb139ccf5cdf7ff2deb99efdc7bb84f20f962a32d562d6e2d81af798b02d3efcb71d8a4a75c0039a10057866d642eb105a65cbc496b2156fac1fd0162b7c5b0ab072b8112e299a2070d9e8a6cc46ba18437ca22d9eb53dab2ca0f477357c60c8710f62ee1192ea55e703230426342dcf2c5bac1e3e81c1549afd3a464e2e610de20d921f7aaa94e8b814d2f4ec455b373a7df0b271c0d5204d9a3a44165ca37cab65c501786adf07df6688bc46b9ca154c8440d40244b52e87153c5cc950230c229b33653e5d8b01af52126017fd381aeaf384ae7f14ef6e8df3db8962cb83db10f3eca467796ffb9a4af072216d1e57575654a1e35ef9a369ca90de25475f9118c1ff154945211ddcdfb17c5543b7c51f3dda768a0b026315a657e49bc4cb778806feead68bbec4ef2132db5aee8c2ff62a381e136804b7bc73482987ff2cf143285a71fbfcfbc87cc09b5fedde42743cbaf98e9e8748ec3d841e5211c9b6eec69015050d14112c175f1e9ed18712effbfa47308d80fc6ec56e5fd9a96680e17b77c3402ec602965a0c4d279f74c118f8eca9b6c78258777820985520ab011f794c8a057d00d226b61675b02fb675f893e5032f23d25dc1999ba4ecc333a0405b017c06b512f16ed959bb043e1183268845e9a1dc2affc2426f87fb0f02e4837996b8b0d1afb5c6efdc90dd5e1ce1cae7e25eb0ecf74d8317e83d4caeb4af28d073b7ab1c52ba1b56e848adfe6372f73536fd0789c10819f0577c50cb5cd37e9ad0e3c49477e916c153120532deda3e199815e4aa234ca3defe4db1d2fec442927dfc3839d4c7d52f6183d14dde47b1b2fb3e7db5c70c323ea921b583f92c56fa2341a76e30fb9e9d27992d398c1720e352e9c32c3eb144e7f91116dcdfd6966b22808de6315b8622a465e72a56791e39eaa8cb843408d17a84d273b8a7d132d3e0a3075152774c3a581b9a05905d14c0586293f6141261e6d86265be467134a5121c9a77e071e6d5b223ac74dbab8d3420965cc8eeae2cd63d45e389580daea8eba5c0b4feb6c45ba23dcb9f18370120ccdc34d54f319927ed9424c427b458c9819d1661905bb701fb61bb2cc14d003efb3ac549703a90d08226057c0fea9fde5b6e873436d5e4e851acb926eea22e148b6ffef9992cc4d92d132faf4492a9cc3adc7276b4036edbe9109b50b6a893a29032e4099b580b0cee65969c357f66022fb68a6523b1e6fa9c462a37c48550f7629b83e73905454cf3fa911fe53cb7c25649584df45a056b995ec7edc7ec9e8246922b542905433ed93110eba6845b0ddf16ba4342ad8c069b1a6705b0d9182e088f63f108f2126df0dd0521150aae8da627ac1048380415ea8a645d9b5c71aa10b82a49b33cd82f8e904bbed69e2f55bb369b131ec46b176a1a5d4af49769a316193464929a91dbb089552d46f83b9d0f7439b21747e3519979f07f23b1fad9b54d6e89b8ce86cea872f440156a629a4b74829970399811b2addf761c6399ee9975d897b95f3098e68c5704f84482eab1339d18a89ed3282b11cd9b3bdcb1921a8e9673ee6226430fd4614ed92f5c6ba36c47c4a94e0ee6f2b000a37848f504a7adce82932d02026c7e829bb0832a279c7db9a7bba1577b8bea981ce72eea60d161fa8bfe1bdff18546cf7909be5063b8579e41fdf546a74c50dbdefdf8375f3ac5ef3e84880d33db1eeb57fd75abe046571446049fd82d075bda1c3b991f69fabc53decfaf7cf7504bcee8f7a016078042cb883a0d9225fcee7ea3be84bacb74d1c5fec385c0b81eaf7f15980b6480691cd701dff155d2fbf5126d96e1decaa5a29dbf04a7514a06cf56a384d73b03161d516342a645110a90ef1d3fa72421118d49d08dd3805981e3da0f1789de751b64643db236fffe3d777f9940f35a3713382294a6e7707e277e1a9027662b0b38610fadb988a778b65789aa601e97ad3bd93f11f0cbca55dd2a15546b994626970a2c08520eb87cfea4a2f9f95bf67e6327988d4efe3951d90474a67db54e331cffc2a6fedb0b98aa06f93ef61ae0de988d53e8490f22da044666c6589d5bbd8f97334039f510b90c7e449e9b6aa6350288b4dc5e07df1041717d438cff98aef9f91dcfd88039b3f0070885d787fdc9b2e9820d46862db7fdc3b870d0261543c5456543911ab60fb8f4f2bba171598b699442b0f2f9b59b3960fb388d97bed451b8ab1ff8b441c2396d7e5ee75673b5ec3c1687dff8496f84c17e28d17f869f6114eaa94634bae33d106a49a552264b23fe2f0168cec0e45fb1fdf9e0ab6f2a64ca28ceb3fc51061be0b3709760f0420b5b11ca32a3c0990b7eab5309eabdc1d5d653d6fc3ca05fdbef930525d3a5bf7d5597ec8fcc76ebbf5f52664a9801be756fc230008fbb082d6879a46f56047ae1cf4692476c10d1f1cbe35d420beb184d5897b9b86987b32f35d9989fd2fe5a3082d3bb872a07ebd9e76f1942cc7b5bc3b03c68a3ba99aaad2f3417c09734a5948179df84193aa4d7b873f735394830d5e3468249aefe418ab612d75b7f7ae3d74f96f0d250806dcb355130f4fdb6887844513fd01e2477aacbe4fa9251fd9737c41ff79ea20331e6f207860961f9d3a9b6ba483617ec1e788686c19b0094974f407c50d4fd1416738ec297c9bcace9e092c61d2ce8f05c5eec4c034a6cd7b497cc0fc58b42d0619a794625b5199106292e2773aa71ba6d8bac5094051048afab3dd80ca1f85390360db738c97be7bb230ed91aa626d804e228d8a4ce3dca12e3a07e73596174cd8eb4a86b4057b5df876a135a9f376b1baa519b13453e6699e24b3c351804bd5e7a1d3292b63aa9c604c60ec1494af42809effacf7b5ed91e566b62eab783cedb932f069959740e5f361a5cd6571de7423b57f78ff3c139ec310c4d36ecf44d68cb49d01ae99dbe65178a2f9cb3473f41dd36943003db93efa267036994f3cbcd2cee545b397e45b86b72ec6ace628949e72743f536e1cbdd4b8e77e19a1d2765f35a790bf658e937ce791d003e5ad2b90f9d3bc7f2466b95c48b3e730c9bf80447c7a46539c37b69482636c514c14d80f16bdc32ba577bc9dddeeb508d640a89d8a41b1db7384943c1dbdf53439ff509c92c966ad4134bc25cb94645e2c692086a081b01e79709293e7134173197883a3cdd61ea37376a277afa17dcbf5e59bbc7ee23ca4967153ad1670c58514a0d4f11cec6cf3cc7b89620b45fe1f9c9faf8d4140650c529d2198f742d444d479bee4cc25d3e07012d61f0f54b78679899c096b177a32009487165da560a99871b9a853e657d5d2e93a39d49fcfcd883e5f1cc131b148b96d139c11a7d3c9ba1abb025f29345d8024d039d907d2d3d96967a4bbde35c47c0deeb5484d4bb3c2a6c88d9d82fae48c2019fb06fdeadb4f064ed3da252ab396e620abc3f481d5999bc75405c31b58f4a21c5e5ea77c9bf352bfe937201b60c40a5e03dc2d3d100844086a2cea1524d9d9765beb396acd2349f7e329159b6b9465268c1e26c4dce49bfaa9995c3d16efc0ccc03d8949b750d6c3ff14081c88d184f528212851271db4d6f47e8358917c268a613679a67142346cb45c2143d8d5f6f57c05cacd6f507f785fd33ec6cba33e1cc57111f29417a7d977ed1728e6be975761585f7046fb3c923f538acf75f034eb74eb863ce1a576ded4187a02b310a01d0a4e6f96dbc0cf26a38d648e0dc8f24b41883e0db8ebc7f1f7559c07ebaaa84956d5f487a176b9441b9e288c901d1a7f1c590c77ca86ed071a7338f0f33bc765c2f40473f9d06a27b20a48f33e3debc14a674827e7bac05b06935c9a3372feaa99c03727e0d07afa225bc19c321b7bac6ee5297b36f8dec67d75e6579756cd01a0a8198f1762f4213b47b2e0a108f24da1adb93524c122ac9ab6d6ede3eaa49b7792a8c71aef7b01f9cdb450da29f757f0d68c85eb6e82786d802cf7de0984e95beb2d5a4e3338344c09e642652002000f32ebaedb76f6db5278b2357f6c4380c976f4aed2d6025cfcad39c4cfc050f494048344cde6d7397956f7890324a50d7d8bc972e530740e6a7e9ed5e45af59bcd2a928b15ce5b9f2b89cf2b4af196e06ba8d300bd01e1f292f9ac1ba12efb363f2de601c6bb74ad5567f467b10288cf342742687a1a880f284ee96adf5368937f94845e419d0f383efc916109adb6ad7ad8135b36a8388a3f2a95fec8cbacf4e294efcf057ff18d73abc43e3aa45d82aabb23f4f75302860be6272e7e9aa242868342d0b71792c6d491648d125c22a4d880fbaf10de1e51e40989c87bba5a5ecda5e3713599a568028f31085d72dc339d1b4a23037c44cec7f73ea08dcdc74634391ee386c56670d4af0f1cfb0f3dd15db52fa9cc5ed4d6bcbc64f935421dba5b33a1b7f006ed4313f7c63953e15c851b225093247e1f3b6fb6577e93caffe572dc9f1de8ac0f91526f40a440dfc50cf2ec81081552c2c083c4d33990d86a9404fe55d083f40041c4486d4999016b4fd4374dc5ae271dcb02785c0bc5a79143c334dd4a78109daf799d82f431450937e93f9c62503918281c9f5605e895203960f403fba9191b918c5310f7929b6f7678a41cd785fea9b73d94f520cf989e1cbab0569fe543b90fc2937aa8e78e54fe505be9317a988e6e033f2092120045cb1480bcfeb16ad00f2003e57742cb62b8b164dc87a6b25d4bd71ba2260862dd90a52326af59f137c9847a85507a4c0e644194e1ee2c649103d88e3e8d20553c505fdeca5745f45731d6a7d8aad38fd5e7acbd4d8556b5a21dbbe4c2fe1c475a5da7e016d955b38ce66c4da88b9b08fa4ff8ed7a50f207a01fab89cf1cac1bf89a2e75f8d004ab6feae7e0856d68d53c12442bd9897992fc6ef3526a2102778f3d139facce6acb568848727743bed1bc76d76af9e800af486d1e3020f9476c541536e065a14b867de6db111334e1c6623b109652b8a8f7cfc3419ae073beed26e86ea21e2ea6df38fa7bfc24a03787d4e4da8247f3777e1feb624af67186536840540e563b96e3763cb933cc4dd5ad65072e577199baf182566c337207fac5a9f743e0dbda8dee06bbf896fa52bf0f812a8236211afb76285dc867abf94fb6dd2e01a848ae3e2589e59b2f197de27475d14e9320e9775ec2ea7292f0b85e87d0b86063f0575b79f19023743c3e4309da9caa7b9ce53b29fdbfc9060f06691e9ebe5d391907629e059c578d4a624bcccc1d50c7040beb6356ba8dc515c55eca1fa1a83e41101a5fd7f613d1a14fb1da812afd4f84483c062036e155aefba1af2372db3ed52afcf78e7cf2cf37d825d9ba68969ce03bb64e074aea7f75bc5b9e458f38e264db35f93dc088086ba6975893a8abb5edfa4c98b5af50f07e83b317cbba3a22ea36a772a35ef1572001a156df6870b6fa7d262d00207cab887e19fffebc6cbbde31ad96b005a79e8512f3e831af2d330250155da83c7b40f551c71250ac57265cc8558ddfe64c50b70a27e7ead990226eb96ce0e36b32bd3f683afe0d72a746917cfcf5a8e122e1ea281bb43680a9491b831093c9fa05d1740091464787d25dfdf2b808eedb7303fd1a9f1423faa0132ca70cb924a2f151dc6a74edbb91837597d5b5ba5995ac645c0345ca49a7c0a08903c48c697629f849c37b9929300b160ffc47f64afd65f6e6ee103abc3af80e9c20e1a4bd717c96c864d3d829b575c4026afd40d8bc5a74e0ee4ba717286a16fc839107e96509535e4a8a4ecfafbd64719935efae326a225a1df1ab9b42b52e373c3c682218ccda0ed39ca8b84ffcb22883ea508286fc1c2f15171ebcfada3f30be74f544785129ae79935d301b30212d6dfda67385ab864d717815d996b2db79620128f35f772da1d061abc8989b457b0763c6a8b4564c679e8d184c9ec053046240d91469d4b7058245bef5c5ab943f5b4dd8eb08d510914e3e44715a77a42f8a3377faf1bef449b8e662f57cc486108cc34d39de3341dc8f97ade3ac7d952b112039a8ebb592e62f698c9375c6a72b6753b4987ec020b9ddb0508a1269a90523fa1afe9324f77ef5b9f459e1cf9cb9fe165166a17ba3c7eac2f40bd89cf3a1f34fc8961bd0b49264268050b3bfcdf3c8dc928e8922bb133ba687e48eb94ad9167baf6e9ba61ca7e98edafc2660796eb90fc8ee0fb87ecb001fc0146e8b4d713b45287045deb5ac1bdf015623869e2cd490714b60c82959aa056ccc6156e4e18b6b4589e0ec9b1a129aa9cbbd7f32407b2ea2237c149b6c9422479a39ca50053f2252992e2be8846c9dbe0a635234fd16c30f4c0d1818c8f0f004b75dc23b316b2fc89cad9b7c8503f90ef681503ed31b415c9779c3944865ec1b37006df2ecd5691b3174b4a73dfed5301573f354e2dc8874d31c54088bb3fc0e9bd1de1787d211d349a6514f9183404cd7ff1cfeb9e4658bd3a51eb0290491a50e2353ad65d9ee27a6fd60b1f1fe0872b8bd4616830610e19086477a1159a286492e3b9cd4415b43ea8e6658ddfd6038ec046fe74cbbeabeb1d29a9edb80c2f7a200e27bb882f220eda819d52177c423e76c50cb3d6bedb7f9884f8442f71e0fa56605a3afcc8b0864e7351454adbc82c3518383c71a677f038b3add91d93c914fe429678167c43ccee9fac5d649d3e0b487f6238895c753a9712db49107076aba0f2ec5fa6d850919a56601215b71e770597752248225d597557149c115b5e2b163d994f484de216c134ab10c23321fa9ee5414aab4542e6442ca8628ff3cd5b5adc67ed507978d92baadfb82c6860a6ee1af22830cb2a37eb476f987043a54e892b7429830b39fcab9e3c4791370a5e049c8d0cdb1c338cdcdfecd560705df8fbc2dfd2d74a73dd0acadaea7ee1d4908ccaa1a9062981dd9b80785b5ff205a3dd117b48e873d94be6491a28d83f439d02ef2ebe27b9dddcaf5c3bdca8d18c2420ffb7a068e56d275db4a50f634325a4329c060a6711176005e759a70b658cc49cf8c08143b7dc60604d071638a3f7a55c0076ae82e799cf8c2320a07672b8d2a74f2f5d636e4f708bcb639c0a19e106fa6a413f33e8232c1d7388bd036daa54e83e6b123a8e65deb88788e76fb47b6947355ca66a50cf1a19e1ce2a5cf885892e02ae3ada7a304e1832172731fdd96377ff3f0efe1a3e7b482d92bf623e9240db03a2820058adba6a66616e852fdaa92ba79038e98777ab63b51e7aadc95661160e69a17ac54021b9dca365596a0a43a8b23575129693ad7460eaa537c511b43037f422ddf63ccd6dfaaea350be9fa8889d23b3d51621c8456e203d5f098dff053a2244aeacd0e8b8df124d522ce88e5d80c4d8bb0acc23ee3ba34d2b7cd20d7dd23434f0fbd3a2d4d3b1b64c8721079d692df3647cd467b57d216187949c08ca91f3a92213a008d963b5c428d7703c3cb4aa14d5682c69145834ddf7b296a09e4793230487e23e9375c9d1f1311fbea1ce6c451a740f4f4627f79ca6c5433a8fa35ddd893799c55bcad24c975f2846a0222f45faf6bb8914a68118ef91c130ea041421863d375933c813a84f80c5c244d4264f74df0c2708b0cf4999a953b14a9d9224cbbb79247e4fefe076ce118b8caaa72e27bd3593dd672f07ed647fb85ae0b8c747f4b9caa205158d16be73ff379c6a154fb75ff54705b9e2bdea7f356ec4593937500c16950ef0fd680475454c7e6078caa744ec9cde1ae5a38d128cce03e04c43aa887978961b4dab0454dd4803453c51e5a348a8356cbec0fb6826a73fc4e0b0e88c9e1512fa458b96c5d5b6a25a566852f2434734f022d485d61b717fa428f9bd01d688bff78aca5bbbd9750185146a020a67d6f35226ddbd2402f67f805e92f251f6abffe77ade7862355a780be17593eafd2148f3f9499cc77b99e36115a1e1fef2e54459da9c0c710f1950ce39d58bb750835b165e8c5f5e9f85ed1a57c2baa37958ad8ce6bfd2e422f1211e9069f4950d643d570a8617e8e89072c8408fb9493f410009bff49f027352e096808e5f56a302d003ec913f0b3f2d5ef71de00618611537a7c6062cedfade2286a2478ebe02d78b7f4a0452496a5471d755917504481c04b97b3caf1250450e46dc1c17dc9ff17bd9a31323efb05de2b476ae06818ae27ce8ce561b92c2b4c7958a0a0e1888e05b23a20fdb786cb7770d74ed5dbc9b5e0c9df48e6073bc2a0399d45a6cb55d3683b95f2403c3050ba7facbcb347e9ef26c1c44abd78ba7695d682ff9b2d0673d77bd23f899ceeaf15173db27add2c270b3fda1fc2228d84eccf2b7eef03e4fcb3a6050232515c93c7b4e7e7b4b5c52c1a419dd604b7b87c2137065cb03e49316f9676315e00fddb54bbb0467a2f4557f39db6c7be1118d07642b54e15f0678d2078e9b1f31e0c66327672a74e7506daf515af1724cde0426b85ccfc04d3d4dcbafa425e8cf2d8f3ebc1a3b9202165fcf0183de204568f5bf289d3fb27476dd8c7c6b326941c7d4847d7027f41d5b6ac5c11c3eee17bc5ba44ca4f47ce9ddd9ef8974d16e18c3e27c91f20694cf384012a348b277a9467a4350b8973191cfae7b1b018f9e01dc4457292f4022a0963fb8fa29d3adfdd5c6a477b276d5a2622cc36ae5ac152432e539732cc9d8db3028c5c0faca6006c3851bbafd4a8aa993849387ea2f8e0496eadb0904546d55dea291553d1f64c85d7d48d9e08bdb8781abfbe76e1099cc3eca087806ac908d6381cfad5cc1b06d4ffe8344d284de45a36fb2810fa502fa23b75b629192eee809f4e61abbf33274d90258db1017ffe21019e37dee6bb4e54f617cfd3e701d27e2196586ee0cb60a788922bbed506e2ffeb6db5dcfba5db885e8e4f164352138f54d0f5ecf362ac0cd71381764e3740f6e80c3b6df3a738a4d77e7baefbdf0aa6154cd85cd92571cb22d4bb29a4affcf2dcd349b43df9a0fc3f0c739813e500781203f95b63d75810ffb9a7b47f8b4f7b8d18dc8e5fc99e4b4bb4669cdff8644c5374ec614ad956a340856be1e491fd94721bd5cd7aa8693a1f6d98b1cd57e3a38253c523f8315527c42c8a3c0bd6f73293e0e2cc3ed541602b25fd06921b972a5a2158a0323ee46ddebd9cd5c126917380aacbea0849ca8f4ab67d81ee0ea006f52c799370fe03fb799849c7d0cc2a1e1129878724b4aa36664692bb6c18556f4c69d093263ad74a64fd2ac8a64199c96edc3bc8328addb6cf9e6f6c75663fd29612e60255c0ad7aee0a16d626f3b40a3fc5d511bbeb0e2d075f4a4765d2f628f20b869a61a01181f39b38b04ada51b77dbffcadaebf3a25c1bb2887bb5075ecbe767bc970f1f160e8795f9a76e5b933fb56bd939aad6d054e64e26513bd5ad50b4696df6b70399a4ec13dc22218ced32fc5cc54122012e2ce7c969b9bc8fdbf691b1649fb63260765fa5f45e209e266a9a057adeb1fbf9f19b59b440d17f982680be8bc4224db62185c53cca956755fb7d5033283d5b349bca3dd095552a987924f8e7bc90e8ed5696fa28815b0b8ac914be894a25f80e4bccf8968d22b023c41e3ad9518ba96df50cf3ac2f79ca69fd4241012db506c39ee6848f2bc19401d87a9d8a92f829e8d40501ad895215ee540d2355305fb2863a1f0a3f8e9d3ff3dca362341ad558ad7eeed92ca5c2192575ddb73cf247b7aefd2941b46b9367d906f59afc8188190673ced227ee9e499aa17e6d8ebc69fcb625967541eb5c325921e0b9aba6f6609c159d57eee64e1e15ec5d01ba20337cb8ac97b87db4ce3a8e48a27e5d1af60a27c1342c07518211fc8f5dd439d07846ab8f13294959972aa37d2b983fa96ea448bf66817098ea2cdf7a70d05a8d994692a38eaf4b289580e02eed77cf575b183ddc00a1fd9e7db339515a23b7a48a25ff3c66b28d798f8a3b02ab8291687d7b34d481d828225c4191f4bdda53c74aba68c94cfbe43ab48c8063db66de1b6a69b4346e0f43b90005fb2982acae678a513659d74ea05a26123a843d377a4664a7e5ba189e9debe0cd3ad5610facc072d1934f9ece338b266d0f83bf18e6002b61570430c35317af1346f3a2a9423028e4c9046e0bd05b9f213f37ec87a27f095a6f2db94b9ca6476de175c231acb4ae9ebc17dfba5b596a22f1fe58c1ccec95535b20e834f821a8fda0a4bfdb2e2e8026ea280a397c84c5b17f6f41be367d405c37e412ebcd2b8b3341e856c2c9aeebced25503f77d1cd7fefefa83f4e7003322213a3cefe748b434213f87149ad155e64521c5ff12c6fb7aa6505017a8ea02549803f4cb67a1a036f22c9abd996e6c5ccce47fe42e22521c028af9de8952cae987183c07a2e2f9a38447b9596d077a413b330eaf283d0647d10f94bc4cd09bab053c9aadf1234b29a567fa091b1d5ccf4ae64c4cb32b8648c91919f6c3f7ab529c3412866a380e586d9fccb625ff0117f0e94d055c4c559f288ad823f57ac89efb67aae1a01be0378201d0ca65afa156bde0ffef710fcd337d895c9cd99829a3771ad2b3bcdf6f6f6af990febef3242f30d0569f6b0f6f1f1dc6d2317b7e701d3fc605cf2c8002ef2f12f6de99a970847085521591bff44f040b22b3764394cd46240d5dd506eb4350cd6a8d4634d95773b5486f23f9b04b3b90c51153faa7775817307d6ad73481251e47f7257d8ec0de6a86bb2ae1789d0db563c07c8dd02929a25fd7a08c05e5c96131ff46da04572d11fb29f69e7e43098013ccda98476f57c24c9c311a5f1e3ec92c9de387ed44b25545e58f2fe61a7b991378293db63ac8b919b187484d391a6bcd01dce06be1ce043acdd4e3538ca77a2fb3d70b918783cf8617702e6ac063e83860d1a46a6b3b9d1dc46e37b1cd362010165c29d88e8605d74dcd14a12eb143fd40c015da18e911a73427202ff30880ea78b236997f62df9a84fb2f8879440dd4c2c6177b62e146230b0c54e5265335c5a55626c0f5e51b7ea3f51d4ed4541f9eecd5ecd9d4f1cc1c52e8401e8dc082c8d63f3b056ae7df24420e548d2f0df8eb46a4df533048001bb7b9d2f0ca098ea18bf4ab1ad858c29268f59b2672893e85a862236dfbc448b841513196cebdc406982f43a23e17344adb786f7dbfb0b914de4363f5f2896766a0edeed6fb3a46fd6d270976d2a58750c8f35868c64e931366371daa679b5751215759d0b22fa3be6e57a1c7350facd8d9351af1a7f2ee984e5ed7027d3bbea7720d9f38448a5fa7fcf6a44a18602bec03523a8fa27607a47be24aa5109e5be3565322ca8a3f2be26df808d262a266b49f950e8bf58b8d47c739466c5c8443b1b443564bb0ab08edd1ae9850566fd3ee29ebc5155bef4926ac34111057020aed3ea6b5d14256471c235145b6b6a3d2e274949e40a9ea92ec5391c3acbefb3e0d09cb01c105ec0bcd524aa6c3e1c4858764e4d2bfe11c4a37ea279c889547d1521d24e1f4eb98c82ba89e0510c73ee7e0c9bba4744c176ec0332efa41613b6519088e6ebc4be1c191d1e9f9695cf0c74625955e29232641c91ae4eaf8d8e1c570d89adaaf008748fb12295ea9b7301fdcd066dceebdfa5dd8be2d93b144c59273c935b8f8e0d403c9e459eca7080c22baa32b5421a8260518202114316e287cf6d081e3a6edca888275adb3769a5d21f24c535be725edbc348e85530f09a7ca70e89aa1d153b2589b46b62625e25cc13663ed60f230179dfd9965debae9d19bcb39442ea132aecbbfef09f0e51dc282e0b21ccb3122939e79fd48464dacb96ebc4efd8482619e1806d4942feff29164ccd2865b47dcf69cf9476d3f7f9d292316dc129ddea595f18ab51f3a706b6b9e6cb5d02b98343a1ec981c15f3585ef53f97ee1b503b250906f3d12371849d0b492da82e85bef6470e837389b87f8c76b99f2e626de2dc055f9b05ae3c8f80fe42f3b36b8ee3b74936411a7fe52956252660575d721c6f52ad1de7fa6d96b01c6951dce281aff88bae3aabb148229eb4f899a9e9e15052bf0436c61ee563326c2c0076bc5b9a202affc4c97231e32e0973e9338a40026ec2d33144a6ee8d778c1397bb62979cd0867a92afc68b9a861ffefc032491a84e150facfd872e3a7a2fa4111281e639ecf36673e5632e422edb8f4dfb8e0b507ef9326fa1df46752e8e3ccbec7f3b4a480bbf2392ef557c4173dff9f5d537c9c0116fefec40dbdc5f3c7360c3b51b918ffcf15b2f516aca3e36989b1fde4761866552f20dcf8645940e801140e3b7606499a6620e3dca698b5a00e4d6afe98fe203039080ba1b0e88849ca459265568806f159f0e7f79126694a3038ee445cd31cdb882cc818c95f04554aeadfd0c16cbb575f542e7e8e5f46668c44dc6900017f47938d47f4b67790d82e4c80929d93bfbbd8355b6a45e027016e361bf965ed103ba3ffa2376353c3e6f0e9dbb2a9ed9bec10926eacbb93c617ffc5071c027d0765ba7082d8f8c2acb3922db8969d46901d03c13e1f1012263164c93eefbdb65009dad55c1c4d6f30bbc286f301f62ab3ad7270480005ffec6b90f7ce2f58b1344f8ea66b37708b4d34b0636c183e5c4012fa1a5ea2b35787ed1ad0a1db8b95f284195c2d95a389c3f45bf41b85364f0ac77e113743f2ab30c79957154802e893a0ce254b6bec2058f5c69d069eea14c48726e7a54ba8bb37dc679e3ebbf16279428ba3c71abe3104be0618c50db97a533e337b1ddcd39e9dc8c0c9a5b8098bc64a669dda3b3e915b54091d5e15ea05ded6b05df0a57c540ef08be6283cb3942953dfeea630f3518e9819992dc313cb7de279bc040de9bbfa00a48072bf77c57fc7b6fb8f171a5e5a0ac5fa34b690816720618f7912334765c800c4a08d9e084f73fade84d4ea15a5ef3867cd4abe7f040453a45d316ea4ae97c708d1395760fd6e69bd8290b1cb946b154b494434e420127fda9978cfb658a4afe4034b04959224954dbf63ee02bafaca4879784ee248e203be4bf8709a157ad582cd1accfcb54b9b7b38ec2614e342694178306f83d7c5acb4ae93e7332116d2c890ccfe4536c1815d90fad6239cc1a0390c48295186b707c2b673153448f1d6681b92a59cb40f9842fb242bf198a3970756e9a2dcbea44dc31c1ef7b32e318d4c103287ee13de33a1216121854c99f75fede4fe5437cf1aeca2d7632c29baee03c8c274a06a9df708224357548078f9d850e35f1f1bfd4b1545de89d2fd4eb5e24e2a042ed441d3692d0a7d6f707b7e9e91d2b62d0167685762fcf5807fdb21467c592ed72506364b4fbe3d913cadc325071a3901107d62c4f7b94023d3166088541d9265b837f74c9dbbf380e39547caffdc037fb42cb60e67c1fea0c559e4cb5c534dd94910ba3d1b566082a53aa8387f3a31081d071a02b37ceb351cfba4a0ea0fcb95dea88577d95a00ad52a3c940c1711bcb327ec70e69e0b3c104a0a6bf5e75a3f1ff89bbe4bf7bb069cb6e70d1b322806b2d0e8b938258ce0716267bafd7a28412ebda3fa5d69fccbec6cdd382115d6b78e4b21d4f3caaeb54d218392c5e43ef38269f2db3a09a763b9a4f7af042e37a1b68bc9073a92238fbf3b5380d00054ea9c41719faf53af2893426034251f1f0706fbd99960a95d5e10219eff2d4ab203a83dc03ae86fe1213538e55a7982784083571e3b9bdb8c4999fa8926626422a75bb3491d692b9258192eca296c751023e5c96625272a81854236fb896f8717f6c8ce9edaec66b9bc7173ce63188de729fdeaccc65a0a91801e4c7bd5e713d10d3cedf49366334d635e323164844d19f968850dd8fdee0b11fd7c4991c6b1299436ed077f7447ebe70fdc0c8d95fc50a4b109788c94eb87e692994d28fcc15c8e7697501ee582ad7f5fc4ccb950ec15b3061baef75f9c865331619856b450e894f068e11fff62da872a33888b750056ed493c76775180dc2e43ab3c82cbc846ba65e48774d7e8668e0e969a966c03786c4ed77a7cb172f652abdd29672ed3f7b955492afdc0cb352a26cafbe743d1f02b155ad6bd30291ce0f18bcc7d53e4cd1c3a60f20c3882573a172520ff7bc0e8584988d4f109d7c66a48cfd8a8c5dff5c52a209e2205beaa3d4d22c4e14e86baf650b8780ab1dc996cd54ba8cdcc89cfb72aeb6f28caf94378533f764ad2b8236d172fa351c3dbd3d2415590dec3ce1b3e433b96f981dedcb9b1db0ad3978f5e840a6546aaa98823a0d22a594c545661d014e9500852b3ae666f09bc3a4a679fd6d8746c51af4628d1f6197eb87fbacc6fe9f33f76cfe8f470086005454a30a0e2d5f5147f2ca1b78d5a20e931d168f22145169fba076e101c06d109c4edd4a7230f6641fcd79ac3430803bd3f1c9b319b3127d5f2a603abb1f3d6b87ee84f717e78e567691679e93e9f13ba20c352676f0774f4419fdaa1b35bb903869a91970f3b01d0e39b0b92a083ed38884b7ef9ca3483344164ce02958c626eb3f924567e47b1c899924368a73040b12e7095730caaab4ee46e7c9473e78cf9be65680a6408c51e7846f4e4a495eb96c86158b172b5b66f8241b72f0e928c6c2a59547bd701ee46fc371ddd78ada2bbbf83b0b7e5e25528160fdf07406473d7d45df5a75216c2d87348a21064042b8bb6b400b4c4633133362eac1d2189df281053a2662349f57319d0b836419d47e1ab0fac833c720af98960769758b7430968b0f345b54564de30048689ebce46d31516c562ca3d8954acf64157a93a9e7574d1f6289791d61779491e1dda8673c9b8afd25fd3d44978cbf090dc93eea7579cb1f5e4ac2a14f2efd2fd8bf908e3fa0857a51241070ebf1efe756b2c54c84efb8484183a8ea38bbca55852855d66c4ca62602d8e740dc137c5674ea4e8130bef479f6102ba6c70f9d6c2bf45dbff52f53ce209615bf35436d8a5c3f0bea9260e0c7758b53dfbdda000018c9bc7b8ea41ca9363beb780792b5654fbf83ecb13b3a0a7835cdb3b326cd44c8cef3ead83ef62ae4fac71d83962b5c51ae208a13e89b69e2fecada41d140758570dfde6d027e1109d97be77f0a2266556d192f0c95c50ffbc2972952ac38e55d963b271a64a2fd7aaa7e9c79040b3acea28518d25e64ea3b7da9709f02cc9c37211ce0b62193820b014985c76a1b2bbf0efe36b84f6780b724531e823c36628aa88f72cb40ce951d2b1080a7eb71b1291ef99bc4e6f63250299bd79823e0542a63fb9b9a019b401f6ba06e87d647170b0ee711a6e6faa3a22de6e12a6cc109d034892bf9c230059c5f16feb45b0b21adce9f70a37b35039c32a421e663b282a63677c26cc2b7c026562826589cd72e2266c09e8f2838ad6163ca0ac3feb29c7554aa7f97992ebe496abc4280370266f177a882c21303096a76022c0d37a7f9e5d214078e5aee20bca45aaecee4e6734d592e521789c9f84d500be0b44c3228876e6548222cfa749948b6597cd284a002a92893010f3cc4333061f8385602760ca5011d1526d8998c701d8e078cfa8b268d23872558184c4ce802fa618307f5116b4a08daeb9a1238b6df3058acf098adaf983eeb9ca51d3df78b36835be83d5c668b9c96f0246b1adc0a370a62920795b207bc0a8536af459f3dd4b2998c44474d8be8c7c297263c999a7257f6365747d324c89308f77039fdb990fafd43b199b4def733c13cad7574bbf693512503fb915a110c9118b39dc986e5bb94bb0451c828a3526b5bc8ebaed4994489c4531941092221996fe1cd89e626e3402c80c4be8556cadfdd1b78bbfb2cef6772757576e3c449b719ee0afb8586a04bde99f48ea7652407fe2459613220c6b49a17f9a91145762fb2ddf163ef118dfb8901c160b409c411ad0e6d66ce2e81a359a674d50f9281afe2ac5311ced17f31c2b5ebc242b586744950a8c3541b29198a9c8b8b49e277585185126fcd8e935ddc72a47ff4ab16e6cec431877da668f4f2647b93d335e3ebb1411ce287fe552c6cca1360116a5d4a778c40b816307fe1c651dc2fcddb466db1a68db3b4194b0423c4f2d840bb4a301795bf0ed8b9895e027cd8e27e64b4f94505cea281a236948a213c221948e507e6ecd4103c856a0d39ea9a39caa02aa354416eccc7828cf75d865d854bf56d6c75f5fb7cab75fe41646336878eb4262ac7b8a62d0b031bb43b8521484e0bd8fd1ba227bf72e00ca12ec26e65713e1011be87bac8a6f63dfbcd291e9164b76eba3d22ffc783ade3ab91b9549049c1bb05c5eccee830c15068aa24105989ba850b27c4b82996177d9946662fe170bd4ba522814d158a52fda1042f43e0fde4bcf561f7ed55894cf7381d0d4662cbb2c97267a22abe241d86c7262eb19cebf3678c6e375447d6fa6d43da211c5ffc1b980d1f4ae7b0c79662e7c249589918a67f54b7fab63e240f4b16a3c00915abb6c587dedde1e8ae7ec286329776ea0270be87311413ca9cd3ac32758117bef822713500e12b2e9b52fab57e894d1ea8c6fd81dc18841bfe90af8c92075f6b4bf11bcfc1952bbc4f80f185001a8e057e0f13834f98b915f04d10c2024aa34516324e67cdf4d42891946b5d8aebf025b91d904742a3630f6200e753ef868b6353fc1fa4b133cfd0a4d280a9e44125d55cc7df0e08945e1f49d50d34e3d641626d8f4f6ba3d1c233b2c088d01733199101227f3b2074f9c3353f57e7d1a662dcda9b682fa9cd3cde99620fb5c124840d30756187d46a8b6f9b1ae99bddffb31c6762b857650d59068c841909d9a798727fb1871d856b53a49f4f65bff78fdfc799bb2983ad44a4eea62eea4d7e0989eaa4548822465d1269f51a2560b5f1ac2bc60308245eb6b4454c581a7865f2b6b7721d8dffabbe44ee911bc63c8af89ce43f2173d3878e5cb8abafaaa160a696c963ed7909b3c1dd0e54a0cee92ea94b640eddcdcc6e49bbb7e242d780e4776cbaff0a1d9db469f750c5e63fdbb66f5f5db129d9abc6c0ad9f3ac2475b728a0ab44a0c3e80315821eac774a0717b992894fe3f59cdd5297288a97f0a86f1b69544a80a3f6a0915e8b6ceb3498b698a387309dec248f488b3b7a6f5393a900e96d07aab358e6927c6ea6ba9b3a0c439d7678f7c7f34fb2a5fc7971a9f5de9e6abe1a46ccda78c5a765d9680c23f4c8d20838f81ad25b0ee1a73bfc4aaec563284d7c0143e1b043be7a8bc514bd316004f5bc8a42ef08d407640faf8c5a179fdbe9992af20c0d409af68716537cbdf79d416bfcbd7bcc7bd542edb9d0a6dbdac60f610be5c2bdab53dd09d3f8fb38411ed6aca6a53d1c8a6da0ab8c7bc80d516103495b0b01c170cbf280a55db00f78ef0e23b12a9a676213a0cd0b3a24a007ddc9c7ee29e4976d0d6262a5f822ed544d78ca0b891b955112f7c36ffe18b7ae4aca6ae27f159e90d7bf173320c0ee62afffdfeee3bba2f56164627f85a71ef03bfe240369fef263c32d21161004730d634a7f6a16d6e65790287aba39e9158d58290be9c69cb8791d59da6493dc5840cbd3b709a9d3a7c3f0ae613aa992dd9cbbc279a40485dd07398bc7243e79cd50b72ec47c6e485daec8354b080546749bb4bdc48470d3d8f4b96a1557d43d2cf29457b88f953941edd4447e5aa5cac0fe696e0cf9c24652809acd6ec255c213c41c33e9f0e1e7157d254c039115e1e7ca6c951c5ba8f1e417e66214f34c1aa4618c4946d7c26c66002c31d0d07b24b4574eb069d4d96ff54f12b9fa61d86692a5c72fc21cbf19948e60048dbbc2566b52257ff6a6088818122c2f77bbedd86d01f6f0b0088d166e572b73df6e4e915240ec4d38923f1231fa59f44d8ab8523cf410aee286b9b9d4d012ea5be65b595768fbede8d09141c9fe688491b10c4f985fed0ed16f8fdd5385218b15abe89b692361159f4501f40dbd918e6fb99887bdd296c3ff2dae4919f6f0d93b09893172c1b4903ef5dbf10300febaeef28baa8a7b0c1d5c8268945303e6d837567778598956f608da815115f6f2f35f0d66ac2430c2777bcae9d0bb86206a78249304ebe08ee9bc70ccbcedbcc60a3664f22a1e2d7bb027d789e5683e31e74549b24ac1540f3d3714b81f959dba8b9d4d0547cfab9bae7ffc821cb2891b71fbc2a59b882494d509c234ea01fc3046771fb4cc72b22467629f38b8dca7d756c6cb3b75aa3ca393b6684fbd4b23e7a2db1058e841dac20d16c1a1f893704320e596fac8b46b2c0287e9b9c2bb6e988b852e39d347434e6043d092eba60714b43758f447141c7471632782fc38f54934e99de6317216fd102842711e0789b1bea77f45c8e89396104ff1ebb8b86b72061984dafd9f4e5d4faafee0edd0985f6c20915709c1dad06c1cd342ba27028304107407e3c048371ec1f6c451479d9ba671638ab3ff762762ca8ecd789e52817c3d6af0ebf2b38636cee3858f5354870d355c8a2f1cc90ad4ee949e278fb1482e7603f0f66ff0519f46cc4aac2d6c0af22a3bbcea4c6b91ecb79bd9358b6c7909d3a330c176f3ede0f1c8f5b97923d50dc9371e506b9b46a07ddaa79e7634ad3f680678e339e439990ee8f2cea975c79fbde6481db834d360079feb79bcd201cf159c3c5f01c0453b7e83e9e70436cd536cea570caab798d3fcae8bde74d74a3c5f6d10435f95a86872f0ccecf826826bf8b3ccaebac684e1c173e78f0df2de18d8d81199744ac264c48e0bddd23a7d9e5a17579135a8443b6f55cfef46bdba13dde0ada7245dafd1114c3c3d97d0a5b9f8905eaeb4aa7ea53956671247095e401e57bce36a886cfbb68e9469f8356a28a1cdb45d5824cc2ac4d15a72961bfa9f735314b43a926bd1956824bc75869a86e70eba50a91385819ef5b569a3d62fb3661488de25feb226a6e313547c9a0dc4d157e2bb61d9aead422459cd81ae2fc038f5bc4cd1cdaaa3c9f799167b9c6126cb48df576be0d9454899dc32976b60711ec5622a663119cda7c793166b7b1c53ef794fa8470b73de1b912ca1fb96b91ae4bf3ca967880059d95900a51005c4e5d28a7e5692eb8d60044b6c88898cd48af89a9a04b7a72754361ff766dd4e6f05cb2469938e4d50f836176efc5cd1e7494901168a0831209da57a4905520e78cc0c7f727239905eef9c5a398aaa1188ba990f7a02d05413f03d67288e244e6c09979232e744ac5789b2c39074f4df39eca64eee56fc6dbaf9cf50f9d78725752b98e7dc00ad860fafa7847fe66d222906d95db44a96b183b68e57f800083a95c6a138940ae4bbcd1091c85fce611a08b250ccf2549ad44a15fa6092cb59d4057d61516604aa6cc9195460d6514c8dfe6f3a75ac1e1a40a41a6601e52ecf346fb545448ab9fbc88ee928a2d1daa2dab6b119dd3de94c77304e25b8678477d9785ec29b76c2df04e5daa977ae26cb96a9ddaea74d0d5408100e060c6dbb86617baa9321cc3369f6cc0de329b88a3a020fff413d41feae3fa3ca6b950c9a98b2b34b894c26681511bc0aed708abd9efc51ac0492fa145f97dcab76568f1f4e28a1f9850cc8089b863ba697ff945c9b864316f828386d21b5982a94898e5f144c556b6faad28ff38400555f6e0ec3160b6fceac60d4beafcbb70c596e0564a0021e286f0b7360a5ab1261cc4db0576284e1e9d8fb211df5987fd16c630a79ffb04d22530301c51496cfc5ee4bd107b074af5065416740ec6523a97d2874325736fe64972df956e50beba695867f3ae04947747f93815d4d2295d040059b27b6916149c18e795c66340408e4cf7e2e7c998cdab9d4b2bbe84d8bf6ea6eac8fc4f2cc7a2deebed0218b934137020c865bc464d08c63d260d2b62811fb2a027e4cec925ed8a9c075fbd4fd03f5e4c18797957c347efa2fbeba1f08016073689ac2da3016cfdaa67f655cef55bf5221f9fc02141f631430fbc68f281be126fa0a6137c51a2450185c3a32b5106de866569f571e2a5cc0fc42968d4d1bef6a208509ab621b6c6a700d9e1a7068695a888072b57fc0d4a6ffefa8e5b6559752089badfc12294fd90275e69f64aae4e795f1bf7f301c4c20bf76c0ea3ee8a4dbb225520a78c1bea43461fc34e533172404c75800ed1af9207d6fd281bf7e885558ab6ac310b71630b2daace6a15a3a11fcf983755daa27b5b7010c7d1f43d65dabc49da30dd999d89d282a72d958bbf3a322604eebeff54abae69767ee0fc856f256c872e49630adf5f422686591fcc8018eee8432184b8cca377e6534ccb8571a3fd5e0022f4edcd9c6d8f7a7bf99697a89a83e38346009dc11c16358d4dcfeebff590fd030eb5c21fd765abc9af0c016a5671db0910ecd2d40dbc527a03d44581cd3c7253722753caa872e57c28f958ec65b527f78cc3a21e5d06e63c8cb39c9009deab2cd480f63093971a10044f0784be04404132363a9aad82b4001c632b9b65a0015b8ff4ec573ec12c64fe8d1144a3bda704c29b53bf5e2864cdb2d59e90698853f677fef8497500117e3c27bc9b5757f97ac7efdaf78e0cdf9b69b403a0d626f705c8aaefb4317abcbd1011642dea00777115f2bf47669f305b6004c867d4c0f86fe1d925b05e3fe21f0639b572dfb6dd724fafb04d0d9f93269e6daaf559b930761061a39c8113596b5405728276d926326c5f39a126379e79f088c50f88ea8077bc48908c86fb0dc9b3a1d3bd59663ad2d20226b6061327dbff9880b19ecd9e1b343de9724eee5fc313b38035d070ff1eabc4031ec8d59a671fb7a5ac13deec225b2f03b5331214efe85d2bdc99a3c7f9537ade23cdd5a9c455a5bdab74bd9fc288f5463f72af52ef6b97bd8e6c2de16536c8ca0e2ae78323f34835793a49b1cf1b396c6bc98af68ad44886a1ebfc1f817e0c7c8f065dc794908db958551e816cd75dda76a13802821afdd1505862d00cdd2a0679d99dcda72e4093aac4f98c75fdc3faf233e16711c075c57d964174204b7ae49af40a57de2f52239b044790396222e6bbba7e451428d42fcfa5505f8e1a952b91ca08f620293c467676e167b6201a440cac694d64540a722c09ee6e5bb122caf310ac19a23f0b8477762e1401b9fb2f17182cc61198a843a49dca2c353b9dd26ffc13e23200e32a9a0a557c3ba45aa14ec9bbe6a1a30523a79b608bce9dadabec0e5094ef4073569b5ebb0813627b50ae94f2a5d2b62b7a7bc8889e7d481e3a4be086563fe923f92e3884e145203e9314d45315a414ed508666d8f295327777a942f3b590419dcc2c4719e9f91fa5546859f7e0c5239f32ee5327d1d784fd5db2ce2af2a9f996227da1072c7b6febb87afa9345d318e72e235c0062d88bd9a85966a9538700b6b7be00c1c3bf55fec1f86dbebdaa45508fce6897d5ad529bf43412e6a10bdade7ba40eb68314759239fbd8e89c2664833bd9d7e3104ec86dda6eaa154672afa9ceacc1e0d7d0c86a3f744d28145185f0b4d19e50f88bc2dedd5245c5c4852e5bab084dabab28678a43364660c3ec9e6be38262bf518e5438f9d0267e53953b00da7b361c1c717bbedd157f64e5a8b4f553ca868645d8e18ed64a529fcd2cc1fdf51454bea827531cfe7ba1f13d1bee6b5b11aad381d1296ba403d9d719380543a452612a6ff836047bb502d83b14596a5d8d1463439466bd341d54e3691c8b68702c39b83c1c81d9569bd08b7d516582be06619b2bb4aadb5d2f4e6203222e1e7feaa3d69ad588eec349ec382d529215e25423c70f372b66ca74fa3d0ca9012cdbba963ed487c5f841f64477a234c1ac07c09b9a6757f27ec7b85ba360b52760d78eba4906905a590676131582218144810643d4c3041f470ffecd3cc9a780ba1f62d202a7e1189bb3bdbc9b662a091bf2b95faf8533b0ee543c5322ef1b489e65ed7919be6c232851e14bc948b4b13751ed99dc7c5752f6a1ea73ae2dbb2ecfa644f237d12dc657a908622514180249e19d812aa52335a10f50fd7d97eacd947811483bd9ad7070f6363d49f5194eb537d8ccd71fe206d634c662e23f1cf216b3166f12b5324ec8f5f007278ce3c92b8fdcf966116cc7d82baa79b007b1b38832b0b5a32462e73822d452b2eb8693125a4faa4400ca66ece55b857b604a6a1d9e1f73fd5be2d9e9adcabf53391d22c86fbb030e38794198609f170476ae6b2334ad05f7a848775c412d5518625eff8e0121dea07ce5e3600c027360522c2326cc6ba2a661cc1ef7c806f3771d3468fcf6796878d2f6a6ec39ea12567697cd132116990844016ce56c0de8ef75962e89108755a1489139dc913d8cb4c79b49665166e4898ba8707e7334c093ba341fe2ba859bcffda98a1517eb9b278371136366a744d2799d6f55755b15b65fcb11ac53baabe52099caf335d45f92337c51f65d395e76cb89d4cbe7f7f6f4cdede3b3db2d654663c592fc4e44266d6935d4b96aeb984ed77d2ee0739d131e3e775296315443949028e364ee9bb4c112caf50fc05d601412839ca41e6f788bfcde05a94243889b1e9dcd791060091079b60715eb7f64d6ca5073049bd45fd081c2146bb4607a83a752d38d6eb3c63de5ebd46606ba5ac808c997771ce10dedaef33f847d1e60f6b9a25ad2a60a4c21701762b66a51199946cbab29f82eb962009722da9e5a0f27007144285a9064f3a8814826cc56065a02c4af3d496ca9a44f8cfbaca60be849fe343ec633976b72ae6386cddd7e7cabe4f8bddc4c7d9876714013b4248c00d04ba6a54f44a527e8c8b72f5edef69b07c3b310746265b4177bbdf626749b6978c3237e65a4288e2e7143895ff18d8ef15ea1bf6f16b5c9e0f214d17a34530448b9aa5897f6797483f354d1e77b0c2b98d5a1dcc53ae4fc02f4863203999e3dff9480b7d72bdc2680d934aa3b3a9f615c934c9cf78f7bf9bd6ac88f647ec104635973fa95e58f17442248f985538416738da697ac1af7584c5a56c2fa197a0b3cca2d7c2d0d14fc05048f404968e60916029b6804241e95d9f08318464139d1e5cf2d90f9739d02f364fb575bd7af23e70e74185b6ce6c5ea399ab162ba09b75a3e80766a77d92f58b83fde1cbd2953de278ecb788a81fb7cdc6eb045f2b7d183a8a14f68dc12cb96909324d3f1b4c0d49df3f36683e189d8a854b8f08a6fc587dd8c9f627ba6f10e8e5769fbe0138fe9a119522296e173753c21523780d02140255b5af749f394039d070111d78335ec6b4fa8118657a7d94fefff2d36ecfa72749bf0e74c2178025b3f03f768888cd0f95fd1d69942e4875174b8296765c956a19e4bce27213bd5eeb5287b59a29a2cbc889ebb1315ff767b988cb7753e21390bda3c247863d34ff6df4e6e6b16bef1a2d075bdd705ddab146d8d2cab5c3252474700c977e73914b9cecb22d7e3fe89fd20cc8641c74f7c9019f1724e53c2868213ca2fc06319c797d5ec3ae1cc7606c72acc653b32a57016edde84327d6e5cebdc87903bbb8d7017974c01b8bbfe59d81f60163e3a084326357c2af45c1b6cf8be514b4421226f72623689f860b79e18d547349ed9acec3ff34e74c9bc755be82a32eff3546642870177850babb6c88425fff2cd3643eacfb7abb3315ea41cf22ed15d46ffb668ecc1bc532ba3540eb448affe12710c61a1f9f1cb192fe353afa32aa2e09eed6c97d942594b26911f752e7f8190a9a996ca07fb75f9ed51772783fdb481f489702eb3cbfb04bc4cfa20176f6599248aa2d4a7b8766f0a7911f4e85cbc6303ee08b7f4e0c31ee8e7d804b7e3a2d18b6311a05889f53d84d91f6823c5eeac3af96ebbf71341e2eb2b411bf89493b5be7e3733431036fe09800f129b718c5d7306e17e329f57b6010d3fde4d5a5f80a57c9624f51f7c8f72e6baa917efc682e6e5b34b65dc13a74ec74d8ef17bda0ba8f639ad5d4c5552d7847ad5c550e36131c5c32c85f5d907e30d967649e2c229c3856b33c90ce8031ae9dc0b50d17614d91a18b3574b380ef3d866bdb28681b0a368b9d564f4a92e2ba2fa778053efdfa957db353162190cfcc20708fd7cdd38a4ec5a1da9264d0e8057d2eca58635031459a0e34724daba98996ac531477cd695ba8f4e1257fa4269ad6b9abfef12bbe548cc280f1bdc10b8030c8164c5665283fc1915a91ae9ce705b77a9fc161ed33df228821f71c5d8cdb671efce1b91ed2f1de567318a65d996a39f8d7a4950fad1dcae20071c58cef62d44d7a1e4d58c0c15a10a796cb1e15e67fe2b1e599f591c041b4a26e9d60a7bd751167912a7b9af22bb52d2f10e4e67872eed6a60ee41f9debb54441ec24ea6853cbc97154e46d6df746046e2596cdb778e177c84c2070daca03dcbf581915a355c8e5eea1f132e20a757e1903dac9f81988cd3761c143e04e4f08c1a0988d29d5ef07539976a7ca2ebb7f16fe9a47135587160c1644d0c35fe83bb40258195eccbb9c9dec48a4fffafc8c5ab0473d1ab8891d0b05ed1131e37bf1d005e5b1469e4024275d3f9ec91f0f5ea920cd2b2ac97531ab9baded0adb6f2bf866ae695c91ff09b3786e54e5f9a87f1c56f439ae9d86822d7cd5c99c011bb3d117cd10fe0a9f6e6b1c841a4bb9e76a480266ce535e4a11d6a7b57c0878410734758efa43d6cf9e1122677c040543b8564b6b3881fbf02708a7ef586148f1906fde081df7fda04e9ec0a17c457b461f2e57ba2c1748dd226ec9bc315f705fb5f772f86b53fdf3b84b32101cc66ea88154abb57e122d75a881cbda29bbd7537f3fe3ec5256a4b000113043bd9a721563e254230c4bfed553a1de6c4bf83269d049975235f35f9e10ee3fc5e1d19b219bebf9fa03443a8f735e4b67c728ce4f26a5c758c28ccc326a987e0954c7d1dc93fe6d70b07edb2d1fc537125b9c40d765a8d7fd620ffc3cb45f29d34fefb31f07f80ad440c425783b5704d81980c4010e098e657326bb290e0339ddffb8e07a65479ce2f93385c31955ed5e0e5b658175981f4b73a84c7a0bc11a76c6fbeaaa65f25ae09e3a447e7cf3279778ba4f58909efae385ea3dad08c7f36f7df7f196a7760d9199ec269cd9eb66c19f27f7b238982d54c33c4183a19807c0e1b6790cea56abddd3268cbe0c14cb3233bf56b5ec7278f6d686d4f19534b3ee93203a25726adacb46e53151f0bc57c902c5881cdd77fcce9ba55e3cd2914071333e256c47a1bc09154cf7a8f88616a5abfac8721d215dcfc1952b7a9e42cc17cd5ec575c18cf36ec476da60176bf8b5727863c6bf3f6ddac91e6793ed2923a834159bf5e7fcb53a74f39eb485338855aa84b2dc3b87bc329950c247df5c06cdea1087d4ad97e79682fed1c5e90a879f5daf2631f71b29427d6752ecb8807519ad9b0f1f724fa0b266dc8c6da646dc0232b9db7d9b4f0750e6a16ed8c92d9b7efd3b0254978db3b9f35048363518ce4347d606587b92b6e942444fa0984ba5742d7ba7a4cd5ec0d315d858f2b46832088b78082bd7a887620dfb1870e671cd876df5ecb0c271eaa11b297fe6d5d1399913ac8f8d6f4b74de1f1044cc228c3cf63cd332de8e47763e4dafe722925e790888876f16c00a06dece8ff5c6b090c39c0140cbfe67b08c25fd7b111095b4da98870d97b957f8f059f4ceea91f60f10e29a95d55eb9175cb0c7ef2496eaec5a8ac7f634fab58a6b0323cfd5b1298c4073a34104e8bb032cc5cf445240282f2ca1fe021bd89f67d12efbc89f7a3b8f437037e251db76e70c8748db5b455aa9e16825c4239b23595a3eee1f5d640117a9a3e44bf5b0d6d7d48cf68c1ea179268cd8788875106582f7adff319317689e3b54056a92230acdd4f77c4032bc4448dd6afb6b3228a448d70283adea454f4cbffc0cc16c5f68e0270f6620aad84d4d142419a419272bdc3e6e4c7059cf388ba1b3c65528c52b17fa14128a0b7c71f811be2cfa9b933815c6911674ede684cd42bf71480792ed49e2c1c47dbb5b5ce5325c12b843c47871de75c14311f5f32f414be107af83e7602b5e701630ca5065f9de4ea0bde14741cc74acab38dc3e3f8243b14ac2e9c25a1eee401f902ea54928d4684259aefaf358082feb2a7b731c32980b009fc542f3c2c9b314d08d9a2ad6a61ab2229e2013f2a7cbd7659ce7ea794e1e312e39f3a114b60529f4b8e997972988f5c733e082d5e1fb87c350fdcae139c679be4869bb059d4f3f18ac1f244125e82bd7e733fd190532f853a7294ffc2bb0a85fa6854cc38f75ac1c971bea1f2998e6be962849a6e0727ef209ee08c78b14404ec6cf7b41b4fde38bc66c50f0f5205541ffc78c4893f1075daff904c636a26600a0ba8cdc9ddbb12e7b4a2ca601027f5a30e2f21fc6cb3aff4513b5b462e4aabe740862b854dd5b5a5f680261c93934ff3469f2c453f0f6d69f7336ad27f8b9d5d8a1891edd696b6e16a38c02c98a54ab84d7e6baf8e9dee832ab722148714af7fd6aa55f974b2556359607f7c218aaeff10a80586d396afe6289f073fc2101cdddf74d4a3a5d94bc4939bd104cfb9f2f4629fa90d9da9ea419e3ba2a183fd1efcf895f96e736e9e195b028ce9734970b6138330408990fa4d1222b271f7a3a26bd8b6aa453f916f7069b5d9c013cc66fefbe6c4b594a4b0fdd9b5bcddf6157a7e97659bdc8401ecb516dc1566e5682716defa1abb82f5793adf9086fb7c57fc199f22a0316cde11f19352176fa77ccc9945223a17b77cffed427a3684e73c6dfe48e672a672d61d381c191878a51f8b1599b09fec6093b090460dc1f58328042b494ebfbcd839e93e2ee4eef4811aad37e104fdf0cf0fdd1103a7e323ae862f4d5482f79f165f47975362d7ef46d12aa74fd3dfd8c794aeab584c6c9c0de47c316f8a35d16e11992f0afc132caac595607083d40081713c82c1df9f098831ef7df4d6f074dd2f8963dbb874bb59b65a0791033709d2c18f43c6de15bd994f5b37539a22b5518748e8680b167e29164042187ff387060386c7c317447d9645542afb8029cd1be234323b54a8e787c763f3be44d04498c690783fd5d6433c1b7fb89b58d51f37542a9f9e4169d4cd3f2e82154058f06c7ec05141eb32ecf59a86b42bb64f1a48a00e4b29a919298bb15276444e197de703a0a8abb84ad8b47f376dc85b7f3c642ad25158c15bc34fe0baadfbc1d4ed241eb199b99005ce1ca93fb29dc99ea725034016f0f7da75b26852557c9b95a873828cec8f215e4c5f9b05a0bab28f6c7c5704f0776f45475660c2a558be710d30efb3fe7c6e7256a40d9d0951ad6a7883e6ddac0d78e4190e266fad9c71d494df6b2d468c699ac403a9e1648f67d55a145ace6a9a8551b07e1c0cd41aef299d29e0f56d4c4764a7450f22508fc58f09566290d264b3677e72b1d6702d443be628b4d6c174e67bd2e66e235d5ce851e354a858033aa5402cc7484374d47c9f9b895e875c288ea90e0f93c96d40f257ff145fe072c2e74e8bee634ac856813554f542083376c3614c795d9cfbbdcca48917e4d602ee3316e25e06483c2ce8af6f721daa01ac98a8100a73535def6a71dd55c3d108a55db04fe35df6fdecacef7be467e6515636a0ed7c58df61dc6c9c8e806a0569296fe16f964035a4da20c974c4ed563aef179d128f47e2b11b31582a0ad6ecbe08fb207ef2760a33d77f2d23295d07aa20cec1766ef3434f6f8f27585e526880ffb875558614ba6ddee5de1efaa0a2eefca667acf2e69d8fdcbb28aad86424fa121c77efd0a5a0a482d6663c0865f78c5b48c9ebe8614a5bccc8d33a997b68870aa03cdd5930d78baca83b7d683f4b68685823c879a2e17bb1141f6d938d48f69e2136c4915cc16eb449fe74a2a9723dfd5c9db22c2f31775dfb528330eb4d5c9e41837c03f8b47eff1894cc4ef48d9fb4eb572a883a0d417e7a615bde85e244e8207cc81a30f62a9174a0f25e790ace0c3a6143d7b5bfc6ca3833ddd8edc60c5e4d696e8ef1f671d41de38b77a38a045a057393386d1144f703222c5683555c321336cb25f1cf186d16b52df02415343da31624bd6a5a3c9e8a067eb888263d986496ab7e49c09e71e8b4cf24404ffe6c3a3e12bad1b6bc4f9caccce13fdc01811b5477635fb915f1ab3c3b43b88f1a370799fd68f0f62e6ddd2662462732169a1b57f358b704a0e5c90650c53986168963af417b69aa33abe6501b7f8fcda757befde66eea828cfaedab540e704d6d9a11d4dd267256fc2e6cabadaa7eadc569bfcefee873bbfa996c4dd857829fdecff100991a5869226e45347500dc5ba16ab80bc878ffc23d9a3bed067bce9096d1ee97cb07feaa7d757c5ad4017cb64cd162bdfa2e82c3bb946eab780bb66d843e66cc82d055cf3f62577e68e2c3ba43823c2ab515b4c675016578c65033beb35a434d7158d9f35e9cdf8b24d0884bcef1111b2cb6bb8cc2a11eef1763d57a5a849d8ea95811ebb2adb1cb2b3051ba5d994acb2143466d5ea4ea954bb101d510ec3cf269b70c5c40af21d22e08151b5d27bd2ae3bb5a1755ad394bff48e6ef5b3f8c828860ca22aa6b40bc7d1f2121d1370db4a4670d928c79b1c28c470a722e3cc7c76c4f38b1bdb54d8d8ee4514305f3791552249fbfd8ae5f768199b18f323f710c618314d1c92911f94b3e516c1d0fdb5f46a4f91da0c161c71120b3aceebe6d16c690209af176dcbb101a6839d8e3cb249e02087d40f5df59971c7c810b7442c8bdd86046b7606db5a58cde2b49ef001f0ad1aac90334a1d8be1e1eaff47040a284b80dc50c138a225a418b8f2eada059c42c05dcf7a9df55c3d25374e93617811a13336e6900b2f7b0f885d1f353cfdafc1085c21b7536cbf331315b94d55029f8d3ca2ed246ec7ebb4e23aa46e8bfc915c2cdf93cae4d7df8dfdf51bbb9766bdfc89748779cec24df792511a8dca7916c80351c425c65c59607c6591bcf67fe1afa56aa71a0f4fdd2881d7a537375e3eb99ae75e90493e4eb0988ac94ad0d57baca48e88ea6648a8ed2658751b226d0fbc0e952c7e462c19c8cf2e5d5e7c71e536e06a2727c26eaf93b16d0588b7fd64fe60affd9eddb5dc8144c1e27a33d750663deb01856f2c9a2e8aab029d397ce0836087d234191ee6fd1732a2833fd6cd7aa39619a96150b3f3c8efc877a20608b5d99aaa27c3753f3a3d44c9b218c15c07457d25c4f690057b995b943c03cb5e9660039643b145602715e2dcc3c7c6172d0856d1b978b8fda56b76f4652efc99e8b2e8dd616dd2114b36ff2d236a84b3b410d9a62aaa698c93796c2ca3fde637f1bb26eb0afccbc6f5f196af6aed6031b6a75e5d0c21af0933c86c11b6f263234c1782a1114d8d26cc9096676e282f3b4f70e62459aeead4ce7dad062ffd8071a90218607a685b1455755ca315eee0891e97cef9e4b7272cc0627a4375892172d02ad4fd63ba25abf2d557fe7133a670efe46db53c8ff325aeeab0575f97a02cce739715a6b1d0d4986a3b5931092e180ed8a9ba474b6108efd8e3c4e12552ea877d2c0135e96a96c26c91ad8bdad80e706fa558116701cb39a7542e951e9628ca670c53e86535c1fb163313342aab2e857a2a23588183853b319a6ec56b114f591ffc6e9ce66d027879dfaa3101b365000051229e29ec49415392d9e452ab6dfa7685bf1899a16392abaa2835de0a044b97ea758cd7b2c25ae90b6b433865342d6cfad1021baadfe0a697c42a38edf7fac4b930fc0cfd2e4804360e6f73bc7a3a9d260a3b17cc3644cc56caab7cf98510cfee6dea26443125ec2b0fef46657f23a828d15ece4e1ff6607d32279b9929b0dd3e3458a9cf5d79eb9c1cb72572fdc54eca73e4b29c642f96133edfd7cb743512f189ccb6c5cabc704a3d2d4335628d4aaa667ee849470d5f5cb6b989f8640dad652fee6a49361b9c294cf12254980a2b9dc8a5cdfb34a203c538c1a05d3727e23bd649d5090089e1e841747af12b9affff5ff026e6ce29d6c37fa6947c44cf7ceefc72187d67e76f5e8c52fcd1dc7aab97db695347f681f9cc1048ab7c3f9404ec85f16589dbc9464c74bba4c7efd97330ce0aa91394eecb5e466d17b8bd59b8669696b552644661946ca6ed64ff7c181ab45eeef417b6e6864349751b86168dec77b16ecc6adc284a994de66a19fe42e7bae02f7fd5f5d651a743c200a15890b05042bc51abdb03fa23298752138308c96c544882c599118a81343b928b8d63f7f90034f00783a748e5a4f3143298f7719f897c01018748bedb34619b34a3c6cb16eb53398e96e65df12f3a75bf1039945d73e3b354ce033440ce66aa5a88cf767083ee98293d2469c0815f208f815af9864aa9b8d20d24912a8a309644fe8e6610a0f2b914e9230ee95d1584f8a8a6ed9498c49e5027fc8c4dcb11fd1fc5b38a29f5435d2d90bb6c2ee1d08908364b68fbcb256e985e481e298d20e8d7bef5e3f3707758c06d56ce7a7ad71d4835cf90a8c800d88478eb9e47e2f7618a2cdb28274f48859e462110b849ec948245120bc5e7540c9f61e09104543e9b17852cb095fc6532b8d4b479a2387bfc1903cb5cb28b93c045fd8f7d5eb16e7828e4140c0e5c3585c0708579f546d05184fb5857e3b3e8a6004764353d4c062f3314501f6041e07a3106ddf1a13fbb811cf468cc8da6eb247c9e7b6b5fc2bf9cb488d9b5fcc04f84a930b5a556db9d2a6721f5c1044b8d5c6ff34899b723c7fc5e47994b49939d5735fcb95dffbe0d905d3b18b5311e96282c42a816e990c3c8787fbe1c3c3e9cb3fc417b1817c6e3e8769413932fe029727b5b43d1c015392f723d10e4f3f044d76673e59f465e55fa23702714c297aa1dae5edda4910db51a01166fdf4a3aea9baa1bd08e531ad07243ecc980c8d94d26fcf2c220aaf8c413f3a09ca9182031035e8e8eef732a1454f255372985c901e79399034de2e4670630e3188356270ee49071c1ed81365dbb864afe08b784296c3273d8bba27f39024a4b25efc2d61bd8a1289dd84009b0f38619f55adbc927135d129ec985487c5f9c9e4e7c90fe7a084b93a9159824a6b6ed27a68dd4c2c583d6f23fdb1dc5976b6e11216bf1d898740e7e030cc1cf2ab353acf012e5b24dc0fe863408c73c3f3b4f35a7684bff3656684cec429dc842c2b86a6e98a28e74a297d95cd474a4604ef653d9e7a5b94a47772c52d771ba39714bf826fb6afae16b3667c9d2e7aa9840d8665ef1c8cca1768583c49362a044639b6f8c070d85a633c3c4772d4577e2685c1c208e1af96d8d97a98ea103e54fd3f1ec7b13b70e7eceb3086e3e09eec1c9aa05f81f7c7c23d5a9f706894cc2695c3c5a9e95b4e2700cb48044daecfbb4188ed20280c4da0133e0fd98b871e5eb2cb7aa40097f0be2fe52c7e964f55d79d3876b344e790d40104914c5b2a240d808a82fa1b2caf9408efc9f558cd8be61da4c8571e8494d33c81ca7ed46d9c60ca0c67a215ec072739e85a3973277d566e3f0f4012d9cad499597b146627ea367345070b99b109db239dcded66df0657007e1ba74539f315a0e60de914830fa930174d6f280cc6a52b7f05c19a3596bb4358bc4074175a079c4cec0db601d3363450342cb6ed5623bd5d533393ac248d245e2389e8875bddce4e426d9f2289edd793f6c75873ddb6367229c13d48ea4cb12cc23840f5fa1f762de50e3a3e17f2707721b35690f18b172a7377d77ee94bf5a2200bdee011e1c8ba801d97f50c50f194168e11732a06741bd583629d5083535ea895ff9280f7bd6df91903824952cc532082d660ae225289f677117c186a3655e30246855b7a9f5e7f98cb9b5a58c349154bfc6c9ef148f418de97d1fab8ab7f1e5d9b52755da0843dfe6803f26ccca388cd5d50963bcf8afdde98773358b12ff1c974a910a8a82608de756f907de3ad160537cfd11630baf8ea90229f919746c7af9b4843f97cf67043bfb8ab551a2f7931162ab8e266232103270d1c71a8ebd4a40d50a2e39ae931901bc0a9bd0449e1a083728828457266bb177e6c09f5851caffa077118af47e6ec6808717137b75bafb41db3d7356742abe3601617269dbd65ae8b84987969ffc8754464f4e9302dd0037f3746cd2eb944b1a71b760ea78485c32f5ebd13368009c1d192d1df95fb86575a157e716e16e14991575464fb3a280ef625bc425b47b637bba4273f501c5356ee294fea48fa6b63bcffd4f3416f54636d51f48599ae81e5db0f2492077f1867c1eeed731cf60878160ee3d7eb125787835976bc2818e0e39ef64441b12ef6e340b41d5aa6a289e9b26fa5c66b140017c465cf70844c50e51912e9b09d599f387505d86a77ffb1fb69aafaded07c9420717113bd09c678b65ab4871940bca8851dbf3e411533a8feda4f430e3bac6cb24ab4c6d238c0353660a2fc2dc40f5c5e209fdd8c2559069b5ac853ca2a590ee1711de531711c02fa04d90612113c41d0db04d1baee0084cd18a228157daa0beead6a307b22d409c0ba56d211e4bd261c50aa0db472bea93cfc0b42cea2d72f23b898be5da85ff48ab5f5fe2ab8df1d28898cfb35adc0fc234c8511358ee61043e26ca6c094f922b00b1e97c5a69e35f3093276a5fff83f58b87ec8c1528f2b7f505f2a6ecebb3a8051d9ad253b36c44149ee2361a4142092768dcdd0bc009ee36d4cbef3f4a9c4d53bab2180849ceba6fda64f2f9bfbe33fe81c7ed1589b1ab0e0e2af85fa7a2eacdc0dbbe7f4ef24d5c6612adc009a7f0845e04c73231e6ebe1f2e2be32752c8a0608b5d1b69c457b37c31cbe5e1ae28333c7952cd3b260057fba70aec198dfbbd1b504189a6d113fdfbab473b2203d36f2d57d28f7ca6947cb809669559111cf8e865aecf78bed51c348152d6ea16ab7491ed0db136ce81b0bffd6e250b9f3f2742a335b9ebeb7d32e523b6721b140d8206fff8179c1b9e302ff70ede4349199c0aaeb2c912ae1b844d9931040ed32001006c1cee4d3e52f79edd3fe38cfe4a6b50ed63bf1ad9ca95b473349242382ada266af7bb7dde420cc9e04ce6e955d27ddb3524b5314bc8bc16eda6709fa37e90b6c4fd35fa41160afef162e2c3955aee4f153de2ae23c0432bcc3c3c82ff89ed6092e53f43083482ba0eaa8163bf6e5fabde40d719e00dcf331a634d17e2fb5a9f1fc0ada1fc4c62f4a0debd762b29d99aaca0ac8fa1b60b3ec8f91c59129844a1706fd90a71e52376efba9d80a68ed3b77789f6c7b7da50f1276ca2f9878cbb5b794752d5007cf19fde1036dc782f0da6d7e5ebb3e999a1636ceecd4d2cc47fe3c8c369a609816de572be81dc458c409672fdeb01a7db342c3d2b3a2b52455e9034fc95a5ad9c5fd1a35bdbd112416d937c79278eb96dd1784ddff07d7bde45bc23d796e35b8f96e4555c1dc72b9362b356e1ba107409d25027071e3e88fbb66714b3cc39a4aacee384f0ca224b001afe22772fa55a472bab5675026751f64bb20fd7692099728644ef1bdb3b50643238d7dea684628b4eb0229a6ef1d84e4aad132b13632f8c6789e6a436e6ee4c0c386cb293b9f508782e6d65badf3d4e1898e5030e5c3b6c032313c26342ef93ee5e8e9040e530f1c301757ac32196045ed2a60d3cbdd72c7abdc39e33e9c29aa27dd5e61cd066f31d33891e7734fb414be2748be6faf533c94c682443005b7a0f0b04299d32327a56e65fa92771cc35bcae8787c4e355630d7035fd8f3741d020f8937e99eb98489d285414f8d66f90e026246d0517201e6d9bed7498a126eda22ecd8a8019746626cbbd3e49fce9d6c0298e9d3757530c6485560cb620f664897db393eda3511b862304618a5af5cf01e81f6bbd7e5cc09faaa09c0567c8b299e9afdc5dba18146bf5ef3efc40e3a734e52e08b75356e5403db0080b51384737c6bbc5e385501ec0687d6ea37d55c11edcf2ede0e3d045550a578a784151167d5f8eac7c5bac5980ae6cd24547a69bd3379124056f63035e78fe1ab80bf87c6843d84862f3dfe70c36de49ccbaa7561d0c8d938f46d3739d030afaed1ee930d65a999585d86bfc7ce357c1af00198060396ee4c4fc96c19197dafb73102d36d051e9165507f60a4ae7c596d818ea92e89596773b3a0425ebcaf83cb06de5ef9e069967f806947a6ebe0e094f7c1f2a41c733a3b86a43b6df5dbe015c116c6870f1068065cf75ae49a827e60d0c5c3e0000c5350dec9be44523d9e4e9e059081d6c09667ce9e090d48654cfb5ce1897983d939ba3459b3e254efee6208877118f0030261b4c0b4f69a5925b1eb7bff707d95e1d0711c3cd082648b40c3dc2f451cf4895591bddfacf4643ec736304f17ddfb6c114aaf681e3809f146fc436170bb7f6708f4351111f6ded19d90aaa69ea1789b56c5eee08e6ce8416f036077c1ed45a5f52c995d7f9b40fc999f332a7512eb5dea4454bbae9279f35c93313402df56cb3044d6da8b251580ab0a127524901a4d9b1ef82abcf5fc58b58d14c3ce1d51cb53f9a75c190dec75945b3a5101d9cbc5a6a5d435139b972be64438070c428702466385326827f07b03c493f6c85be6342d9349af167deff63b50453e9342ef7b13d34c4ee2ec78f61e2150041b697baa66c3f079b1dcbb84c0b034f483d3fb11ac124b668ebd01f800c05530c678cf6d7c1be086059091247d455bfcb9e7ba44f19a0820959ca39d4c4550054a82d5584fd498a607042ffdcf24b976429d3a284fb7899773ff48282d0e377fd6ae4e522cf9c89e63b58d50ffb546eaafb3edc4317655b240d0c9cd62d965f4e87d1b5c1073410d8610a92a69c37d50d89586ffba87656a4aee1f302a014024b06847e122886b9cd8bff7a412bd515edf1867e5d0facdce819784c9bcbd62cf8d947b9fdb19fce46ddf7b0b9599750bbf3e8c39151f44864254afa8cdac2034bbc60a5656796544fcdafa650783302db36de7fb8f6972d88d831c22f1bbe8b18b1b554d0d073c8b577f5d1adb540d1550cb4d253d7cefb9f10985124684fca399d09dab24711e940637d3d1277f22b2801a36941cfbc227343007887342a5b1e46223e934c6685bcad7f990017a5aa723dc96be87556b422021f8c6146bf363c8b19c5080b3e6f2262d9f694c093481793526444e464b0ca69c38550a565c646c14fe7bd1e31f334565bb2a8c945598d3747c09f1e2a634d49f92c825c26012ac7810461ff538c9d4fd488bdfa02be6baf3a30788829a03c7d1d6b440db1c496dae3529972c4d93be95c22a6ca82a9a1b7b57c722b0b7bf47912affc46ee4b5aaa81003f69555291eaf580b5aae20a3b7212148d72925e5e900dce7392111c8f669ca9afd0155bb25705736df9aa7b497f5278db1f924bb60c33cd701db3ab24f27bf5009a7d9919e292ae538a833d0837e1e156fdfb63a90ea5e571fb9b9c5589aa3e7d28030049497204c38da968218bd4499583fc62eaecccfb13e7392454a06f53a4dafa87c8c317b5ae2daa70fbd4f605604f715bf7db79882c75b789146a93c2446829f703b163f04486e8f14531fbfc55405e92131ba50b7e7b3bc7c3bc2f49a8a17c396c868f15dc7a7eef4b0eff69fd4e64ad6dd70e03d89207d9979d8ace8277043a462f84592b3493381fc24debb1a191a7818956a38e956e3c98b02322918a9e973779b9ff54f7150671d6fee1406892eeb43714b492ec617000b285ac9d0d0b1332f701f471fa999ffd81ef1cd88c9639e6c510104aa5c230d706f938c05e77a80730c4fc7557453e2603c4b0119e91fc47f385d7fe5c88c6981f957a7131635be4097d42672ae8b277ff4c105fc4c97e6c3793a1ea123e2a469bedd6cfaebba4de62e7a21c7eeed8bad12e20265bad9a33d6a6ad356e45a6c485ba5da679d6fecc2fcb08e04423cca244a1fdd25661274709556f77789412678627c8166f9f34bc9bf5257f20c3b79f68a11ca8095350a3301c13645f548e869a711eed2528c48acaa1cab3c3c439d0f2faa0ee3b0b1ac744b21eb8bbe4e4d3b98aac71bfd6626e3e9a33c7d43db4bfe0fb534d0f302a31fbd76a5b02ad575f8a6e34ba92b3416617b5f589e728c77f1f5b419f120dcb4052c3142ff22d24d794f63bcaee7d8d1ac381d0d503156611b620d4cf4c549aea93d321c21381302f56dd1f4284de2d42ec2f88dd63370bf6234d113d15748d7680c71e4718adad85389ebeb99ea02aa54da761bc516c6b1f161f6cc8460454c34f6225a0d78999e56cf9443c71622870a275e9492cf5f1844aa591d94955bfc18e76ee026558d755c29135e0d6d528dc38e2997cf65f24b25cce6cc4ea385a779fad7b53ee9222d02f34f6bf1765cd179c3fb51c746920ea1f2b5b8ecb9d401ddbb411a6018ddf3e663ed47fd99983f365520447d6144ff8626a3141457c630e1897bcaf039c18d0fe97ce3b0ee2d33b0201cddc6d63761bb7be177ff01861d8d440a446a87433b919683d56b4159f8bc6a0eb0d08030943ea733303f49b02bc77a2acd4cce7ced2c6a50e77a2ca5f1b6e75a8d8947f85f3eda7fe2c8be53e61365ff541e09b003c3583820186997751deeb1b0dd3eaa41a6497a470f1efb2f7e60abcb2a9bf0d22ea69b9541c9249e60f76ef13eebcdcb7cdec9f1bd972db3acb3d391131653dde1ec5119deec66bbb8b4e03701d6ac7a8f4bb61e14929899df16d6afb9ce9a25fd965bac77a60b3868e5ec5d99d9d6ff951bef7861059822e5873cdf667a1a02744cd3a6e50ef58a01b5afb2d0c63f0638c1531cff4d9409b2d2ef1a86c4f6b09829f233eaf951f99c62f69e067b36b28d1cbcd01b4d7f68fe19f32c3c1c77fb9e8b43e3319d3285d2f2e20c41e422894bf351e79c556ef67a41ba530065fa8910776b1e495baffe456cb2dbb5b9ff251c2d27ca4fda0436e35448e4c9a246a73854f61bada2e5f3ea8c3deb7db97cedfc8db02b30ccd24f7f999586dc05327739431f3f18a64bb660810b4b2efdd8ec71b84e3f7c1909e071b365ddde3acf8dd0899ff6761a810ed88d39397fa82311eda72fc45aa4f12273e34532474b4dba5ccb7bcbfd9e82c2c0154fc9f51a2871aa622ebf4236b2e1754f9dc29e0145e6076e144693d08032cea2324100fdbffd835f339c40b33c30535b951caa6f5af6e6e9e054bd46a3a4cb91f74f42670413b6a08b19aa08e4a652d6b727c0cb97d017636c627fce82270e8dc2c2130efeb4ab4ea67bd131eb1139693ac586091a1ad16a416557fecdb5d7e4e64417749b8e2aa888f4331750275caf4eb53b217af0074ae48ce756f335c1a87f40f21a997fc497181e004c8670132f51885aed6428be0283c38dbaef429fad7e56b8d07200eb0f40394ad102fbfbef60dbd4f79cd0e90d778d3c2f84a96bedc27f2933b80e90ad8f3fc1dc3edc65676cdb72e3de27e84f43ff53d3c078619b3e5cc4a6ab7a4afec072c6a2f4bccfda8bbf626d047a258a68614c843292422626d01a828a98db9d6025e5f689e878b2244c607a91c6920e068ae6467cb28390e82740f34fa1b8ffdc376f027e34cc11349e327e4aaab53316b90c1637a371882fd366cf941492ef2699f6bfe3c92ae30017c2cd9c703d8951eb638b1e559220b7048bcf15407407aad023ffcf7b3cf8078d3bf16c13dc08ec1fd1de2389abea9ac21fa4f64d2b11fc8386a91ce2655218cc1b22e08b44bfe689867d0fd1cb2a1ad15caa6ed61092d74d2161cca1fedde4e853d311d99d601edc238f425a977323a9a984b31968cbe0fdeb0a74c2fb07483fb41b0274d06dd03f944bc94d3b7882b4ca5d4a86591faaf1ae85450a5d3713e6e4e554c77e68a24103d08c4888e04fe6185fa5474e6a6b4810977a71ced9cfbed056f09318935f173c3884e6cf6425eaa3bf4a3edfdae5e59fa4667d29ebd44830755d37dca68787d58cfe496870c1783b211fd26b261fa3c997bc21933a58d1a47368f89615bb8e79e51dedebce7ba8dfdab05ee456426ce3c38f81d15c7dbf3832f0eea6bb511cc9025726e18988584847435d7c166ccae4814add3f743ae5aa0a58c6cd79f7744920981709330fff8a2d9693c20690f9d4ae9d2d8919d5687c59ed223875e5b9f607ba78131d652bae9c48175868dff426a1c01ddcb9bcccdccf4ff1d8732907a60b9aed42f2a46a2f8fc3889f6dd791992045555c3ce69f235284fe23112547f9f2a258d72971dcc9873c3ff0c22efc014a96051b1678cb6d76ba1cfa9e8ae25e0665dbcb8d1fe41c1ae2c5ace0cf9ae88f23494ec7fc2bc14c712b58c77123db0af9b880dd16822976897c882b85e5c761792a909b763d4858e7f38a505993c1be41f29a8405921c18bc89b86ac038654ef1193bd40278c3cbee9c77c8e8b8d3d06408099dc6e2dbe8920c122cd86091ff0e444cb95515beb1b02415e095c6367ccf8b5c4a562744f23a7c1589faf1f2ab6e6012d960fae4ae3c0cca1b3b0ea6936bca1d66c1bb3deb2b65d3aa99c4481a25118af514e952588d47361244999ea4ba06238e94bc41356ce1898ad4081d7567d4f8861290b973268309770e594d39788360e127c7d97aceacbb768e645df744d230f8155d1edb74e9fa28883dfaba010e1e0371074aaf477eca409e43e04b82161e688be79e6ff8e66c9711d019463eb22096af7c7d2d8c7e3e3f126ccb96319b1db970783ed1dbe992e1fe2a49e949ff98184d3bd6fff5abe9e5f9af961b029a9e4a268c7faa4ed377a97ec8763a88a99f3f82369d5e2ca494ce3b897893f61955d01e0a698f73505e6d05da53408df7414233dcfba0520e36f79af341565559d7196108018ea41ce9c9475c3361ef59360809cc71eba4da3a6e417a688b008fb87ee9a0911f3980073bbc8ad0e66b7c5bd1feade71eb560f30463c10286be814eff4aeceec901cf7cb067630b8cc57e21bd6b30b5047a317d947d6375fcb813eed3fb688a408e3eb37e31c25e8ccfcbc9f17c727a5a2a921be0d4682e25e125793f37147a6363f482cadce0c1cdadfc727615dbd2f4ab1f3cb65c93717b4148ef16e0b141dd9151a1621796faba936f24202cc77a91c27e6afacaa6851185dac888380d6e1a77767da7f6330636b1b981c1778fa32f55b1096f45efb490e21c0ba23d4ad3b2cb76f0688f14aa63ab059f93ddc96393fd27332dd15fe02fb4a6e78666c93a9eb7210bd503194bfe8e3c4342ebe15e3e7587a6008044cbfdddde95e318d9b6f7c2ca6d7516e05069376ab4b793cadf82385421066ff23d3f314627450324d2c7a3030a6d68000d378863db69276c60eec4ccec8b2ffae99359bd9731dee64b7a92709280fff4bb440a14ea1cc9d11f6cdfe3b8601a72cb2360f5fd1d60d604c4aa97f0274dc4734d7d7321b327aa6f4c4e9e2c2f4ec1737a724ff50d6ca958adb32af7aa408b1edcd4a39e995753f164a03b3ead8a39d6c24049016b6e9edebef70503734728e697e928d0881b901c7640f610794330e7c043d4a779ff90b43220e97929f09b1cb0bb4e85f70452e44efc68b13dedc23916fb4b12ceec51d7dfa663ef734d4151858e0426159d0650240db7c3674ff21d78dccf6fc8db11991a676801f1d57659059e96e18a12b5802fe6d77e3bee21d107e4596c9b0879f89a245e8481f5b9e89c9fdc5c6ddf63b9c67c6f035f41140d1c051674ab952a357ece4c6f835481b1f2b7cecb70992305998f581d10b6c4ac21a7c8f9ce1ec8493a8676db8d7bd55f1b1d3fcfa37dabe3b959deaf7c6ccb462dc53c5d3ac32aa2e5a0568f5cb24e3959b765b43d6131e70d3ec4ab263e8861d92d85eeb17c0d05d7edb1677e6e1764e95c3dfd57dfb6af515bcd84bed5e4332b6a5d79e496db9ae13130cff27bafa7d62b53dec20cde7dc8f36ef60ae7ef307793582873bfa11939378c46d6e8d0430551137a402b93268b0cf17916d49f37fbab56c03f919f9f5317af862b238959c0564e3ef610ece27a918cb3c84871061a006c3e1511ad3fd632ebc013a4c480440aad5eac6b0b4e460eb0b4dd6a6d14508d79471b3a419ab690b8ec9bebd89d1f9401a5e070fd8746581deabbfe294cfd3dedd8789bcefde6299f4a4d5530a969f869d2bfff8eebafd2a4513b9ffd7f564abc996da69323f19c87cdf6217c87382a64ed3238bc0b3176cddcdac48220ab838c135dbe1e162d2b4822aba990ba0baa918abd174fe539205e2fff70c51abad2c8b6efd5ef2d809b8fc190440736684b515b2a57d294fc4ba9e884e4f3978ca7f60b68237096af4acff9d9fdc95377cf20fdd1f2eb68d31e257733967b6da8c479cdb87d46423f780c2771449816d095f42bf369dfae5c104667674d7cf5cd446d49179253d2b425ff46f5638b290b1691174a6eb3c807fd7e7adc2b1cfd2c002aacffc9de145fc4899c2299e17ed945d95d2be06fb2f3a20f326c6ec4601dce7330b64222aaf47045f34616e84b34c798ab4b9e51abf0ffd4f7ef614c18ee7e45f7de6203311aa86c5c068c99089bfe9b855cece80b05c4f872916c79f44656ceac7a3278c4108769aebf4519b87e5a4bda2163b3958f590d939b58efcfa0fe81eaf9e1243b7dd2aaa25191d6aca47c25c31ee840bf012782816962adac95bf6fb6f8ac8a781fc8780dfa3d0a8c7afc7380b4a6974c8e7a077a96740a94adb13f37c677907a50ed7e6a9dc5f634c22d4140e1da09841f17c0cb865a2860b9dd1d4b8d97b3ce82010f2cf03f50bcf24fb329ff608896e424f6993dd20a686b14b07fb78e85d0013ea58e6bc39253fd8755e14bae1550e443b27d9da4886f6d312a949836ca123e362f9b9d95eb962cb158c35480a63fd1fc67a9d63886238c4c1a9d7c36c286d28ccae3b4b14f03b664844fbfba48141d694a02576ddc4e2eb19f21736f02e4b4969c00129576e53093381e6a5779b905833d652528c32a4fc982ddf90ca78499247112c875fc268cbbde3cc3daf3e165ac8828932316f28e18a479517c8ce9301f72bfb6d72d92dfbf8a3be309699bbae5e6244b2fcb55fb7c9b2923c2084da432bdd2f4dc2eed3038af3347eda59ec60ef7afdd90c52a822d0d6b596b7b159af614b35ff573ba3da1e1fb5479a3fe7c1b13b30b9197567362ee7775835162ad8589e75883aeea065ce7dd7168ecd5b98edbf8c652cc87d3496358f2ac8b77cd2c9e0ac4b89b683cac8bcca8732a6e78578cb291db66d2ec941a05a6434048c7f3c9bd173dc4df1f5a5c780bf80c53cb37accbed8a26c25634003c09571871339250a9c8f997a699a591f77af515b9fe9a88dd460a78185b3e7392f8da24b04d7aa56d3fe30673088af244348d9c658523f28b4b169ee2bed0831229aaccd425b6c4d637ac0e157724657a52dd0b7fafce1f9cc76cd2264a79cd0d69c77f11218239bb4744549335dd8c5e6546dd010f58507668fb12e0ad3c2c1e5e8a8150a729bc73e00cd559d4b2b624039c4d0d87cc10885ba5ca6b8e63e092d42b6d9846fd84b804e0f4142dbcf6c821ecdc90957d317649b2fb11658e3547428c8773205c3578ed06c0819abfb87cd380f0c4ea69a2593c0f80b260993f4187d7ee381fa57aea257d922ce5c7721653e154b5d522252545bbc51792ab51f69fc10da1a06f73c44b2046b24908964771afc7db5e924c9660d3025f6da74b2fbdedc82b88f66a51c37af4f447b6c1c243cbdabf600e3ef9348eea748e285f926aeaaf7595ec1c8ef0ce5406ccbacc1984c5d179c1ad356f75a205157f07a90c8a620fcef9d5f4d15b8c7a27c9f72c47774f079709831f709beb605bb44bc91d0e0b5745ca30614ab826be1a83cbf84bc8dff6a6fd58b40daa5c5552ed2791db3fa0aaab2872371ba3a82a530627bc6b655c4a80a27226bafd0cdfdce7b080a6d9ff51852c7d964996492d0b8434fd6f30b4a2a9fe493deffcd8ef81bb23af36a38e40e8026ff2174d96e40cf64a650519ae270529f337acaf68f7e5c2522c86500049717d032745e23e33ae5015661aef819cbe457d416469bfb612638c6fb0c66d4b40f68874f86d06c4927b1cdc8966d509d9f5b645b18b5b7426ff31db01142ae33bb97c9dd0ba0dfa1b56e739c0f783a5e8db00d43d7d6b97e13b7b0690c5971f3ab45b9b83022c808ef493174fec053a6bd53c1f0e0e39de761ae42f468a1d7cba63dd0dd12914e469a484482eebd12207af3a9a5261c7b7228e2be3877ffe5c6c8ad6ffe58bbb180ce8dfe59b7d97983f41e625d3a0e6e9c5eb19a8f14cc16c07f21f4ed3ce0d0ae0a9ff6340541d1b4040ca12a14b3f40bfccd5358d9a343934fd918444551ede6a42ca407fc92ec714cc6f5cd4ba2c1dc50b659c9d4a77d8694064b320d07e3ca4d1bd980c3cf2d7c57f57e36af45ce813781fe6fa324ce3e05a5c652dd4653cdd97bede752ad14b5650e65fc611d1ce535a26e3f2c8ba2ff1f8f79a239127aa02d3b128206b365f201ea8cf413a2437d4f46bb5dc5009647eaf48a198797c59d3e4a294f53cf5b2c6e3b97ff43ea125c40f88529f18a9358ef3d88bb10f67a937d1a64dd4183f4605d1b3b38f9725a73d0f2dff611f77d36251d008cf11457a8e07d45dfb5899c0be74405f52e39ee0930dfc377aadd0b46713167558c22e4e9e57bd18f70cefd70ba882ce593ed5f96a47e906121d7677e2e44d0c7685597544cd4db4efb03d0c33d930e47ce861ada626224a38dc1eeab6dbefc8a286c4e4dc9d5d8ee90870a2e2bae0f4ccbede7fae89555ad8e7ea5c172e2c472d2d4820dae330734c8caec0affc4b0e7c4f8f6fcb8cfbf46054cad0eb60d8b89ff5562f41abbbe2baeb18e3c2f011fec5103f2597ca6b679ee3991b67b6d7a4fe161760a5e860cb9996305572a4f070ed67b527c102ac75a594da47cad9dcb7e2797d0a595e8041b2fe2c42563a2d3a72b67bc41ed0c44969dafe180d10bda5f5be5a8d31e56789480494490498b52dd3eb2f93df036f5a6d98183a516bbe52adc3adf4726b67acc953af2e859df8fbe669f723984f31a1169edd5c164b098734dad74dc14575b6c2314d5e82696b10af05ee4514fc260da7c82c85924381841d384d6bf338ff46c5d12f2c4ec61945928f7cb9510055f8864702e8685f2230016d963d50f07af391bafb026ea6f99d40a63985e64efa5101573e5120f051fc4d5d69fd92aa9493f2b8f11d62d091d5d8ccb99ee61bc4b39ff83d9ee023abc086b9d4e36791eb0a7ce8297fdd623977ca8ee17950080d26d73714d02d224fe7598f25e872340b84e6b7955dc564ce18414d30aef4bd57e71dc53849919bef9667a73b3fb1a1b8d429be62329e3ea9afcf8974e76606780f75fae64e59f6d6cde1ed57145bb2cadc3b17bbd2e668f394be7d863e8728b5b39aabbf84cb63ae23a43ed14f705f9f4bb0b148b72d72c5c7c550cbbb68e8fe14954b6d02ee310ff42e6dac6ba92ff63422d44e034d3949351130193a1cd3916020f5da843dff2001647421599e8b5f68389b8fc155e957ba5cecdcfdb33f6e5c5e3e197499affdff187706459b263b2cd460d3441cf2808c3e9137ee6deb156b7d8f8fd1cea8a94911b2fe98e29c6bed9cf3ab95d613839cfbf1542a62359fad56a60fe0c3f1e3774ea1474b9bbd19f25bba738ba45a4c1a13dd7e173632cd28770c15887869add771337ca17656f54bb47d62d0a40f69b098343f105786d481c81c7009047254aa27bb588ccc4716a93bd94c7d5bdcf11bd12ca51bdd09ca45f8ab34b6ee969277ff7dad0a6834aee62a4a6e05eb9f54e6fc9932c2841a3eb2458d6281457c1f3e2f616f301371917716d23c5b65432cf404abfd03f4502d037cb540b2c9cee97e514157d693bce150de41c37f65374fe1eaef6c605d64a4b785a7cea11a0dc44e8bbd09ba7f04e6eba1c558dd71d5e5c2eff0830878158793a7bfabfa5be1dd7bd5e97ce231f3fe35e6fd91b16cfe08b2bcd5159930cf4f2f2ec005ea45cfad9984c6d919201a80b6e1dca1ef3da0c0760e3d28d2a7ad228f9f9e8ead786670ae2a499250f148936233ac6c210bd503c96fcf474499a5cd3c662892cb253fb25415a9369f606375dd68798184cfb62d130ff0bc79bb596eb5007ee50f7351f0905effa8c7fe76cef4790b86279976109e65edbcd1ed13b19ffb5a2aaab711c07fc51fbed83f9fd7cbab77b69947a2c8b78a2e03a23918b48ca18c7540584d82d230d7e9aad60b02062dc318dd862f04c92f3b0194f0f394ae615cdc94735b5203fc5b42e8f764505b9dba1cba4f1e1e80187b57e454e6f7ece1a1e4c906c1e22dd9525fa417c44226b2a8a0f5e40926a7768281688d9f76f0227cadd43172c36aa3cef63b2bfd0c2b93c09d405998e058160f06720ea3c1d1e1e00cc5b82869c271fb7d39277510d97adea8341ed23f13981e388f62038f323b69d0a86ab0d7cbec5ab96ee1f08d0dac522cbdbe61a8e62d5cff664126ec646a67c51ce948bfdadefeac3f6312a3037224bfb05e30d1b43e78dc019a33fb50a5545e70219400cea86d2b3b018cdeacecbdcc6e64ad19d0c26cf8d8f9cf8dfd0010883cd143093d2213c620b9bc927196afa581df5cce4574ae6bc8d525e0a1cced485d0668d8d6f4a2c44d1f12dae498e8dc2e4f2d2954817ccbe102ecd0f94be75b93c9823219bb6cdf41cb8067d661f58f0cc09d2f3013aadf53a4cdc643ce8373285730f5525466dcfc817f2512cbeee4122510c1db562ecd3f1bba02eb242fc4fceebb66f8f65abe6404fd3d50ccd90a9a898dd68441a253a57464626bb8a1c65fd5fb9b1b6a61756245065fc5a2934da9e3f8a3dc0e14b5fca3116fb5f3309f107f31c8a6b9c9032629830cbe6dc9a7d84e3bef211ac8c369d7bba4ac7e534d9076de00ddb19047799b2d389c102722848bae8cf75c1f673bfaedb0abba7dea4302a85ca5464b23f96e374c71a63b8a32bb5bf039e584af58a614a207cef4473981dd796d85ef4c2c367d9bc38107c6dcaaa1007214b2371ac70b79f031dab5fbb4656fb687f264f0a025f413c5613468c8f096c1095c52b1a99f02296a06cdb2ec566aae083835e1dfbcd665e7206501db8b087fe894f428be450b61a5d5772f2396c5ce15f1f1d714af52683d0d301ca11352298f48fa5340093a4a9b1a37e167daa210ef5d82ce19afa9945c13c97fc762f2d0df4881bdb0452567eb6b49f6a2769ceda4708dcc6e53e82c6128e744cfe67d531c1fbaf3ac7322cb3496a7d8bb5b9e10fe1843843a071b453161e24195ec6d6c1573fac17cbad13a843938a894f61d9ced5f04cca42a84ce3e6bef56a23c10a1aeb452241fc37b7402c6377071df977ab651945eff4b9bd57d0a7091b17f6e470250a419baefeafc4e0d6a06d1c1b7dcdbfba32d4498ebe4b9ac7c604b19a2710d839e12efd2c18e200401c3df9b9078e53883d5b6efbf29661c6a1092cc15a3fdb98f5d72720ac31ad394027c54659938bbad0ddb27fffabfd501e3469b4048e9d5c79217a713897538b942b959dff80a8b3c24586417e12e526ab685952cd430a1b7e565393482862b5593eeb31f002e26ae849341e1babb30624fa896559db28e7e1d2c185705f9ebc81e58081c0521e5077ba56f184f92c09d88af8aa10cd0fbdb2ace7d619722655065a1dab9a0f7ba3f32c4857ac479f77f8e78dd80e9d9b1cebeef6a2807eb482c5f28a7e660920751affbf0ee1772be80e35688b22abd368b00407ba94dd4da081dd176aa9cade8c3119f67ad5434ad875ecef48fb9f33d9f3f8e388ee2d2f4614e073b55bd9dfc333e9148c3e6f2100c5633e3813b3b13919e34e29b4c9a1009031fe38366b208bfa750a43f8e8cea3ec44a18e44109c4803e3b4b273150fbe7132509c7c2b428d100db5bc27a562ef3102ed53912b60b9a6b11872ecd189b4df99b16b6123b5030bb6e44be1518d80ce6b98562b2c6312e10381188f0fc6cce5ce293f021858f5d3710adb449c2560694c45f6e079f081e513beb4427d9ec7c60ab2b0d4003b7fbbaf1c7d904e209320bbe598b0f0f6173c19617289de325ad506b50f4e9c27269ad35820e6a885e1147ab3900da3f80e968a38af6f9ce30cd63b80db4bf62875580b89c4a0626336c555f62be86331a77e75ce7270ad0b26053a0cb17aba81c56d3e8479cad2443d532e18440b0c44c4d81da5ba22520772dc3cf228f6d5e63f7149af7ab7c0dec58211dd631555ec8a5ef6739a2258e6882008155c9eb1b31982f63018fd5dfe0297d2a69711685a53b003c200d70ae0a185cf47e94c8275964fc046e4458006e3671210f3eb6d59675d22c57a6737683545bd5cd24ca4be58a9b2a615c89bdd31c98e57fd6c012f99069c68797a868e2ddf08e62b65ab2fd6409bdf9a000a1b87ceb9d1cea82f0035406209380f058861e210ff58a62e0f8a38a7b817c7e158c727e94a6a010666108c9c0401c708d71d8d7cffd802a9ce6e4dba82e79b2bcffa2890e930be0bf615707a7f93ad8e6dcdc00c57ac0faeb693bfed36544703e90e618decf03a2553872256f99669e406ceee73be5d0881be7d4f426aaf062beee2878c5dae0d11b8e34d4ad79f2cad9f512ed688e5fa1010b786e83dfaf09ff856ac6ca259f5753ebcb0c652f931091fc87a299a5fc5a713d46eaaace121dbf16b05617d7aab828db42b6c779b6db2272ace0b5c0ca1f1c75bad9659c22089c448086e80dfdfa5f748429ce115470ca4e19c9ecacb84eb5633edc1d10ae1c0e7a528a98de373afbafd65925136874456a5abc585029a42ce5f5c9bcb219984962d2d79c3855a3a980b9ce5baa9ec4974940c7d4b72f0d882fae23df4532865bc1b5a59aa83ec3e3e00b524a3142007ffde2f7889312ed1b3625ecd8038dbb5ee1400dd60aab21b8f0795b3c701afb1567d2489138d1fb2babde9a9392300bfb3b5fce93c7d1845c5b88953a63d797996849eed34d0715ee270dbcd5ea4e4d50f2429b54c7cd827d40f01967dcf31232b6fae5c9e2b9a82709a61300f9d7dd3a875744fec7557c70e2587e12926fdc008f174ee95bb4c5f83feb37ae64a7071749f321cda23c2bb4df2aff9aa47142c2af866a65b7c7e6e3cd4252e96b51ce4084c5b469d2bf616af014a0e71849b8f57820c0605b5f1903426926eca799f4f404db39981878239fd9da12bc48171339909af6318922c9c8e2bf85689bfff870b3122085cb411e4710263a1a5f3af83ed2cfcaccc06d3c06d8213393a2365c75ed422c230ac8782be85d33c7bf4a54a8801654f3cac563f7f832944cfaf79c2daf224625dae20621d72b12da29dc0537616568f07bf2185c29bc9d73cb807834e9210034cf897ac98e89b6e2c54c6d87c5d16d20518fea22f101ad0724e3da882cc3a50a7556946daf0066acffc48419e97af1dad0324a4b010ca33fe360c6867cfeb51c119df88c77aa8a2afe8804c1b2bf3fab854a7ecb1cf04b8f22034241fcec5ff54a4457e9a4f98e49151b126ccdc95f0cff1b2fad30822092556c77ff05bcf53e3d7767141994dec4e7cbe93c711b1f7caf0e747860ad0fc46cb2e5c519a91e1fc1c5f952c985f828d910d4054eee73cd66ad8b0a9be35e611986a207e500a7ef785df85a51cbf32facbbcd757ce5c4971f2bcb074a557e9fcb77c274342d0fd2ce23545a1fd0643fbc6124de367eff924d17adaa7559733575ca98a9487f694bd22688c2b1ce7630d9bbd9503ab0cd893837aff022cb375d89032ae47b720fbdee64c235e10fd6d3d08994356dea4c5399f95835d737f6d64b516207b0d6bfac3bb584f8b469904083a9f754e832a7d1b9f2563780579dc1d2f6c18b2ba15dc223fb5da97dd77704e02d316c8a63d423db8ebb7513e9332c62f4e67467c12ee87a9477c90a524c30b2494978e30d47f5a9b3fab033e49c6a25c07dadb4c3266a708c7e9dbd6eaee5dfdb8e311990cbda383892f54947b9a6bbfae4d0fff5f1990ed97f5d01e5086de481a4757ab6c6b64f2c1673596784821b8a5c5e0889a0b7c4ef5a63c54bf7abd728d3c309fd37aee42c21270f2920c9bf361a383fe5e46258fd22ea4b89edd88269131d728d656cae81c54a98a6fa830437c9fde66c75a47b5455981c5a9b8c7d0486fd476bb197ffeee80cdf44fedc7785b64cc8231d36e72ff8f637897f2f1e93469c4df7661a9ef364dfa1beb6100580c0260a632557c60b14fa352050836e029664665e9a2a96a1d9a2cb4e30aac7042de0ed6676df0e2115e06c48c560835ef4835736c928a00352cbfce464a8ec62dc2c636cd7d3c279cce89b44351043487e096220289a488e6c50a43388d7bdc4f006283544a8ba096fae91a03a284235463c0448692df1761293cdb29688e6e29830483c0d80e6798c0cf0de6ba39b8046edc2135cb189797f7199bf8449f5ee1e3e50f6ebead291c87a2c60fc4a9bf4a58b53ecba9bf6593172c7343b200ea60d1863fb2e52a26c60f0a009450af5972f890255f3335d0213fd15bc9e49034835ad56ddce90b19e0166830b90710e1fc9f22e7f875193f708bd47f7d661f3b3ff4ddf5d9734d5c4977a9eca2bdd212377c4e2e6680682ec904ba5f302c7ee990628a6c2cde512359a9432c1caf428e96f721f437e450a1273e30b5a069fdc881ef6a58f62c13b24693a243fc09b5e4b2c452990eee25314fbec358e229982478ef1e19325b4f24a5d3a943ea398979a7017a537e8576ba937926d46668e5c061b508425828b78a66feab9a26f322d2023ab77a47f4f23488a2f495f9ba9be3d35118d1c25c0d6a703f3a0a6d6c9d8b75362f57a263e843f597c8b1f9072bab541175d6ef71a5bb8e06871a5e04526b8d989e45fd34498bcd63934750a7a6c0d4f61441c85da455a434f7086a146f430dff131438b52169304d303f6263bd077931432593a97eb5fa2c093e624defefd0df30dbbc42c57f1d47c774a52ee9b51326312ea50e3343fa59d3cf942bd8569da3930470ff94fce363feb5c0a3d1ff59d5a77372e14e18c0f93e5efc10f8090697b5969d5fc736d1db9ea60446dd63205a4e29f84b9909049741ecda31d24fd1a58f4db60963fbc74c8166ec20081c86d1407b9da3f878221e9ae895e1752d18fe059c7b76e9dd753a1eb0737bb1af2167894a304453e7c57ea810fdcae85bdc9d9a7a77f760202f170345e613b005453d521de3469322e012a846cca5ed890ddcef4d4303d49930b6139ace27ed735c836630fe8d2e2c025addd03a594323c47ccb7ee3ee05ccc2eeebd83fe04d8a1920cc1bd091036200ff7109b16b7fc09224267b2161ca1dcc4d2e5fe16a36e34e367871bcc07410cbf3e76c31347744e881ff08a8fe43f992c0961c14242e98391d68e06075af5a2fee3d1348918571e9d615619ac3216e3bc88ddf25bc109b1cd6c2daaad53879e280ef47ef7409d76d0d69f8df43b776fc5560617c6b5b21064e0ecff955bf6fe735f0405bf68e52a56f7a2073f9021ffc4b35943a079a9c824c2247f09c1e1fe77949f7bb5384550e367227af2a08b474c9cea6f43c8eef00dc7c0b3f4e373272ad963b875f50c2bd2503decd0fd157775be7fbb0ee9f8c696a45182de8622e59a52c3bd4ca93c1eea6100a0b13299729ffa2e391e978311d6b7f7a3b7185d4ac54831437f88fb80eca8fc7146c3d5aea07f813bbd01828a4c545ea35a6fad7ec0155e8a03c8655ecb7642fabd4dea509e7807a64cf0bfbd6af696e21d27ac844a16a489313c767532e86a7396876d15eba37083476bb9a046f3c48bf1e718529daf772838d58dd5c4627caf322591ee1629c5f34859408ce7541061dda016dd62db4ff43c982d03c0afa77b3929b13c9987151870159c6d2c79c80b364b598f99ed63fda1ecc954439c72697e2f5b633a9548baf0b132bc3feebfafac50ab86a3f837499b06bbecedf8faf10ac07c29b6f261827925bc1d2603c4baf125dafe91e079a2f2c4be02a03468a49e9b30765d7f4b5152559dbddac546f0b21e3f3c117ad3c8dfee841ec2e56b4769d5ceee01a80adc56463f547cb85db6d5a649d0957b8f86e1e22deb73cf36344d4632608e1b378b95bf04dbac38d7dfe5683afb538b1b56fd2f0c59512afa094479eedffa85c3e1d97f7dd51355882754d5d1fd1be0e028ba77848fea25821aa128e8556ae5570740ae9c6acb8ea56792b5468cd470ab3f8b90c2009df76016ab3761887efd89e6edb7bdfa0cbfadba86dd254615153e5525cfc8ece8b5cca2dbb7b0c5a6198635d3be3509736a67da97d887bc10b25606ff0de27a6fa7d786c262e06f483b36e9bb25f9cf2b08818aff76566cc273e0e0b0430a7f7424b74aeee9baf860dd5b5335d5bd3726214bef55c1e3d980f20f3d460b3d3c9a11b35e5967f2976b8a1e6988a618da39ce14bf06720f57452f420c30882de53b64eff8b2b8118242d19dd0d185c26e08e03f2925ba450dc911c8303b2d7531c2201e132dcb7dc58d6b007beff4727859f2d16d46d5f5ab6a17d127f3119f245dae2735fa8f660d2d5c2f6a7c98fd1e47dfcd4bd6d9d5508b3c68ee112676457ff61138e74103d398ab37723993734de82faf165e3736440ab70187509dff724ee815a0ac4df825c21015e3002903b1eae8c21a7f974fcbaac1becdcdc69172fa9e9aee69d2da97dbf1846b1667f5fdedfe8b8de09ea8a10ad4319676b428d0df28e85a0d0078c4f4765c2141e83bbaee90c0b889e6ba1516dce17cdbb0bfeb8c9b46d38f48c0bc23c5fe50d4a5914569ccff406ef594524de2945e44f3bcd9c8f3b8f9e71e3bb19b77baae52942a59ecc12753159d3ba4f73a578fb759aec5ed011a3a305258ade86d2567e3e9ad4b585c19011f6f2babf2cd52b97af60880aeeb24e2774fe751c4b82ef0c2604e494b06405b65900787e9ee782000313e42927bb980700ef46a75321b298b64316a35b5bb958572b30482ac5ac2e4971d6812e488751002bf2090f51acd1e9a5229652bdcaf06047ad9a5fc5332dad88460146a95687832c4a10e4fca256e7d7e49c39539d46595735794aab4ae582ef5a0bae0437422a877405481cd9da2f8f23eff46290f3d2bd35210fe253f01a31ca2031c30ff1c3c7340cd7f28dc4b4641b404b6ea690485b437c9c07f102bbd9ad022feb2eb5ca080634128cae8dd0e51dbbae9c19f09597828dd6e58b7041d68d0d8dc9b6354f2d5f0b51f75a17d35ada1a4676a6261052b2d0b152f76f38638b31f782cad6de5ad71bc45ae1f01971d770a66ef1b9a3b3af8ef3f11cfe4073f063726b57e6df40b880b2dee82788ed43ed10944436be331c5bd9ca0b3d8097d3e5f9e6681fe917c7ae87e96bf743fcaf1fa9a3f0d2e4f37e463266014862ae3fcba0860882244bf19492aeb939aa6e2dfbd0041225a449840d7f750d3aa1ab3dfbccc6bea47c3806805b7143f09e83ecd7988e3b484273d0e5f4a746addd0bca7090d6c2a7e5d3559b44f98c35b9bb14a8afcd7dc2bb77b12e47631028b38fe64e2b7e0f6b1149255ccdcf840241b24c634f2821662638aa8d4365f92600b031dca7c6616c94527d65e1c347886442396776ebc0e67028ba1988e01c9906aaac135d679efe43ff54efee88e28833ad27b7eb008466924b638cb0e41f7b9830ed2fee7d8b1c828827fd85824cedeb8dae1f90fbb370f90b8a2f3f73dc814ed7bf0a45f9da01da903f7117ba404baa57dd6190b8170d00d2de884d8e4a55adf247100faff1333c07762ba30d5a9b4504514d65f122961016f777bcae80d83c203f9dedc8ab81c8820ec2b900a2c5a54d1cd8a185433cc7cd34d7e622422a329363b78c1f7604b01e15661e7955d59e2be71362ed811fd89c904decebb8faac8a1434f34827f66c5068311c4e689a8a0a2e4d4201dfaa0af2bfd2d64153a8d1b5d109ca210b3328aaf03d69715173264667f635b7868431d225d7ec34a832b3396f71147d8cc3507938fc93fe6cc34dcd7f0957df739bb5a79955342830e12d6becb53032d6495ab58d3f0b0f669cc498b43d4bb4ff0a8d07955ec8d8f523684f8856792ababc29fc1a93be647d8671b85572ea3faaac3dd976aabebfb7a870f06e6a70bc3acd6d49db4a3b3144da1292fc343768cd1368cbe2743cccc361581b90f68809965d44738e98bfe3db88fdeba8657e3bbaedf9c52d7fc601b3f329b8ee69c61ca64349b80adbe04a4c0fce71fbec7a6491b7f878f47bb00b4ec9083c3eee04c367dea7798dc21d5ab619bd2736e9ba3e11bc078fe6e9b0dec53b0698e468aa6972f356dd4453e1c8ddfbced567a975e3bfc35fe426ff6a31130da513f95328b5ccbe3658e9b5e981bab6574f202e0bbff6a1ee6046aa91a156c63e2907c9c51fb833a6ee3ff990a257d433011d21ce5440b180f8a76f3954ba8dcb1879549cfbd2c5a87c6b8a44246880a5961b668dfc28d088ba5e6e84d553bc08acb360d50cec6d2a770abd5b437a09ef184a75709a2c76bc7f326f59262e02dca3d2ad14968858fd5a13cdd6ee0aaadb594fd9ec28d8796272fb6e754b56a233a80b109cea2dfa88eb6b04a5b82dac78d9a0df23432759d77f5f13bf4861329dd003b2359955d5563b3dfa402a3ccf4ff53175718ed725edb90c1f2a4d36d944c3b6355d66d7d24c154f2cfb436ce027ba99fc625491fa3d0980864c4d0c994213c1420e6546fb8504f3edb29c9f443dbcb9005c43b74a2d9bf8ae0ff2dc924c80c5288ab3b9742b65f0c9344c006447f0a97bccb72c583bbf56b378eb0ddadd5992125fe50dc139405bd6ab892eb6ae911b6f048727be68ff9f188f3b9cba1f789cbe432ba0eda52c17c54221c24735527a299ec595b5ccc1e1ded815f0da9e35735042f97a3660dcdaa80453f13fcbfee744edea6e27ce7ebc1d039e95328862beaf5bd1764cff04083a6356ca986a967b5818cb3ac3ec2963126884c938a67967d5719a66721ff1a73bdfe4217323bbe41ee853be9e1d4417c95d6a6b234e48f48f43ff887c4da9fd5ed52e648b865b1b12b19f7a44502550491fd48daa299bff181af018352e10d35981ba04dcf37936e697fda768ab2d84e0badeba84141ce8399ff6c9a6230325090feb2e4cd0a27f053ddae33bee8a20341422a200728f9a6cbf9e2d7efa6f1a82a75647cb48fd7761071d570afc11b0a3cf88f4c0e8f57918334bd361fd40e81a30b3c511fd4fe6af0b440097b6a9dd81dc855297fb5c3ab0ce3268fdce8bf46a92e78fb2a0b55455745262537aed4f936e737ba63954c35e338b11012e3b6385e8af8fec941623863777b2dec00a19c38202cb7c05cfe46f042c0598b31fcd06377ad4e0a83b99d3dc70be8b11e9617f870b50000e7bb8ef2081701da4980d2790961762ee04684e3e49e90bf13f54016f2812e878cbe91fec18d3ca1b3af688a7adfae9d097a2c28a540e008e6f2f6c0cdc6ac4e504acd83a6a2386eceb0607373f57ceff8cd674abb15a77c750695d6ee8463ee8d4b51d3b09aa7e24ad1908b55b6daff6595e6c00b511d164e4cf3187ab72e3949aae8b071ce13e47c085d3bcca8830a4ddd2980a4273823c1868c6f585ab95fc41c7c71f4948f6c10b6655eaee725dd4337aacc8819fd302120bca5aad66b859387542aefcd8b8622f15cc12aba4cce15de05a123f80e65dd4ab924025adffa0c65cb6f10d5215fc5949a9845e38f6ed1299afcb75c193f8069eb0c87be8ee8797aa75c4814818b47471ba9b6734e95c24426aa3e259b2b24b887ca6615c9c0190c3ae7f4b02aaddd95f07914fdca683725a670aa3e9b1e68a482cfc293df84f55e9ebfb776356a50aecbf67739064e07583b7e4ea1237c590c3d4b4ff4077c9972c67aad5811eba0d1f574c891f8262018b21a5458ba8027bbc0097de5da1270b63738cc92e3aa58d8e90bae27a96f5562d7ffd7d6bc7c5b2ee64d62a938fbdf4e05ed4b86c67c6e20aeaf3c4577f63d23184b0b4671e70a6d514ff9605d0230c84ab2b0c704f76d50214e8a8326709ddbb192e071559ebd5127339c9a708b79a9b072386ed69085df5d80114c7222fbd798b98567b35560dfb351d0b58e20f89f50005d10a84affc7ed3cf23a0619db61ae5f443ab82ff990d0aef952f9c4df863a8821130c748f72aeb12da56c2e27419b92f098a964626925b563464062636f22369cdd60869bebe7235ac1c4c95b415a3bedf5682ec7ad7bff3e8acf40c700e171bf559876b5c129defab84645543733032d81928acc58966e91919c1f8c92a74fb1f66654d0b391957387c2a7efe8a3accce59236a246937ed0a167809a38898720b05bbe100c79da6127409a816b04db434cc94fa9ac7fa4e04ab6ec1b6826b19edd9ae04ec852af89192c8e3b8af3c8c7906720d1cab4d8f82134f5c99f7cfc859e11b51508d7c52a30bcea8f2e45f0193c12f310f5f5c9ce45070507bb83c79d334eced8c88ed954102e221d5917d8711d308afc2ac883995c426340f64fa26f9b4ec59e5098d56dcf8a65f2378d953b3daccc144364f5dc37d689e745f93ef2bd3964937bed9549a3e02817839f554e14aa2bbe27b64a28e162d725c251ffc2db1777388372483e11a6c514c04bef614e60e77db2a889cac981fdba5d8a71cdbe5f18c4bcdc6a1052b5c0f6e1ef9415e5f4b88fbc68fbb0d243a33c3bbd93f45195153204aac98be8c423ed3e74968e1a184d5e1daa1674294cdce33ba8dfa7a1affb7c2f944a9ff0b29e5d55721356567944f4b29bf39a473eee794275de5c6ad3dde4a9ea804e509fe8577d75d042a3bfd28a19fcc1295197ad27d603d2d7cc1f39c1e596b25a49734cf5c18cd2bbfdb9b61b25fc9bd24cf019e7ce2ab6b0b29c0044a030e7796cfc60a5318305495a1ec528b37b4b9bbce51224555341d204b7136a106f33edf9dfbd40dab8398c79d5a5850a70b41c5e78114c4dc33cfb63033d4d5b385f729f2c686eccaf67e34a550c1883578021ac17ac76ef0e13d4366e4de223acedbf36e25353a54099509e10f060be551a310d12e1cd8cafe0ff42ab3fb4afd503130a8f4e5118d2e5bf9186981f55bf144aaf975eeba01815de3570220775593cbe4fa7b526c820f15f188b1a2b3bcb0af5942aaa8eefd3c52bbcd2b0cd2fb8915078df8eb3782fde8468b8bc4fd1d934ede5e644ce58037eab32489c9260386fd229e3c7c470c231dd1e6ccec51bf57209fb701a06f10444e16eafd156993d3559be92c6736715f8175447747221218312b35ff5cb852db90a359860f90f18503b924d251bd73130c1dcd456c2b035f8481efdfba419623e82b54db19695da9a069f17df9caadbfa68ae49ee9fd4f42691290c088557e3f35c3fd8f72a265b35c2f05619c28476e36a9fa0141fc1b9ab6d000e3852e57038c9175664c74eb7ce4f4766d3cf22f3e7428d5f3d894cebecb323d0ce132067f10839db2bc308431af1fca7a1494254c42ebdbd30299e93fe4c7d4ae09c905f00f020edc7d4c4d8588ebc230f5712759a2a5d71372fef22ccdf550de37c7b7a85fc21a0215b3d79ed07b01a5aa286619d9529d7cd3c74a93b298e14c3b36531ef499f4a181eb3add561e9a1b7e6a1f46970604d1af715017a3b1bf75f5d5982077b0e6f062e9c4e9b962ff22541f15c6de6cd4468ea3d26778c1e02a45e68559293f552e78d58303aaf024d506bd9f399a1f99621f0b6572d3de434a18c7f75d6bf418cedc82d92fc2601b6f548914bdacf98b6731acde5430a07c6302a1246424f1b89fa83eb452b2a6453021880e5913c5b40aa96db0b471bdaa51b5d5495976a85f350422bd804bd8600e4429dbbbe69d2f245748b0c9f119964b91cc6fb2aa39c7789e954cc6e98d86027b399f537d1ed0d57b3024976025125949773444a4dcd8ceca4b955429c092f20b5c27e34e53ea40ed8dcf67154309e8256f60a8801770d479e28f678980d59e942835f26c0fc09403a2ab9f0c5bca5e3fd42f447121bcdd9c3db31337da03afc1a358df36aab7315bbb6696d9a46fa86f78860956bf722bc8925987a71c12af2363156d86506a728d32a7ca021e438dd7c519ab4721de2cbeabe700e19f6db2b7a4f540b3b084d9d4f1914fa55b983f1f22a2bfeee5356bc3e2df347a60e563268cdce918c0b77936517f38d0260124d0120fcf8aafb898624dab809bfdfab8b122dafc6f3ae3153700afe8c2a6c4ed2ad373da4d158efa2a55e1bd831e6e502485478f26b795eef5396179e274fe88f6ef3c7bc5d61ab61e1b9266c4d6008003d6778598aaa4d9c837d81043ebe5b11ced051568d365076035a49d657bf35889b91563e3980e742e29501d3586e39ce18f2006ba409da6d0e72b54a2b4a5e43ca08abe77af5c235fec157c2751d6e5956cd807e4dcbe9e2e55bdcc0bb00c3835d53ef371a135d32ce3ffb78ea6dbd960a554904cd405971901ed52bca6b0c7936ec5c4324a105518446544279d65b5fd4d842806f216c83418b30c3ed6d342ef75a39e7eb7b0c31a1cb870df2a0d5ad253325a16814ce42e8e9444afe88802b3ad02e85db0132886ebe155d869367dec47b2583367c100453ba639d893e9918cf9a5b9f5bac32b3f1917e3c1d76a274b5633645c72fe32930bc0ee1253ba2ae74ce4dd7357db0bc1debeade1492e2512b4f06b7b4ee22fc9fe707bbf6ca49dfdf9edb97356001d5da5afa21a00389b7dfe3ebe53557382912b105b6abb98e7ac3938791768d216cc44c665befc862eb7f81752009157e7a74cd8cbe64aa045b15a48ea9adef67e9344885015870957adf8d11d65399853429965b1f207922b3967b272ece752d37bab960f7b0f48680556d5862f5368e990a5204152ff1906b99ad80dd84dbf3bc8ee76417cd6c1d6c402b6bf0b80a9dfc1b967063d47c6cb4caaaa46f0e1c8bdf39b04dd26ecf28e1a30e9a1f0de5de044138db55ba0541e2e5eff565d16189373fabd6aedc42a6b61a1c4420d88d4679f0d842b99c20a1664d15a68647835980c9bcd0914d047da57c23e2c6688f52892f045fc3f2fc20a6fbe26881b7601331e9473a3c0f264ceca80ef5feb9c3e14378d820c651e1f17f1e18bca57c0b4030425a35faa38770b4f3a5006eb9bc6561f52f3cd651b3bb48ef1bf37f61d77a7dd02a5a016da628a1cacbe4e38e06f011f82cb7c2083701f3841bf02d7eb9499a0dfedb61866547de81632955e2ef1820bd7d32135fd0a04d4bf62c79b25430409503f99a57f187fafa7a31d161ff68dbf941bac138a891e47e8630237d66734baae03b89957fa85afe64d566d02f5abb70d0dbc4051a967a9e352c64f121fac41e12825aa5b591582e198169a88397bd9876497654966d1088aa0878be9505d15a194c925bada59365bb155b2700650f19c102bef224940bd2ef690312862fcf83a95b7c373cf37917f1f4a459a1ad38cc989dd746e435ab5c09665b442fc038ac02e344c0b387b70ff184c0f985538f34b149d17336be29bdae95a00563505efcc7d4ec7e1077ff50bd07badcda809d878e5bfb07124e739e94287bfdc87053aa96516192419cc84e2c21e144bc5fa4175af8fe00c475569fcdfcf4f772a7f8d7f77a205f41c728ecce715be9050081b61e99b12b8520d13ffb12f23560867e65d1b0944e45e0bc6c46d6d49037a6af4d2b8c7c0e3d49920e08e423644bcbf85565331e0bb0064d684de963301221cfacf1d9b2fd6fd7475efc1a40cf6ac10c763e4194b57487f8c4fcebf80a23452dd100659110840f56120a3d17d04d8cf318eed8b4e45afcd59c326165ec390fc2af2d8e3e5d47cf5550133ba9bb6504c5ce2d5861422933abeb568add2e559b7c7e73030b9192de0cb0c641bd4a532ec5e4dbe315830779946afb35dbf546306c96b20cf018a547f3d6f798123a287f8e64caeaa608f260e37faf4716ec9d16c693c1f2a7c4eebbb67bf71d4682eba93eca4597f31f8f0bf74ba07a3a49102cf192f2c8297f432a7d6f4e6b2995af83e0e174e3ba6cb2006b50921ef117011b63f6a003311a85b819c3d5ce7be3e8674bf8a64ea8a96a2de0736f0c7941be58e40eea66a4368cedf85281b5600710a9e2462218e579fbb812210ce992c164437b08cba46eccacf2d01a1c897506164a73a23817f2593d2e37f03216fe5ea46fe1b945e9bc043c5a5dd91fd6e10b8ab1835ca817324e7a44bec8212b89030e243406395265a5b367fdd0d6fc9156fd2a3e95aa4f3a3c511730e62b506a027ad321e098d4bc2745ad0ac7ff948c3333a6f6c1745504c74551f9c17a320c82b95f456b47be4d790166cacbbb48ab536c9eb930fa3dd87ccbc3039e378641c1194728d37f0c3163dcc96d242b8882ad05b7de881c9dd5a4e455d436602aca2b25fd6cd538ed0cb1bedd0ad87ffa5a7bfcecdd5b4a352c3cec2f620a26b64eb6841df016afeb807d4893760b2d1af45dbb4af78796cdc330108929c5e0204aa5fad5a34014adc12dbc3a0a5a05b65bd17ba06776479bf08ae4039fa153630d104f5a1276e484981d3966b0c710c85632b9036a19dadf1c82727068f6d7bea5a754530416838834c06a674fbe61a0bdeeb55d49a791a9dcd52437a94fd9aa5c5c7adf3ac43694aff13ff439047c15b2828f2ca59218457a69527e0fdcc9ec830e62c9a7c9643c139940ba8a2688c15211ec985ecd0a620d39a7f83bb0a2013cccb46c3cebeabdd1e64af904af203047999543a74316a37e6c1947a3bf4eebfb223d1207253ee6861161cbf6324ed8959cadfc27f30ff6fa891b0b4308d3f4221a8dc7b4d276a3cf4223fc6f2fc804002fe0bc2a25db2ec0a3fd8397889f2eaa1f8da0b1cd808f4d8ba2fdd16dafb8b2c6f0953f7cafcf2202313ee0fae77b6dbb076f50443bdbf894d9171522a64779637156acc4bdd94002668108f92e2d9ca613c20e60b0b7b9a23f6de6384b751fae81027e3234e07bad25fd3c36b3ea471127118bc9f34a4ea65362d02cf5e825043b3c5f606459db307b57fcd227bccb969a9909d08051257e66566e34a7d01e4775c558c3b7b9be574b068a91add2327e4293ab758c395fba968a1f64b11dab6add2cdaddb121f9075929dca30fca0cb6a88a19dc42ce74763de0c60c4b7852b59e232f9cf4c62bb1162c0a839a714cfb9acc9f8241de03975cda4cb203d448435e2243f459ce91b12ca20a01a27dbcea2b2d58fd3ffddb77abb4bd042861be7ca77cf4f71c72284527bda337e51b5fe4d8d4890cff7c44eed43082aa5375ad6c6cb32c740bccc734d39a24fe71b214f951b6e763f291cd6ac019de272bd89c46cb138d72f4ae9ab5913567030bc922da3fd06727737cadf1b049793411671967ba0b2b801b4a97130689bbf807fd77a938938b9bf99eaccd978baa8bcea161ecba09c6e87da5f5a87abccb8296f5f377834049417459db361571b76fa93b9f705535efa8a40be4f8093721c33172ccb5270d71b544a9684454348b25644fb4080901eb07990968bb0c3aa02c77ac053a48cd7f32202f5d0bc25fb475413e30e01dfc44c8619e2e5e7b79c37d174d4e35671c11ffafd94f45a91f483e9652d01b99e477a232aad2e856bd704e9767ee983ce3da9fc518b158af812382adbeb19b2fcd82caba0d541ad91356f0ca9a70ce1de908a2eb171cb5b4fe20780c6837e6972e29399329e2cd1151de54753f752c1d742a2d477ae63395019812da08b0651ae4d184a1f42f7aea47add87a91268256b20ef272ad810dac5a565e703fbca99401afc5c0fde207f9580c5dd9068c7ed38a3b9603819c8603acb2b1eb565ef6b8ceb6efde5dce074082d69648ceec6afb7763f7efdd97b28403ba5e02609aea3b57e507336dc13510a675e3c39b4034725000957fddb1d16bd73ef0336f47f187231d18942ca84dc32d5dac0bce08b60beb429fd8438dafa8e25026d05bc573f2e308078877b22332ea973bb4637d9f18d1333a66736229854faac02f16118bb19ebd9748aaa8563c21bb145e240634e46c0eaea173df75961c0e1efb9ec59ef60ed6d5682aa7935a3052cb13eb184e1314e5ffbe2c4cf6eee2fd79b24fa5392ef17d3258a9870a320c2b98388b5ae6569768d907098ed763b73e7666aa00551f48bb60f05d06762445d45638b8b0f41d93df0f9b7eb2a3418826a20e817f6831eed8b472e68759464ecd6aacb18651844a0dedb77a18c8a8787af158a8b00dcc3518d823463dab10a18d4dae63730b8bd1b3c65c7b319d9635add61de3467acfc1325ed2fefe080539676a25b37aaf6021ea13f3256d5f8f3c7350ff63166aba94403ba7396d38be5e1970b16c535fdb9b2825f8fec40846aeec8daa561db14d93c22c7546fdfa36301ec4b0a2c83d76e42d01a4a334b9ff01f0d846883f6a9413a5fff4804783905584b8afb9e28192cf1d941928904058459a9d35a79d30754b439beb8f514edb9b7e9c444e963bb1344ac46fdf338fffa63831a96087a2a62503549c4d7a0f8ecf9c8c0ce97163ea24a938a794932eab3faac008d53690cf21d36c481c963b2b7f262d14539629060d471370972f51dd7fc156be68ef84013aa99c9dd251eb878b9c4d2d509078139b328dc0adf83d862985eb2c48552831c450cfc04cf2c59379cff0eba7f2183296991ac26ef98c65981f088c58e82d1902c1a3f566063838fe969df898bb5964d28698936c071dbbccefffe5d6ac8c00d84b659fa3dba94ac102a25cf8f2715ad1d14187910defffdfbab3147d5e876f785c98790fb5943d1d0ba77592624d1e72ffe7e8512d598aa70f1ecd43cb20437bd0d8e0d247225bfe7b2108b6c3a9ede1e816ca1ffba7a1fbe2b40514295a9ae7b2c5a30b548042b7b6f28e767debe8308d80d2534e74508543085cf8c8a0a9589dd599c50cbef2c5d4b61ce9fb819c4fb1ccca5b9167a6fda65bfd268a0cdf94f96df165bf5058f5fc879e085e22b8f9d61b8c01d2e40c74e5b9cee98a2cd78efe9c164c04ac9bfb8d44346205e2e1cf636db58fa7042f67069c943f4983fb6a945a3bfd23af1b1fb0d13d498a2d4e5fb0c503230cfe803c0a311814b937c22a847ef8aa6211462d334da786f833ba3b53fcf2b9284a767937d91c5dc5b0fec90be36588c313c352117d6c9b4a1ac518183904ea2cad918bc527fb33fc0026da25a01d363b445535441b07609be716af06b5a199e0cc007284d348eef72b27655e9561bd780cc9570a3a60b567c7f28390f87591e8c3a45f4e48d9634e5bdc3798a0685f9dbab6bf7eddb358ca50edd0f69061fc7cb5b47bb2ff6e31107fe2003338a2a2e8e055ef17619fba82615829ae8660580e8bbc228a3735a675a6bc1f75815562cab57972dd21f1b1d0240ddc849d8dec16506f139e45b54693ff7facc86478945b723f35caaec2264a407248d5d4d2864357ce3bb1665da1ba7fb0110d77a73cc8a590f69f5b39611cff5bade6b569d9d52319b1023a797e65eb0916acc847c5b235f4967ed8d6ae8ad792fa81b8df02c907f0bf7a7d955c14dc8e1a2c47bcc899e8d8a9afd8172933822cbc98caa17bdec3c832aef271ab82c57922883be576407ad31e676205ab9dbbbd976257c202b3102f6d74466427be79144351b4144fd9d38855ebf8c6692a3ea79fa1ea2f1c0468d6d3ce447c94e1f1e750abfe36637df59e51fc3dd255e97f2e61a1b3298293f08aebc1580115bd30289f7ab82b2342c829e951b48561695ab35a563cf7c2039897ce82752a33cb7943e9171eca4ed2bc4d3a73a3ff7cd8e2040373a1c3a5933fae703c528d58b4878c208031a9b7ba79a1fc42d1f8f15ce89b65a1c879dd095134c021efcee9a800c24178f4be0dea3b6b4f004aa52687163b7d8fe81eb219071e027cd0b42adecbce70fa8b8c45eee962908bf5ad2e238444497cb4718d3d76b4610fea37a6cff1bc0ed54e05e24bee113f51b424bc7f20678b270c4afe0dae20cd533242c147ce6051569ccf50ed6a8a505ea6236904715b1bccfb04422d582036639451268a06583e58ceaf6ed7896aba66ce0acdd067839f0b6335d30642f869fc2ee0cb21e13ffcba84d70218190abf1857f51125ccfc77996dcc2aa5b0767d8e4c073c2b89890b89642dd9a70d32fa9fe892690f603ae6293bfc6d15b8d7b5b281cb2dbca15cc0047e9789e5cb143c9187087b4c2a1c2b1f78b97707bd6f1f3f47757f670b10b6fe4d38eb7813ddfea264d51348815cb2b6e9475d73ff80e3672ce930a361660c9b548d0e20af85d695303b164d8af0327a02065cb6c287c71a44c7daac4447849ab12b9de8056d4ae8383e1a3576b081d22392d0b5f3600a8b27b64a00e74f6d89cda6d6ee35b6248fef07349d33752b80cc1caaadcf277aa0486ed456b5ea99993c2210a40604342c23484a6606982573246d2eb10321f10e2420b1bb6b39f9b95aa4b5de8c69cb002e32ffcd3e961271342aa657c1a3dfd913ac91cb828171ae1f1b210226f7e1886300f29bcea8c712c80d9e22cd20fbab03e5f02a9d13053bcaabdcd1ca049b8907fc32f4e6d2023d70f8985f73b1dab5b241b95a9b577eb665cc2b20b2d33deaf9da6dfc3fdf4b8963bdedd4bff928d47b64f72c3a9e9031b042489ac11941aa7f4c645d0bf88ad0772cc1773c12f058ea95c3253fdc476633cfe51b895242d8d79a8035a42bf317d12f99a74f452c21af41496ed7c0b519b46e10187b2b01a28421903fca39436fd296f1089285a3a60570ed8ece88551e2af9fca0548ff1b3aa946ac4263c73776fabb387cd36bd3b0d00e7c7283f7d716dd5aacb153ce66c6e79c2f9dc2d4e54a54c1a385981d68ebb245d070a50c3c7d7d3ce0adaa7438be7937ddad4c0861b2617605bd8f789b142121db68449929b5c0b798f5b5dee3f8ed53ccb8f319ea01a4662590aacb984f5dc52dac2d9140497716c454f3fa78fc28ef57ac0c8e7bbdb1a948da98bc7718e63570ca21c10c0b33a39da2076775e8a6d57c2a2130f09597e3e359dd8eb0977516fa355bfb29be4214f7f3cc96ee83eec2729c5e2de4a43286717e55d8b4d716c57229fb0f293538cbc8bbefffb60daab39b7f9e56aed34aaacc895b424328e0d51be69fe6f2345243d02f6a766f8db333f4c0ce67254306d271cf6c5bba425df2f5b43de83eea1af83272931a4f21efb92e55ebe831443e925af6ae5ce3f0d5df43a099f072c2ca80c864674c787162c9bebb94231d933d2693932ecbe4beee4a919332503ca2555c64807c793a52268cff7d1e5e807d40fb4881fd7cb30c1b95e26d2e3a4613adaa455c1e1ad0308a117e3e6a42202b6953cd58f7c9e896c0d6ed717ff35cc77f2a570caa67c7b9e944540b2c762c53044b9670ae9fdb602bbd6af5d5c85c46e9d4fb2ed1a67cf4cca8002895adfe9b7e5d0e7f9cbc856625908678dfd18769c309d7102c965e1424d2ac46719c02aa75171c49828414eac548a0e4c3d7374da7f228f9112ff99c50b3dab3ff07b18e4f4c27e9305d2c95128326f0054a6a73e79f4604928a51db87bb3645b1ff17f87c4028c2c21fa7b039bacabd5eb2fc61791af8a5088ea4d7bc886190e2d7582a5f12db4b0cab1be1d8469b5d7c7066846c12003a9757d28de2e6d4dedd4da6176c34bf5cf392722a1aa3e702ed97b2f2930fa4e19d244b647773965b97daa9f23838d56d307de214d26bf852628b19bff9c0789ec084601de36a5f085c1b4fdffff00e5fe3c9a7e3f9517c2634873ebe92b28b8a975cbfee9c2efe8f3f788fec974908b669566920281ae97a841cc3642c69756dd0e17d111a3b5b73cecf181515a1536a4bd03d2cae1cfb511493cc4020eed088b23321242b400412f615fdecf620f7f2fd1297acae448605f5e9c0cd0f75d0e1837daa6e49081fa717b9b72a4b54dde894252a8ea00ae1abc7553e21b63d653ab6e2858c2a1d111c2e527f9e4f5ec4208bf5b18fa09bd1883461e3c9631bdac081d3fe9b1bec024a549307cae04bf2090c8b100a9ca1ff7449d1e9cb80df31b87399353753eecdcf8c44d3ab04f763062d92b1de946af0a38cdc4f0111f0a6f3025856415189a3cd6102c8b658ca4becc85f70fe33dde3fb853c9689f9748e9c28c7457fa39d5fbbffed56afb232c28d291dc584cf3aa403438c5632055f133c8f4fc048374c0ffb3dd3d65b1cbb7817f4a0fdf0bc83cb8caf2c816e5ae8e3c79b24efa7d181b74285206458ae68f8c8a5e045d43371f7a67f78fcf97ac10d230a2d5d06131b29d5aad7a08a1b94a00b0ea06810bf322614dfcc9a864541775b7ae2924d85ffd882323e1f0aa48a9c3c5cfd894ff15d845512387248b7bf3aceea85e7e462c4daeb7e8fd8e5bc3a2b5839de8e21747e28867e732fae3914a0cccd0e322805b233b3122bb1f249b8f004eabaaf4eb33d202318dcf3acf35807881d9388afd9c9ed1615c3f8538400eb3da6a88ff5e0b5821baf576ff52ef55e48fd7cd5d1911e788bde2cd5a021b0e5b02a81c63183a81b43541d85a5741d1c4e3f92f92b2f26461861d18a2507bc6a9c70a7bd1e26a21d5a822643912ce331fcc578641d3029a3e68726ee6b3e27ad61e8936b889a81c68acfa19571d9524e3dcc3b216ea088a1e8cd0b17433414003326512321911d3bce08cae9904bc9bd47bca164ae5d1902e31a6e5ffa98a80a10b6f8c0bbcab6905264b7a906efce5d5189f119620b54788c5967c03e9f898874bba8c014477616b82abe808e324930dad4d28dee98923a874bef0c468fd9123e70603ac13fbc52170439bd870a20dfa3dfc0e4d12ba390651cce877eab34bbe9bf0a97f5d2f6c2d1136eb9004efb211fc9ee238f43dc905baa53d18732c51e876e1f98acaceeebbbeb70c5ece6876199a8710540fd922dbf04fe76028887b71f16ae17e808aecca819defa1edd7292f8f82a495bfa54806ff0085c7f03047b87d779a8efc96ce6ee2ffbf446dccf82d1b472edcf745b8c73f13df67765866490e59d98e2be3fd40c36c7c32e835c543869c8e01eded6bdb96a01e015f4fa7d19560af16310adf86a6a2e921231cf494e83b3a1e3367b7eab56bc05c0361f00c7506843a9c881288e20ef9f2bfbee83ceec5b2c0622872f91bcd63828f7c7684a798a241f76533fd49a15c27b216c5ab2274ba3618b9df8c6ce6a4c5f16f78385aa56e294ad630515f2dc348ffa226e44ab88bec0d27f36c8bcd7a8f50e4a890a978b1e665777921798214ea0d979cabc7e83f342ed56d2101277ce08b6f514347302a63c6ce52fe2b98f67c05aace1d6d5314b12dc1698f2d87a2a730ccd03eebc24cbadff12f3225b8d1db2ac998271666ac3e59514afecb6ca93e8f5a2d871b333014a519f078e4dfc333376376a3c302b3d76e0f24dc2391661cae54402bfed4c72d0fed8e141148658c11fad7db1d6405cb2fb69954ac444298516137ad69f2d6bb57f433adc1edb3ca52625986cb66999428773d2673f3e03638d4247d9923ee4990b0b422ca4bd47abff2e1ba46376c2a0a8f2813ca0b1fe67057708dd67810ae826d28040d3b1cc43ac95e1bec964a3bf9913af7292d651625f555a8c6ba7d5b07153eb63f1d8f9b312a72563ce703fc81ebb07aa773d2468cef428d4b6b67d51e088eac3e3d8f9a0a58b0fc8601814976da6aef63ffe3e92673b7cf0d8bec17f0e8791d016066c6146bbbec222ad5d4156c8742e912b692e8a7853edeab83cf4bc42285b3924feab4f3eebff25ae94838cee5d63fa94c79d0db64cc71883dd5e606ba4d86ed9c89320b052ecc23a41db52738b0d277f828491823b7a3760f95ba65c655f6316d4b2448963a4814dd4af34b12725bf4cf5941dcfd6d22199d7e25bd39ceb0065717584efc7d92ffb97ff5f683b5f86d5b5180714d5c9efec49854410e5515a715fcbf62c7585bfa20f19f0bb66f730bbea0be0fbc0117dda274bde1c299fb7be84839e3ec5d99956ac051af2417c8a2c4c4973445aee11261c344ba2be8422052526c455882d07776639597ea8bedbddca8095edd9a16ce3a58517dfe4ad1879d94844ec51d8bd547fa129df2319955bad5a15420ddf5c25fd43c1430f7c13c8ee9edf53d481e3f4847f0b1292f3e5d92ac218df8bad9e49b87d866a10e8768c454b165fe483f9fb9781eecd90f1841a8fd2cab08d5c60df4ad59a58d8e723bedfafa641889a371b903aaaf8c27447325ac36b8ed58a8a826f3db97e4ee39a70bef2d27be82553fc341b1ae3db97d18ba88147ba4fbe2670cda8bb888c8fd7970bfc5bbd84ead1cfcf8c9fc38fbb33cf3dee39c970463e2ff3f980494ccb305df7bab191d7dfaad822fbdc5b51823c47512b553e8f552409ee0a1d7606cda91c12728f1a1a92cee7a91a323a67f0066a1ad6d8776c9872adbdc5958192b2a539fc2cb870697f6b83f4fabebc6b57d4081dccb118a22ae89f55f0b077747d52f7482c36410ffbde73b19c0fade0fb2eb46efe9a1e9240015c3e309b6ce0c37f56f0252456a275fb52743673dd24ac81847c609a40a3381cb7f5c2c4ab63d1e0ac878b5cd2a6b7aaf961016be3cc144f64699ef420554c277b6fbd7ca48e82c05fa3fb888e90f89398c49e92b8db9583c790072484e87c09edca665d8f92303cf7b4ddce772cb4a41a9729139392883b36ce7351fdb1a28d1b14cd143786284991cce661920c69ba0574d7c1f967d72868f1a6cd6da73723f31d865bec3195b699e7166fff28fc22ae597c5736766288c42ee77b91468dad21ef391feaaf583cecd2496337dc27c0f1c1a290d1a9d2b65bf6849f78daa9d9c2fc731f493ccf7575e96314d0249d92fe3a84e8549d412a6d1e511cd0846549566356432f8511be7c8a488a8c9243bb920d7ed6029b49576cd4fc2aefa63c15663af569b2a4832b80be7e5bdd6e1e31ab4a26b6d2e673f58edc29646d2431917c666453169d5539a1b03faffec740b13ced10257a3fbccf7855f2529c1afb79ab85807823347837de1bbac857d07ee88b50cce83b01e0d057b68338048d2e8386c705a32285c1bb59a29285979a45b1bf5652ef59fb39eed5914e3254d610a5266b7726055ce1835847333d9c08614aa19325c5504422bef9db8b150506f25c040f807d894eb58e716923e9d7ddc361d910dcacace46dac5d7cfbe26cf61c6daf4e26a03f5d32b2aad7361c2a8314d6ac51cdf0156acf0521bf60bbaa833583b4124b5ab1cd3aad3c11bb839e1c97810b2a223cd8ef589ddccefbfa7fd5f70baf3575a4c60fe2985adca80c5a51c8da2ec921bd492df4463202ea2830352e61f92ceb23685b5176b30dc140ff98e157216020c1a8444b8c03d9bd14b01eed99700b80fc4e7e0a0f65d030145dba9ec1afe82630fd34beb90a8d465ef56dacae9c7e8d410b20c26e007b6a79e28008393e7e21e11838a7651644ffc65bb769655c5e269f1f0ce81da4ba80d8f5f5bb024bc2a1bd2bf31b1ecb6e10ac3315ac8148fe9cc3bf1d87f796330e57bd65794e3ffb1097e0783d5821a850a45eff22b33542a2eeba1367c8f2f81feb4dba3769e6669835cc553294d94e92979c47dc4644fc477f140da47c64d67059e505574423e6a02c17d2f824a0dcce02c8a71b472604652c76bd2c892913d3ceda44a0fc4c271e232f8830176fd0285cb3ea4e662d410268be8b598aa3e79f3048c5b6268c282a71073939dbf4ceadebe6f7d1f7af33a80f30aaaa300298ed7119f01d1de810043924bf46e47ee2155dcc3cc45a8717b7a385f37b805d83a4f163f0a494b096c1568c11e54e150a2e5a180c99514289e9f2d2ab263eb959bdf36f771cd8f037c1e112f97d3f6049675af926529d84c8963c36125ee397b98b67b8f380a750d458c75a5603b4900bc6de7f698ec03a3edb071d58c5d7c2edd85e1bfc3e85b10f28b6ddac9139e713e5ff68bc6af54aba0e9028eec97bd9926d7eba8ed0f3ddc1d28729e781307f141fd687f97d3ab06eff6fa0c1dc4185f77833c927220906080dcf97b4a1b6f8d380a40b49ba9a70cc9b2eb2824b5f65ca19f8b48e5b74d520f2cc4e55d542ebc0a05ffcce16e8e0567007e1b8b57042e20a83c6825c4a66e626799bbcf93e6dba09d762a65c53863126b12d5bc1a7fd4115ba7cc56c02b6faab47bdfb57a02029a9f1d3c8b6d319ee985fe4ac4b58bbec81361b5d18a33ce6b6837f34b6c7e85f031564fc5ad37ed7f15c19afd0c1286966f3bd6882fa5f8fdde03b376404eaa6db5e6baffb47b7bc78ecea70e3eaec1144a869a793d5fb3b9cd4ee4b3ca7d4116f456dde4fe41af468d8e5abcf3f4caf15ccd2aa3c9dc5ec895a941397e651b5b4d259289d194018dbc02dc7df790e59040c8f4686d078761976f7900436e996690a2c3ecd16a4c9e3d82a3cc6c80fb62f6bf450b456b5abbd9f68bb9dd94ab173359390c04faffa635be8e014c01c6df726d4e65438821538115cb1047188ae7235b88738790045a7cc4ff6a0358a98cf37c95e349a863d61169d2c61028d00c55da7bc1b0686e3fb189a6ebfc615aa47628ab05667dbcd23b4891167bdcc81bede39237da4a605ebea96dcd99b66a19aed19b29b818d14194b04ba8cbb5db8f2bc6a0c84e8f4823cf3818a9b304663df305dbbb408f8e045e88d56f29fb92f055d6ed27f08543ddc0c8ccafa32620478a0ceaaa3de4e2111bc9424c280876fb2f14e57490f77919ab367fe0bca3a378445038e58a0a7b0219f3a6cc21ba30f37f0d4dd35067edf4181e7c52619c68e74e8056312e165df0bb40cf8a7d7e3a4728efe82d0aebbf21dee9c734478f29db804526f3ab241833dcf106f2b3a2f0e24cb0d47cbc2854f2bc157c532d45aa72ebab783f634fa39d573447ad510f158b981678ac9595862f0eb4ab8b4ecb1c4aeb9098c680e06518c3e0f95942b50c4454997c6f1b0e89a097596d370db549b4a512acd2995ef8dcb648c1034f89329edce3815b219147189d5c10d6fad1435868bab437bc2387dc7b7e3fc860f83668f5156f956485404b07132bd16a5c5a7f29c0901b19a7f2a1d10b1227e27d10d17079ac6ce438dea5054894830abfbcbfbbd5680e982a3ab8c8ac38ba56ef4702f7b0562c322a0af35d14c0095d804c2d40e32d99a2365e5cc9bd9a82d47c945985a257afd81212cdc850aa88497c3ffd873d1e6ee07707aced84de9782af7030fd5fd62cfb3afffd420124f8e3754ecaf8a632c7e5e6ef6b020e81ad42a1ebac2b644f808c759681123803f08440abf76a86d92f2d1b477b231df86f8c3c15374171900149d7bf29e7135b5a0ded41af5c96eab58774cbe78669b8d47ad6c92e944b606d302cade533fa84a18d83cdb4607affb7e2bbb8c862311b9432276bfc9e9548d7afa459b1c1d084a9d4fcec812c7f10294a837622c047d26ac6403c34ff53cd27312dae6bc4411e0928a997344e25c4e3d0bb54738e45f7e14fb8ec2f68251aeaad3905f8b3ca7e359087093e537e62b0870e1c710f8f46314dffbe375f1305a4d7abd99603586518a94a7914dbfe8051e29457d4c814511af38274f1965181492dfe7c8f1f23968c100f747630192bfa53480b3733f6b40f39fc4d0c42fd624a1c2f94c130fc13c63018ab4d3368f0e6572a080e907023777e9b9222cb5c48141af80afd8c2ebbf2f7250010fb8dd0f16a4fdb6b2aa86df250c2a8fe4076a830b7d3b12d63bdcd150ddcb94514378b391234e555a1bca5dce5ac67f09196357b5417ab2fac3dfb8720878c213c7410e67c8f28c5a001e155f7172e7ef8a90011b54d868cc9cc363996081f8267418badc158f23e02f8fd5d32f52912e809f1f3377a2a5bfb69657cc92053523bb65aaae1e56235422462d0fca6a360095422d7fe5618b07d276c7f4e6298d2f781ee11f7eeb26754bda3a35c539263b685e1f596a1710bbb697fe4fd882103a6ab9069f9adc147a5f23df70ee95da006b2887c61d81ef52110d9c6e7d45e29e9e804f825d65ceed30d8582d055f851522f8fd8c6fd21f931ca7d66443a03f9ca0dace5cdbacd07e23b66dcec29d49a772e3abd84d45e540284ad2672ffc83688512ec8af25b88518bfd4d69852595d1065b658e3919565d5ecd5177466b4f932f8aee624f09d8b11f5b866d359de235b975cfb2a8dd2ee3384eb7694e2a8941f4b40b9fc5bb56e08f5a8a7be0fe53b6ad451ec36887bfd76af2ab3d463c8b60aaddaa247fe255bd7c85f80b86136482e343fcbaa567f3945a2e96e49e380fb983323462559756c489b809b1fa3a7914366a415806a872458cd411e82eddf61986119d27f29e795d363b149c7bf8613368694763ab4318461843c7e10c5a001b2c7b39427f2b10b564a5dfbaed55b9537f7dcf742da24a96e6c77de551746011db4fc4648812776f289af6a8347a782eccb95d5c03228ff1fc0351eabdf52dffc8af2d24c5311036d0d1f36f12a9bf0e41d3704d2d5de3cd051c3c3047db2754e686a7d6c12e08192cae1261b62230426fa989091afa369f401d0227aca09c1899ec1ff0a8ae8e8be715d45de68165551ca33709b8ca9be36458db58e3319f56c816a0099bf501218f95095fde908fb20bba42c44fb5eb0a7d27019a34f108c14e5991a7b733464b7fb82cf0a9d3421c893491f8bd5ed1f29ce7e899233881e0d760d3791c33876fd12c48d238bfbe932b6d3c9813a1bd4f09c23ae598d87f6e1bb6ce23ceab98338a3eeabbe35cafb75871241bf74db48a9890c668ba0c59791bd6b315bfca0c189e70e65b2bb9a804af8e37128e0f09c056549f09192c33c4e3a9fdbbfee77f17e1b778a6f56567f44d9abea15a84492908ce1a458b628becf281361067230a030b8d35f074124ecdb5491bf6e0a662b03a17b60d0bc2226fc8bcafa15a5b2910dd7852838e1bdec1809a2859dc80a5a546e2b585befa0e25de93bed4f7fa4afa481e389073e4c0d2f893c56f2ca912cdf13ae607f5a943d76007de3a140f6ca5aa47c61d5dd4d197957f36fcabcb173a1bc4f4a679883739eff3b1a4ea1c3e9258066ced998701e317de35fe8662a6d199e1237a5b05068feb89f060ca5b12f21eddf55b926486f62de137867072bb6208bc1bbfee07e7ca414c6d42f32c28a27511f297ab54b0fddd44235b29ebf523148f5fa5866463f651de7dc1de9fc7ac11efeae67a21d0325d81e8a36fb0f9fea24fdc9326d6def15e8b97ad078d8d1df643b9fc6ed2cdf7d4082a42d3e43d375f96d0a72de3f10fff0181c8a6c3f978017e64fac18d275993cc21a0b7ace95f80c274522a44a465119bd79c9b41219fd8731855fb6bd11c5843b73ebded398454e38458905ff4509e824bf920776c58e57a1dc5d9652d85f499bf0a478693c0626cc9301aa30b1c1ac87a1d8db592fb646b80d7c37137e8744fc7b4b0724c35a177cde2ccf202cdc5acef8bd402063835b6c0d3896ada8967a1ca6d15ca9d4c9ce961019ffd5817c03779928360a0c05d457abab9f8ac0478f6c431a95a73ee41c819c305e44147be9a200d3fe32b89f17fec15fe0d2398deed2e9fe06608ac92226368703c367bc83f895587d97ed5edbab8dc1f6f096aaf8af63fc567567adcf3ff744ea9ac4fa18d9bf04dd9a12c67728d4050cb9abfcfc75fbf4228a9d6a02bd4ef7ca4062951be3f1bcb5b8be3fa74320004c3ff006cae650ce3570a7e5bd7bb578e72b5d5ad8e11c76f5bef79faeeccc18f3347806e819e39be1d0b5a23f0d5dc3c2595a241c3b1e0efb1ce684f14ae6bada48262446d265d476bff9e79ea78de12bd85ad4fa7b1b3fa727dc6a224abe04c793a6fbb851c3ec25b718b92bfa6010c747b32de6d234d387b0a2a3a6e49df7401388cf8f532726fb6b807fe0b39379a7b01cc7e1606c0985ffd683eaba2efed5822a70a325dddcee93d826d14a3e154058f1c1cf53e2e268f58c661fc62bcde1add5854dcd15a6d50fd91537e9bdbb0d95e4711411bc26ecca156b9ae7ee815c5ad9ab9a4076c8a1e149a50428072bc66d338b383d8fd2d21d3c08216af0f881c1628eeb6db1c7ab6945a6df6a14fcab6f9ad188f2f02c0c925270415ca48ea942910af1da238aabea388bcb097de9a17b1ba408c6b019427c21f0f9d277599d3cff01153b63c6210b990af343227d5c73d18029467525aca095177e400338a62a90ab462b7f080b9d779909ac06c9b7e14f03bdbade7b3b56561002cb6ff82e8af207b15f762a6f34c64b18eb2bbf0cd93a16d29eb95327ebccd967b06497e2486c9ab9943539a3550e304f4ca4600825fa1a4096792af0eed530e9e27b3da43d20703ce1ca6dace1ea24e56b905878964e16870da48da6b5d8ba771f322dfcb34f8c6d508f276f01bc204dc8ac4a16c96be0160371c2f157db9c9551a6908cdcb880795a89c58e40f013d811ad956151b9ae65d792d2c29c400b054872ad2272e4380b37577f5aa4fda51358c1aa21da44c3eab7b01ce72b524232384598adcece8f2c1185ea63d6f93bec638e5070050e229e4707a8c2343fdc43c82e206c19ed137f53de3ee9e1a1a281c6bdc8c2e503afc24a0ea4dba5c787cf3cc40ae8283bb0093598aefbbc30c388bf17022cd23247384a1260af1a2060377e3e719ce47973e31aac9ba89b7f0301a735a84c8707d590d20b6a295a49b771b05a033c1085e4eba0fcecfed9f9b97a00cdbeb76fa2509fd3e7b4cf8b657082074476422cf273f5eaec9a7b8b0b98e21b954a2573b2db7f9c9b65034d235d65cb580e10d42bef06e2f910e754076c5a011f233dc456f747d6501218d95b350c2d5b4866855161fbe79138788ae271fc1824f2c0f0e57d729e648ddfbd20e827a3165f9f1d99fd651123446b2d9a9cebb171d516f596412cdbc866f35f7a41a0d77b949229e9a977c5c53d803e327daf6549b7b5c3f88911a526e964ae9ecb5b2cd0ff20008b7d7ae11df081a2e0faa25799662db3f48318d3ca0c09f5325b3eace1f278add71bec6a248afe68577bf254ac130dbca76c40cc6803b0047d65e76598f1b91b54cdcb9bfa20bd695b42c08539583a61449e6a70c080711d93197b94d2be6edcc9d1c4ab3b9012fa8a83334af5d57c167b986bba9552d6fb0426edfa377a9919b4f2db14ba2d1370c45ae14a018f003571e1d26f578450d4a195993e47d48ae6dea27f1d4fa0646e81b4ff2e20c2797086a50af33314e93260fdc270e32b2a83cda4061e5b2f5f4fa65201083bb2b29c8a947be2a7046d9bedb7ca0f0401d5b1b471d45d79b01554c310e8999f58a4e2c992e37893e0e3dcb7278615358444000f367889d674f906e4dfd99c1fc27e02c31d2d6565ec24df9ee7b2beeacf873fef6c1169652fc061fee7fd57176e41ac78eda478371a91393690d6bcef97e702932537b45d7f74bccf732bc6243a7a8ab4ad9da6712fcdd963b3987c2b6d638a7249cc766cddc3e1e463ff452ffb103e40faa9c665598e3a824556ee8c9bda49de3a12066b36949000377233f3bf5fa200d299d8ad2d53e4fe6b5f908148a5a2ed62c7f1694bfa46e6262621b8428ca8e384507f5eb149ffddfc38af24aa68272ca5e946293981720ff7b157bfa5e412e3bf229d7a3845a50615be5a3360da94ed396530ba374d5f2246406bb0c9e81fe9c8f34b86eea110fbf7d35203a716486ebeca74bcef2ca5674b822ac48e2c195adaa523e08d130cf6a83836fb01b2b6eb8b4045f60a35fa86ef1ced8833108ff6dffe4e73a09a2c5c3ba376c5d0f5e16eb76fa6ab649d83d52bbc3d91bb04d162a0f5bb87f7db13e0a9ac3dad123916ab4c15ff6878676b9ec8cf6cef72404810ed005395309a0dde6b59ee4d7024dc4514f098d536c27c8c0dbab66244065a1fdb0393806de0a0ed5e3b6abb5649ceb95036dce5d232ed949fd1f2d9bd75097ec6f567d1ef9902f35bc7595ac308b81fae96592405c19732138c4c7269d56329ccb0d1d873c6b4aa5aebe883e6b71d8eea856e7cb7d374ae7fa8913dcefc3a873b97cd8f198504ca3fa921f47a1cf902c6d3d485158f02770dd41be7d849b5a2bdb877c14f3dc1c1394831c49467e6e8bd2d648c5195750b802cc60ec058d7edeb9b4c9a21c76a076a93c1f0ae5ff586e37b72c8fd86b9ed836a6647d37166a57f50cb066f1458e369a2907483e5571507b19659799cb9a22965f41f0f388c10af5ecad2e1f89b2267f5f67b76fa51541d06d3f818841b8bc9681bd00940731bbc8ceccad2521bb1b719b8094600d5db053316e7486182b2a04e2f03943c0ff6b68b2fec58caec7fe7cad839fd46a64849eeff747eeb79829cc654dc15573a43142d797c3341ce825533d2f50b3dbff7faf48fd250ebe9dc8d458f06dc651b87e557774c050cf3e1bfc3d1b7292835e46c2bd793bd7cde7ce2abf82bbe1cf0d0c89afd0bcac2849acc08e5609d56bc95ca0992a0b1021642c30044f7ba1a9bfecd909574ba19bc327781c4a676a2707b235ba090853811596770c1ab836baac2dcf00a2f31ef09571f66c1d7df83499efbd9a8d4bc26f25dd38edcc004b202e3442ba1e8ab8bbe297121f9d98b946fc8299c7472ac43037e19958a9267b989ddaf79fc851d42a981bc14ba32c50e74169e43f7f66c09f104d2167073a99cd5f1c5c6daff9db8d5ad32ee1895ee8819214b80887b4800b457e58884a45cae266d8b9233e7fdf17a88f6927ba46cdf705fba44280b828648e79079ed097dc0a0e163ab10ab8dca9e3483aa9d613493e85c7c61162c0146b6e697e346d79d588012cc1506b7fd66e85d760afcb29cc78cde3e56438f909926a3567602b673675756a35e59c93a645a9ecf08216ccdddf70c54e50c41e952f42f7efc5a926b2785d4430e5724e07faab38e59f5f1763688cb5825c2adb3f25bf935de1250a964d5a1f657bf5b8ec3ef8e02408c47d7f35607f4b2324be33b3b19891ed069bb7e3299560520f212f3a55e0587534e83badf0fe3a0199431c5925d19b444202e36a29440bbd54840b27067a97b0b97d387dc62cbdb2e570c8a3d1bf5a054642c77a2e39a79b7d0807086398a61eb35820c6703eceb5648f2f2298e86b6139d2965a32aac7f5606bcf35517deae963b67ed029bc363c0650488fff7c3eba536b8ec9b7edae0ec2674f641bd1f1ca0d89ebd0f3177d18fcb17af992cdf80a326e21bf4d4bf46ac08f9bce6ea4f1668b2495a6de8943a0b29b1048b0518fe9bf8d73fe20c752ab78e5b8294c6ef22023032d205ecebe487ca2d6cb7377e8aade33d0b98e70bd06b82caef1127a5adac94c137667dca88049c1d19ab017bf8ab1182d7c8c4f6a88786d630a579319352cc63bc520db536a330dfbb25cde0f073f4bc7ee61a559af580fb1feed2b0695ea75d5a572b1240260bfe8a71bb2937c64cbfc2b435bf19051a2941b3c129ab81dbe5fe934f4785a7e67007c3fd11c590c9c4f68f1dc63cc1169d5f7d47b07354ba8e25de166399eee36b919422e9234a1df24027f252e6c54044d86136406293085018418ad6dcccb387e42fb1c0c2592825d92494422fedee58aaf9c5f01b902f4e3264a1379b85f91640890a01713e0e9ad6badbde7fb655581c58d31c92e1a6eea422b8f6c77c14834dbedd19f9fc9163e0d5a739c07588fbd10dd4dedc1e683aed3a8cd8ac78afcb1abdfe5b6c7539e8e6580898695191e4ec9c9689438390d15a3fc7ce70ef4a7cf8378236bbfdbc73c3a53a2ad1e2bb8e960c13c3980050dac333e3d573b6b5d3a67816c92234428756f74baeb09d3f0469b5952cea8aceebb540dc8780f906fcbd0d301d17bbe55a15d42112de06a2730a80b849a270aaee46bb0c28f21240d404f2dc6e34e37c48a3c0107314cc0c27e57ae5250302a20fa105a33da068cc635b1821436afdbba043e141e04586b2ec18a2c9ea6d78814b3ec6d140a43f7b8a6a157b56752abc608ea6b634f8414158066965e9d622063d42f9d87720dbb956a57441e398acfa17dfb85e78a23675b1a517e635a8ee32713f99e9676422c8337512a7844b16b55e3337fdd232d9522f0804ac7f81aa6b21ae2b9b2a2e51659b1fc0ce52b15a2751a02f4e205c6c7749de81ef85029da4790fc598b7c274df675fcefe1804d639d9ee7f2d4c58c67e4ae91ff9f6b23a045ef28cc1527c4864ed1241e949e361d33300d43daf256c321439397f5e2c3449a0f5b3de520847740a53e863071824dfd6606ea6d7a772349200f86945ad1ef396254f4ec57d1eb40c30fecfe05ee7f86bfb5d304971ec88d3e6159b67fe2098282fb668cccd513b67074a373861bc738690ecf6379fa825c163d0043ff411a554b77b1bc262d973c98d6fdfd80d2954052e5880a34c3253f4f81aaa93a0b4490c68a9fa32c02a533f307fbdfada9dfa75007780a9b8ce6a53cc9b9aa28577c0b73ae8b7650539487e5bfd8ed8d9026afa68eee98aa9ff4f3866fb1f7043a302378681020eb98f312d9aeaf15ea505075c9caf069864f96b9cfbca2f36ea161e3291f6c83da71b2058a7b83a622cd1561e0541e781c0446353da628be284a4804f32c42e28867c16afe1034e74916d9d4365ac8e51a28276a00be54c1f7b77f2161541feb84b5655c8100be7030208a09fd83ce55615201ef7cee340cb9394f541ce92c31b37fecf1951ae0fd2ab0bd5612eab9e419b740369456c3b701fb866fa16bb46ccdd2779e4b43967a83db748ee485c5fa62408826c85bc6c86e56fd6228fc504d770f7f00031ef49241ce94ecac5491e76927913702c1198ee244bb972801e5e7062affe6a950f74c8f54a3c043eac11ccffe10816ea114e448a5cb1f631858e581ddcc74ec4759e5afd36c98f12c69188fd76089c8dc565c740d8e5fce483d1e66e85741ab70ca7082825277076e98825250a9c6b7a481a653b7400d401d02ec4988bf35f866d4acce72036cabda7e0435f28aa5304f0e3c951be637eaf6d4455da8023f1abcb68c3de3b51eec2fe7222cf580357009f375a0bea5902306fe01b90d06614c0adb1fdbc7041891d9a97bf400eda6082104e75874547b09db09f481ce417ed9f3d2b5be6b687b7bbe71719c45198183162d81b641efe92008b76eaf4ccc686ed73b0528b33de368eb8ca90fbe9c02adda4f1e5336dc08f0869dc1388cccee47c46a697b5868f0bd81dd5adade314976c8eae4b01fe6484a9b30fd69387ebc7f379bd6640399aed8b4368f6b7be831e878ed4ec265093cb3b6929766fde296a24b2153215f7d5e89aff1a07dcec99b355ac9485b9f5bb8cff38de1d4f3fdfdafe353568aa53768c56eb42507bcbb36c8a848396a1017670a09f0d133ba725819f37f1b8826af64ff68aa93739cefb1c4c00d8574d506a5114cb0247a1cdbdedbb4de0831284fffaa1558ea771492e70126a1e42e7d391e5aa7d60fee6ffc5479a277707c102e4945d080f97499f2479bab12c42e2bdcaddcb23f68c4d4e166837ebf0048e09ccaafb05249efff5e719b08149a4a2a976ce97139b4b053190c2e407e9bb310292a81bbbc6d90304d32ecca2094e2d60f20146f4f7cb0b4f5681ec7cb8300b7056a07ed294bf2bbca0baffd8e9ad1ae92199010365cbab42e4feb4dc226ba592ae77530bcfccf723868aaa6b17ac31d9b5ad312b6da80b8259e40a37f2124f662ac9f79dc11ef2bbb8b765b1687b90c21ebf6a7045d8209d4f32562f73dc446ca5395b22a575ccd027abd078acc70f393796d9dd74d7b694480d1c5c5d8299e8020c96258cafbc40cd57eb1e7f4a613b924c2f24ef2682c1e104ae50c5d89a7c9aaebd26b7aeb78754f458c91b7adb079e29379e6732b06446d1e0cdda573883589c2af1e8d52e6aa2a3fa342616c4a74ce3a22066342c707b658542abbf925e31aceaef0aedae46c10559c20866f5cb7415e5c127e8b122fe9ab77f3f506266150f2a30aa2fe7adb42f177874c7b92981bb041966a0bd20330cd7f8faf9fd819222890a086a4fae50a196f1cdf48d61bc1b6fb65b7223d738c23a8efa55b2a476871a7b34bdf02e7cb4ee11db16d8ac69aeadbf2097b888861261f6de04357ffa0b5d22423b94715d0766c4788a135523ed7c389527165d3ea5236faa27bc741e8418c11d534a47063e681154017ff63325b8240c8b00666195147232fd05fb3e6f779ef54696e83542acac5c4a601efc146615ecf5072dbea5302f9205a2b97e9b73f98f13c5b2ce5d40a530fe9cdcf98edc7c14ca297d912bcd7767ad71a9390e68719967fa2b48aa1db66ce21450bf810136335f814f2b29ec3ff9288c3d8e94ed696cd20b49f67152e72466e266c2d397fae8ad3a214fded1a5a5fb0ceb22235650f2403b20093d88d166178fd09cf0793b66fd4a0e1963a2d7a81033259dd19f6554d6318e4fd265d6c0eea74182b9d4f462fe54f962b23f20a0f5908dfa14610f6751b6ad18e31ca4df9525b6bcddd1ae1ea2867636f73298d26f391c7e40de411623a24ed24dbc30210426e161092837abfe3e3948bd9fad6b1d470decd73b6d503b517af9ba5a86ee9f9b091ffa7bdb2deea010debbb33a25b4135aeefd5febe0e167a96a790aebe9b8168c4267d4868a0839691e8239d4fbbdd81a3a7b6714a4f97306a3ef9646863a5fe522b929e6eacf95b0d601c88fb8aa434336ae8582b9c08c0fc7252ff9805f318f5dbcddab253cdad270724e746dfb10e13bfe65e10de0987127121f7fb54405ff460de66c1f13751228e1a026deba3133f716dea52da5d5955df4588199c736af20d54a7b64a179386e7e6578f4db972ab871a144329b0a0408c6661d5c4249b6f83cb733307e5eb75ffe802d88300903ee281556e3b8a7287643153b0decb2187a1c16e837a3e354e91bf7c7db74457a253d3a3ca4df07ac6d408ef7b6e2b008cf5527cfbbd29246f4f3e583705be8a71b13531fa4a35a8141fad7ea8e5a1e24387bb605a43f678b9465e3755453c10a69d02ec64bac031341012e984aa1b460c7e58452e0df955b3adea0e643e5ce14bd10afa084ec6fa270bebe9774c91527bbd430fc72b18edc8b4f7fbef18a9a9c915f413018e7c44399569d517a7ac2a9ae6c468d345a3b491a76bea9ee03544a1ed233ef5f357aa50d35744c9c7533d53ccdab5f177874fa89cc10d792a0176a8f94cf39e65549988d900dbd5ce34f3a9a65d260a914babc849269d87de6ef56d536757a7a98bb3a27b5913377e09dba5fe13d8ff94aa35f38dcdc23e81de7ffde27de494cb188d2143f83fbdd17c9a5e5ac67406929d581e9fe91c76dc04886bcd81034971db608afa6ee55f7b3d85bf643996ba8c74caad8d9a1f6a9d49386d22e60d8c3c98ffc9ed945ba3d02b9bd686609985e249dd27da78525d54cd239da58669540d633a2f95340e06bf377ebd8283a3f98fe2819417b73831a5021bc63c7ea086145c95f8144ce69acb443ca8cf623ffb1f87f2c86bdafbd84a7b7af6e4f41250bd87bfe42557d10763b28ce243799e277a8412b67f24de9969dbf8304cef9a2c3cd89299c9a92a901c601bd643ae00ffba93e6f2f51fca75b0252d6e7e5a4dfcfae92da80f1b7df0b3835625695f1b8b95d4ba59dafc04284b4a7c5f443943fd8163af7484bfd974aafa12622192bb4982638b87bd1b25cab2f7af16e541450d645c1c358c0da5a81e7c14298600c530d38a1afd39c98e7a5bb7370c7f8dff574df5f662bb2716cc75a2c5e082c67178335dd866c31169a11a1d62570741d4faab8bdaaf9705cd1e774c01f74531ca3f31af0324f59d4585db78850e4944782cc363d6518fbe60a3b2ecb528385eec372ea696bd10e6ab45225b007b1833cb27ec11b1475f37adcf16fffefa2293121493de216af771ca14f41c7c7fd0358578ad18a7fe1f14305982e1ce45fb35228ef59994dc4db6532ec6f10d5c1e7bb3e1e80ae5ac441b57e2f755ed562ddc76b8e1f79d8299a3553fc3036b785b8d40a925f6bcc7437f295beab988c2e9b3e82f9c407f4b89b4f4f659cea2081b0aced0ab3520ecd8fee273cac2fa79edb835a77a6f1e013855f0bb61dba834ba856fdf349b448b7cd4458084e192231c9724fa1b245dac291947cc1d48ec6b86e0d3f9028e4ea698b0417e7182f757ca64391a68113f07fa95174b8b588fbfba5ee234a1dd9c1167871f1d007da010ac7abbd53fc62030aa4a7131f0024442444ef476221b184e4191c4a9ba6ee8022a12bdd8a91438cf834a743704c4848b798e77473cfbc5c9bf18b2f96f870b9f4d9ae8039a985ea033e1a9c9b4239b247f3c681da81c08695723af7514e9eb1dd47d79f8abe1a0dfef276783698f117e304011f7acf715c7959fa9b00f6dd0d31fab0905a9d5c67696869aee918088493e907baa17be31d60531679b309b4c8da17b477093b2dcb48e5615225681fc0f8321484389817efa15c2c472a040aa50b772192340aa0d2bf860c7705cbbb663dbc7637f624fd40de3d9fd352c718f4c03a16dc0a6cec5cdaabdbf0aab6876f0eadaf18886c4fd1727ba4801d9c0435790e0560a3fe53b21e462a9dae1e03d985531a407b6c8dcb27509d0ab0a475e348d47ae7e9b4e639d33a14f097456c9275c45dc67b0e3c2df7aade5d32d1bdaaa1b9ee5ca1804269837f5b467e8acef797734e3efb9270eb9eab305fcde242a49a37131259c261ad6ecad9e5cdd96208fa57402df17d3504de713250f01b16fb9c452c70d06f528c9a88c13128d99f5612abc8407f3a3c49b41ec41a6fd65891cebfccb238b8761b867ff039504c2e009d56db4a3508c1b8156d560ea3a2ed4d509ea585f1b190301c6884ae06189519e0a31769dae7f70f42c8a7b664315c743bba3f13a7ccd7cb5c8f3ce35a536c4b93e956ec7f64b44c159c0a253d55635c999634f4fa13fc0843c482036bcf41999ad8cf6175b8fbad4cdfb026cc772d120683107d5e2bd99284105df9ff554a2b1b9ca36d9964cfe5e3899ac3686c28fb4470a16c92837614b9cb96e9b3a6b08b30919f0f010c12884e033057edf278ab4574a4bbddf6a6c4450651efcbee2eee364d37cc7e2e0249abd4ac6489d2bcc67507d9ccbe4fee5f496116c47ed92bee185de7b195f67d750522fa2a72a83525f8d63c23f3aa5efbbb90a809992896400fec11443bccfb0b147269a0887bec9c2580be493014742b0f75d806f58bb66bf6f5876444920cdb4e426bc7ef3efa9562f0962beff9d51185a752c2bcf97f729f14544cf217b7ee92d60c9b488ac1613ae802a8595f0b8484545599790eb77d6d90a0306c0200a7d74de42e7f7797f473ff1e6e05b11068c4fa8c84b1b9753d496d78e016a30750e9d62891287cb3f2c62c3e9a0ecc5b1592d1a428926d2fa83bd2cac4d0a6867fd97aff3541fe17cba5f7e347a63afb33e78469d72f356d0e5d233621f814eeb786994e3df711f5eb2a24eca2104398f6a1620d3ea5de6084b1bb1ff5cd71f017751272170f57474b265be97110993ad5353e06eadca99f7decdec2cefdb52342ca31830dfdd99f7085eb54243b2e5a4621675617ed78bc44c16df135bbf68f744211d34bb218cc1478d2d529ee20a5928572b38cadde8881b26965fb8a63cfbc24eafc96bbdd21d76e88d5421244261a232bd169761ae3b765a01921bfdb25cab1612a5b9eef79f3066629845f4f1691062e1f2a40aff72afc5701a5f8d3adb48c29d25ba033204dfc70e1743bfad4ba60fc4d7566a0e242819ee8927864b2427fc05fda0a4cd2bf00a2efcbfa11be5e59c0ecc7a050f57eb8276b626400a12645d445df9b2ba62013cbf275c3651f1159e9250fec6202243869587751c4f6d67a005d9be5afedc5543b3721b92f22acbfed15523a1f6410983368a79e62adfd20d2847d4fbb1b308a1ef03a48f9b1219e3d982d38c5a8fd74eafd7885b0837ef427657f0834108ef87316bdb45ad8d28fe619be0d0194dbd8c2d9f5831868fc62510c26ee4f8247f7975674fdd5152873a4193430e31fb8f9606e5c96485c971687dfe7cc70228437041535d02ff90892b380881ee0c53fe19045f8d19df33acb94eb97f6da1e91db9e2f52fd135e21a9f7c65aa9c8a36ac992b8e60453225b5a5a507087b1ef9f92c770e6a2772abc1d62dfad030bf66c4b5c09cccbbc032298e2cc7ffc702d5266d8bfafe301256245ece0e4098ad975213bf3bb46e0a0901247593cc703d45bf2f134d81883d37f94e93e5d51f4831767bc189caa987a7c32053089bf847cf6c00950e0da69b3770cb9a44f57beddaff0450308f7cbca0942647e6bae7dc5383746d76529c6e3891af4d36d77cc6a2cf09d1472292420aabede6852d570b0af83cc58a5bf81ec3a0fe19af1f875ca2bf63ab699fb988c4472aca9c7e49311f00a656923b73230affafd5ddbdc51022e708db98ec02640be788aadd3c118bd1b61ea92c8d043b1b1099f4b09b86543cd368c1ac333cfa578fa7b8f27acf55d1a6a6ad7187381875a07e453a07481cdacd6af7c66bc55fb5f73ed6ee503412f7ba5249e65aa0c3492a17d6a23229eb6a04faf27de3b587b3bd992d75727fdb6200957f2e1c58bb1d63e23ac6b398146264f1ecbb835ef830248e382da4752e2f0bbfbba888287527cf7831cead41cd5854588bd84a559fd25aa15136fee8b621614d1bb40099f50e4b82a50e838540d48df59fdb66844907a36017141c3973bc0b9765987f0a837812acdd9b21bd2b771f8be704ec24b675013b71fa23e2901d95278f43f8f50eb1afb564697d82555a35cf40d16a3bd21c2c1ab841f095012db9502e04f44c08b5961b758049e8b618ae3b480c9aa8b887c3163a2b03594984fc136a5f298b295380df4bb608ec958411d3c165bf301847516a140ca57e41545afd04fa44d7c089b3d379078f5509a14325fa6225d6c93fbe365448cbe5c977c9684aa212d423a970fa7f7cc3a670a7703aac469ab7146377d873c6b0b680f99efeffda31d1bf065c809eb5aad64edff3867e5fa1f6c0b1213c656ce2d6335a4c72e097c01d75a9e1333ddf06b8f8923be81a5ece90291595a6421b5c0c4ebefddf2a0e3035bd86ca509bc0770532aedfd1627fea5de48a905747dfd50d68ce55cb4ff43d3657f1e27348f4663d15cede649b94957ff4ed0421d2fadaf0062e1ded272070b98a303dc89575d22daa5ed59817cc1926e3a6f26c2b89bc8ffb7f7547a7ab749ffcc4f37545a86e71edc822439fc128d937a42bcd73e8454329481129dddf57d796152ae57e4b9a0b943ebb791af10c6daa526278b789489504266cada749159726a4dd81529ab81d47ddaa706f84c966fe345e5064731368fe0799a4b66ced825a7fea3bf77a4781f18176d73418434e6b44d86c216d4e96b6098ea6024a5d96774380fcdd921675472d1ab4e71641efa75431b4d4650d548403d2e7673f2caf8cb68d94017defed7ce93b8fc7ff72edc94b2d8caf2ff206df7a6b3e9124a3295d567f46f80a9fd10981caa54c0d078d54e91534604104c156a69a133d1dcb6b61dfe76f8e469609a493a06fdc6ebfd1e46b1ed40c5167f34a03e7c60e9794f02fc6ce78a616be2385d27ac6ab0ac39f9e8f36221e379daf90f34a70679ea1574b21bf6983b05bba21ed00f131f3156c193f8215654d70a3c49eeb6e327b07f7cd3670519708947b580dbcf8d9981456c96d52a84ffb675b5e5039bc93ec5d21164de731eac883ae074190a23b59f0e0f547e8940e19f29f55a9871e35a959fbfc0b4178d428f5b7e84f5e70c323b20857ea64530cb38a7434c3f8e1664b183e3756fbc8b24ba53872b1bfbe52f8c60048d7209e42d7cd61ade66f6650b739af266afac162a0da66f5a165cc12fff0b503add7d34ece6a22c50d2e7f671f25c8f805a01b0a681737a6c40cf4f3875ac66db5c7efd3e897228e61f5dacf707a83c9330d8bdb0fe8fb0f9c7342dc405c39b719f2bab4f3c3520798017d0dc2a2b6a34330308e2b0b23b878de919e6c7f04fca017ceb933cc482e9a119e9d92880efe6f4a940703f9512f0b09e3745951e2c79cc6fd3a8079cb4e044826a136b62b5e31880232a9af4c5910d7e94136c763282ec5e9ad43726adefd8cc2aea7d912eabd2e57b352b20741ff3ddfc6ad203874785bce69ce7d273b457b5f79a92f1c53b337148809388c2145d90d860ebc272b7e4b27d52005486cd7d9d5a1751c4f965f123696a71635e4f26d76dd4a27f8c31803777062f9ac8010598096eda86b69c15ced7bf430df78556d1ba2cbdf08797fb96645afc436a5eb69d1bf2994742acab9660f91920f1b2e45f15e9763351702342bd4b022e0447265a5ae99ba5418555ee88c5f9e9221800fdd1d5b723935c103a3812ca2d1d78f605c9abe2feaaf58af8ddeb2e19824da703d18e871a9e60b5b8d9fc524e603467288bcb0fbce7612bf1f2817d6b043c19c647a849debec8c42dbcd1d05d35277681f6f4a0c1e5fe5f8379da7f30caca233c4750395feb9c11e68d28aff3a3622f7eb20929e13218a8a687c863cfc3cc2bcfc80b4a6e1fb9b9cffdcce5c4faf7838987f9046175b1af0303f590f4b0d1af2f648b2a39492d2982bce6038c775a95df8a0696b9c4617c271c99216dc09b83449ba0d676cc3d04dbf0f2f6f36438622aa9fa71508ba48d21ec36e9352bc4e9dfc7df8965fa09b70b266f05a353674e72af26e99491e8e598eff5d0ba1b88bf36d2e60c794970273cea9ec8fe4cddffa465c751f18a6a1f6c97a2b3fd1d9d8f055f1cd56a947c4306491091ea49d3320fdeba13ea515d8361d6b8b5aab06fe1b449ce36205fa8cef1bba9db35d62a24c5bcf085b022eb0e84182eab9c6a1989f71987ff7526abf810c641521d22cf77a8fa2f99794587aa6f071b38ff8ea0268e2150ee91adade66e6688b4fab882fe90ca28fb5f64575b25ced133c1d14777ce317e55671107f5629c6cb3937490b4e81ee8d0f7e9a1a2a5ef48b40e9c7883083d537da5d9c3dc3c5a4cc09de05f185ba6535f6b199d773949db1f4da06e7c5b2012d345c2308e0acd997db41c0ce4f7e907f3fa309d99920723cff12770aed1d1b0a1a4b0ff60ead18298985350b0d1b969a9f6eef6a9bf1bd95a52150323cda3c3e057da8f3ed89561398b0055a4b861b113ff1d09750a81ba5df5f0663ebc14992bff70246ae7c1e1736d51031fe509ed1bb475c056b755679db64c7078617d14f781d2fb9ef9095125c67354add594bc8f8f6fe4ab628c557f3af3f1b9e3c0948928462bd895969c3e7c93f44e8dffee3da1d2959f46d405cbd5db2ce082266584ba0b71033f95c7ba55dfef57f718b0dfef5aa7eeecf8ca98b495118fbec8c53bfba2928bc4133234a76ae793e8588b0e1e2445db121509d3b89b85aafc93185a7ed4787218c929b3966f83850b6c987230600c4043a4f54415a1b024cec68922e304f2df0f3215b50241c2dc35f9eb23027085ddd5efb1faacd33a48320e71c3049be72213276ee3f44c5386bb97baff7774b204d1a1f4f4d4b2ed9e04d9fdbd70577c9863f4614ba9a21203e7a80c52aaffa4ede355cfd043846a5ca10d50c78f5f2edab1582b5e4750dfcd47ef24aa1a6cb59afad0d0ccde6d9bf1af4643f1dff1e188ede4c70f2a343c305b5406f6242fcc30073a18999f0d7dd2a59af2fef08f86ef1141802529b7d206d2623399b4b8747bd5f3dbf7b9d580270b8822fe61668a6442241b7e3857a1b74b75caed0b118a7c708b5ca03332069ceab93e80b77b6a8384f1d5d9883207ad8dd423954a4d38feb1c11352b8ab7a1dcb4ac627ea640769f4053f9872b6f0b0dfa5530824a22d7283c6afdd0e4eaf3e709655579f2e284f448a837108beb53677f97d27db5500c745ce578b7f0154358bfa3caa5e0cde12d1d8ec8d4457974318499e342062be04edfd94ff1eabe46c888c32c315c3404a9e769c9f4a0f4acc550cdda9f409303166a31a2eb8de4d417bf639fab6365db2cb13eb4a85e9ed08a43efac6e720b6f027071c8d8d3f8ca2603da420a47d63eb7297402c9a18a9c346392cde8683ae20d928e7208a26d9676c01e591f4ac9be9f8263e3cc04f2da3a60ac49c996a8715926c8fd324f2beb5ccd50d0254cd6c44ccfe836c9e34667e830cf1eb765576623576cbc79e2500376516ac1bec4db5f601569a4406d75860d78bd661befa4fd65567904105db48dc64644e9657a91bf9893b9e000dade1521e38d9e81dc9d80d0d2c6caef8b04e6b4ff6b99d0961f7fcd339871ca883ab77e32c373424fdfa672623653797c19f02d1e42ea4b8321aab7928898adb3ba377bcc344c9b4732aa3ff01214b5cf81dac30d21a270198d1de8c6b0d9705931c984ff0d2741f058dffc8defc43787a2660952e423fbfa933d1bed50829226e83f0daeb8470dcb8ba06e9134f5e1756bc0e241c72f87e8fb79f7f145056801e5514ad73081ed5bf1a3c268dc9be8febf954d3a79b1e88319d3de0fc3fb8b322d7b3da5e277da395bbef314aaade062fafbcc643f80d399bf4f9407bee8090ceb7a0168c72b04501259faa9157212574e8fdd3f4f8b030c859fb22148329f3b63d1fb3b8dbcd68f322a772364c9b9e08745502331033c6ef907f451a267a3a588cf5777549787906221b0eac2a8b297d03ed36f75261d04887c56695d6cc071c3fed189294b45bcfedd946397cc8b6ee9c7fea0fbbe7290b7bfce376f91d210258dffa712f5ca327dc329ddf6e5bc08be2184777f40a85c2391988ba5ce8a73748873b2edc0b1e49fe6f1a47f0274901bd72681fecf87f844d321c083b55dc692350d95a8a5453be637bffd2e4e1f0be6aaea4f080f685cec47bbff9fe40361674f54b938e75c35b4745b5d2a82ddba9d7fe1b53f5fa500806ff7b42ee3199c6b298c08d8d63ea0e85f3d573c27942ad8529af119d2378d813cc5031910d9ffc44c20389339f46bc5e91ea728a9a733d3030eeb0b0d5fb8ae5f6101b5fd62776632a61d983f71c9f222c4929bd44eed176f56a0134ed94a42383a6d96b5b5d94a9e3742881e512b4a1dd382c2af3b13df5824000267e7739d12cff9e928e580b29d6d76ad549a85a2aa4363f262c43f9a7268bb1d2f455fbeaf1aeca1c75433bb614416b10b70c04a96d4eb56e34b3c26051edd44316ddf8ba84fd320da231f679efa3fa9e69a3b7d951d3c8a0282cbbb45060102ab0bd65f2ee33be56816ce932b5db528e78cbac0be9630c18aab5f904c5297ff1565f04e54a843bc8b8b936665d819aee4a9263fed4e8fa81abd82adbcd156f4b70b9726fb515c27891e7fde754e17688144ff682c1857bff228ce5f7176599bfa883e064081787a73a54f693f7c1fb9353ce95603347bc06e4d905b8147560b9d81eceb031f8f237be91029c9c969247332838ede857d715230f631546c945d06f3d9c48c98612e666ef59795f6b9c117e36c9ca740ca85787ba278f3a825cdc4571fcbfb22d904ac4428fc11d66dfc56503e6439ad60e2e301d5db78201bf9f915a063c96094dcc2f3e05222bf0906620aa7158a000f25a6e1ddb279542fee3483605054c6ca230223ca949e5666b49c2646035ee1e5d9988e7d511ce7401718db3f52fadb23abfecb71b013cf038c249802f6798be4513bcbfcd264e8ab20e88df866efe4eb32aee55fdaf90be3bd1662402eeebf3e2c3433fdb70c1eb2ed94eabc816c604026e6e950316f86f36083c33b3bf765e323cbd53d3262e288dba482996bb783f6be1148549db1f22b93d35fe1a18553b8d31d933814e937936b49d5d0f1e72c4e686de2231619ead935d7f194bf6b75a353f8d68e5735a34cc98703c8fc1eca9f6bd34f4305dc46e43e0573904573d2a5bfff97ac4ffcbf886184f53c462f07b2eb8a60139207fd2ae4ca7ab31e3d58e9393b669ca0d581db95d6140b77a056ecdf9ac7c562c8345bb6c00566fb1c06a0e5c9d89e5a82d6867b5884bf9b86cd18bf120c1237d71438a6ee644e3f2e6bd64b839deeff75dac959ba650c3aa9b96dc8b44236d2f95afcd8daa9092e97cf9fa21520ac89bc8367b37f662692983285082060cbf803f7bce15974740fe5dd7b9e5fda3305dc5e43db97ee86974325c76db232a11f9aea12b1d06703fdb7fb8b3910cad572a5ca6b13fa0cc02faad8a8724fcd1077dc24cdd8078911113b61485ab2ae0fc655c55743c427c3be04bc48358ac01f5316d748b57c00ecf5314dedff32430d199cad93808186689b6c314fad4389da470e7dd99143bd60909b7f9a90b82a9f991636aa0c9bd9cab28ce53c27c04d74757a4ce79eaece858ebf5bf26724236ecf1578c211e8c8bf7292cf23ba8a8b925de3f3cc14b859952ec49960f4831771d6cf697f68cf2b28370acfd4a4dbeea8fffdc49998665c338bea2f5542ceec46ab67afb7e08a216a2d95ec1abc2b7c9afceee9b80d1dac82900cf848ae4bda078ca01caed2a78dad888d6f41086aba2f2cb8503c9a5e16da49297ff53bd54bdceb1eae951a27ef75ba99b30edc61f68af1030bfb8b272b80bc4d60f3e806cb4f22592e80edd517f9c7345420acb2d4c400f3ec77d06e0a5fc0b37987fd50c866835c006c4766ed9e7a5b54f49167d3620a4427578b6ea4a2b6731a45f053796df1d6075de7e90ccbe6f24ec36a88bfd988de3e1c7baae05d7b2838cbd8443ca54c29b7b87245e59ff0da2b821ff5a48bd552ebba8fe6b880cac81e47335f558640c7e19555870ae0834ce2f047b5a2ad97bd47aaf77e303397fb0c0b9682a17dba07701a1347250e6d7e5ac1cb258c00ca1d7eed8417ea1348ed358338027cd7d761552d01d5f3c6f35b6af9bf29c4cf1cb778c2b2df3d6f0f54cba35a3ae8df11a794bb7c6d2daa177d9adf13f449959affbba25e29f1fa6b12f6a7ec023a466ebc0a069fff4d9b68de7af4d1e70f84a84ee0c51ac2e3105ed6f8f9b1107144f154f5ea1f61c8cb3419601f7fffb7140f6ab551e25bc43974112546997f663d18e153278502757a36eee42b18676b2c73a1d1792180888cae43b72b83f20e6e13a07b636e91d8b6f8ad27de932a24e94927c3bb4027148e477b82c7453ef02cad98d61cddac4e8d6b717e83d5b8a5326079db7347c7966582ed591e519d792e9e0d065d13673b189b75a02523b31130f49fd451088a6b2e1b9db6b67bfa911119b94d40ed6d7207a6b8463f8646100462c76f3999210cac2e9eb7075abeec66726945462bed02f4ab93702ce5dd0cc8d539c3599992f5616b735f220774a91014505e0ada6b603215fd621e9317b9897bd30107dcb81bd16f0ad93bc535ad8d5cc3aba27a5c10ce7d30c8b71ce27f0f4049d331d070abe024d0629b919314efaf2f8b40fccc3bbb4fc35edc2030fecdfe31730e7514ff26886d6199ce16a6499e8f54ca904bab437e69e16a83ac3d4f0bfe0cb02061393b75f3101ae5bb474be708b5a57db9e8962aed11dac0c8f9444a6329069e123f72c108f3d360ee299b48194d8d27c59cbc0ffdeda80e56f8ad5757cb2bddc8bf1a162e8ef9bca3cd8ada1c45bbbcf00cb7a65beac3096616b58fe895d78a4506c8e5f0e00672009a94691774a483468d91eace243fe6a1f262d324e7f15f609759fc9f40129b2c087ef1afab9b5b1c3f151fc0e753dd774eb5bfbeb2b03eea2e530471b89bcc26f6d53c736775ce36c80061c718d4331f69cd73c350eaf15d352c49ef300452073be2ec77e93c56f038889e3937bb2f1a6e796c51ae1d1c5fcebde9dac310c6a1c2ae6e9f4446c4c7db90fed841cc3dcadacf6c755a3913f32303ec8844469a92099c91da31981f209bd8c21b033010190e3592d6070002a3d154d23fa58811f465e2f9bbe214c30a48073a669d492101425526ebb804da238b42bfa02439c46992670d56bfa98587c34547e5f35637479fd5ccdef40eb08a26fdb6bb3d19156b00a714fcd2cd829a14a5c520788bebe56efac974fe6cb5c626dde732c9d2ab614dd667fcee4076586f529772271510a88f813a31416beb15063ae53f82a1ead47fc1b4b0b9e6ba5904390941b0120df8c304f98d7d182cd4ff5ca9432a23ffef89b653ab404ed3afb5621bd96d8f1f39df18d576b695d65ebd0686524d9e8bcf4de4b1106e62dcb196d8af3775f50a220eba96ac91fb6d3964e6751f5625236ddaeecd55191461f139b985b06d24046f596a392f036c72c4b0242db56246a9c00472fdf9a49ba2cf5e57a161d20472809269369bfe9f434557b23bdfa846bc819ec7c74668fe27181afa237906ea3ba35e95cf8364f94f34103da7628cfa90499fea0d46fdbcdb3ec9448059e3146833e2975eb7571d00c6561404afb5808e043a14c61f5b887f6ae9e77a2aead2db9eec00db9866f8d330c438237b1b2b25fdc328d7aff0b38f83927ab2e06b6d4da00456e273375a1d30f7f3e2f3e9b86ad89f9e4782fba3716ad6f2179549827515effd04544743b5045f8e59356a137740b5c76a2151b8f64a6c239a46e2d2c9b52cb5b21077888a8f4527198127269738261f7763a575393ff94dabbc360c27342dd417083d5199dd4f9af0bf2a43af3d4ab88cef9a21c3ecf9be475f73597ea4549d1a6ad9496635cce1a4e035fc59d3430c430398f4781c368b7d47a27cb0f6bcdabb8f574bd3a6cf11e5184d1f8610292e8fcf7d5b4a9d8726bf5a221035ac6f163fd63878473c82d8ca09fd51518db1e64f080dfcbed25a21bf59cd25ddfd010ab789e94d117e1add7f7c70a9686d2715b00042e5e29ed353bd24a660e3f879e4bfadb9af9f2d72157c78f2bd1f69de652e19e20c45a6b1f2aba88e3e8c95604d6f12cad58003c5e7de3b490ff9b53c1da9c7082bd160df5077d04eb4c0f6678175343a61d6c8aa9f041caf58d6b4eaf7e6900fe326ed26b2c7b4ed432fa3213bfa9663fd66257159ad1bcc4758e04c86d8d12bb1bc214216f48950449914fc06bd193e1e2821346a6543c4fee267a6ea496e96b2699a21f9fe45a7d4fe9bddc1de0d75f8ecbe2e61552bb6d4245701a40faee717d895e44d22de557cb5ee39d598e3f5f8ded164797adc54dc960edc6bc374faf5f8b3d37244feef61b0f9fb84f52c0b5db422fdff8edd82caddc1d6357d49676a3ecca5722f5f629614829b0c75fdbffbcad11d2e415ab6d0940b3ba3dceacc30c7f9be376419c9db3cb20b8744f01db002f24b6a85b208f2a26dcb92687ec6d514d12cf5dc12e6edf4c48e06d075372988e3242e3878d50116a6c09e05371bb29f2c80d8db55ea7ac75c0e37563f49d4d031e1d7ae84598cd7c51a2ee8c8f9d237568904ac0f893a96f2137c2ea9904efbb07b5c02df91e84ad902841ed3156cbd0551ff7731e3bd96ac96d2d73387f0b368b7758cf60f4e6fff3ee5e3cc89d58f6e48e6e9bab446ef835fd194b68bba9c5d69a2ebda783fac14e9ccf8b0dc90f0177089a2d17c2873b76c1a76c30856cc6178325511c89ac592b6ad1a9992f9460e7b1a21e03bab136b87c68cea59e788b63a28229064c021e0f3c8c40ae025bf93d16ad94e6036db4145cd7a13301f6dae543c1404d38ef8576782baadc78ca8c48ea67e1db4abf320d1707e8bca4a79158e7a51d869372381c8950f7fecac327b430beccd600694633eef2636ef7a5951cb8fa7290f4210a312715d37e8cbbc0875df280e0593cf5f5c40c6a68ece0107bcde116602f7365e743ad705f3ef2d4c4fe839db6e8e86a15b6a2f7cd551982383d2dbb5303b7aaa254e3d6fab691956a7975abebbfd474221433326c6c4c7450ad126c83bae4ff6d189810ee751670ee8986789d783bf6f6828ece73a70cf5585dce72331caba94c39967a5b277fdff4c3164e0e6c041a97e5483185e0c50cd3c8c066510d20ee526fbbcad681d1b378bf14cb06380abc28b0f43e3c09531f88ac6fccce6dd453a255527c95ba53a9ec6febef55dfcb1734562e0787d4374a56f3060569a48cce9fef6350a37c17443f38755ad5a41bb912c7dae795c7fbb3322ea976d672229e48ea68074c753263cd4312a98523ba081b0bdaf0d79ac3f92928d541e8095483adaadd90ad18d6da7841c5762535828cae7a603b69fd17a19e77a8a8405c0115426c43fd6553c5da3ba53b1549ebbb9384465253b42a70bd33a181584e556a7f65073d41315a402a8f04378bc01e4ebe49fb9d43214d9b26b005fac21b71821c67faffc6a9b19d1da7ff8ee163301e317b3797aed7daa408ee2a8cfb740ef30722ad8d9439f554b4674f32d3b39dc663d4140b4f6959508cc3e62bcc6b5d3aba5a35a67fb37adbdb0490ec2811a681c05d84d8a6ca0890913f97ee9766f80d6462936921da5bb7d202bff1586bc67f609cf9ad07a6cfee51b97019ae473a24adada4307fe283111941bc73c4eefb02d9bcaa23e6c42ed319ded82a6d45fd61c8ff8e3d1b6669593a825b4810abf0557f206e3f646bc725afc53c5a7fc9ed8a51de8f1050f2b66cd3b2666f2b9d1a3d89429eca6ba0866d9add64ead12192f9e57a413065c24c47228cb2853413e6a70004d2eca08a355b7a6bfa55247c68894e1efd96fc41b07b37277f7c0a4bf49d30d690a3b510883ca35f5927384d48c9c7ea047cb1c0c72a9793bb441e601faa5d004e37c8dc39b903c75b645bbc994bae6e95520be048ae7fead5d920184ac960869c83ce4752939321c57f3ea3ae5efed0a38013274e3b322dcc88ff05aa9af590beba5f8adf7c38b18d9099cba39195e90aa8277f5c2d7247452c6f4344778876bb0d2f4f510a138e213b7b1b79a05638d6407dfc5f23a8ec11c20534f66cc5b8eaa9396dcff055aad648d23fd25a70b834ea48fb6e90d00fc19fc1c3701b093743926df18ea14a039b008e7a77ae9053df234a38b18740a15a2caff5be4b4e9250d3ff448ff7d96f02ddac4bf4f01a74806bd8e2d22f0fe46b3043631148424c8fb482ba65b8ee17e50d4b7f93cd1dd387ad10d0f87a5243eb5a8e3c7638c35b5d4aac34fe25366b359d9d5cb5a8ec2d7c5c3d3e9932e3862a60d845a0cfe8169850bb90114d128d430afceba009e4c0e53a79e62bf259cdb0c4661e33f2c14b69a71d733f2df157bbf2b31765c293a90f2210930b2b079182143ce0e1496d1fc09d68db45f05a3c512595ae4aa653d357a17812295381cc84fa800fdbd0092fe937f550a786826790b00c244e2008f28b8acf646e0c8a5d0ea1bc0bf6983e8504414bf2535c1436bcb8cd29e014647212c22214b9ba22bb233055b57390a91d5d57167467116db3e4a7553b062bf8e4cc977a145288f2c02d3a65d40dcf2d0741fba84a2b4b0ca4dc03916eea1a4d41b7d4bfd017e8875bb52b15955908bc610a16e8b6c592d648a4c3379a7934051569612b383dcb51a0d0e48e152de7557668137bf83ab571212bfc6013eb83918151e5da09cb051ec89fd86d39a57748682ef5e85cf802c472ea0bb14264ea73af3afcbeb8c9b63e78c74ac152a93e37829054f35258643808b448ac0f08f751c6a78cfd560773e1f112f072a25a8fccf6263bc4e5b4bdb0149ca245c0200c8a6cf43b40395b1d688d1c0e20e7dc879f685de020c3a69943f40b329e9095c5afddb12269a44ada021ae28bbd67f7b898c9e548bed60e02c50911ac2735a01f05196e5ae71a7ff697c75f8f05cdba9b91f5872ffafa7e2235dd53a4b4afb31228ac07377e0812e11e015ee1896344658e46623fd9cad057432c285daa61359cc9226a123088efea60eef2f82b0d4982453c970467c9ca7521e51a9539660bcfac3732b9261d87e6213aafc9490512d160e8e43997cae2489c0a2069a931687e2b2f6e4c32f8421ce61ad9b97f29c0652d88ca4d07d4148a83f69cef8f60221df5aca834c4079b5c786f3d7cc2673ff956395a2490e8fb1511068c70680a11e8df246b09130e37165887a4426997c862a47e2ac254721734f55e1fc4b9817a26e2f1a7e4a114f509324528523f2fc15c2d012ee44c60d0abff1437fb36c98bff7cfd90a2d879d82630250b036cda97a807171dcb36a5fadfe15512533ba35f487187955b5d8bcb95b2a0da0ba84457d9fda66a3a2c57c7149bd2fc52305a9885f8436a83ae259a862ee99621a3c1ec787d9a410009422ec844d3332be21031e3ef2e659f3806689996cb5df39c134544bc7c6132565d52d8ad1c4ef50e6716fc22e9bddb12b7fea97b1997a682ce9b3c2c7c616116259ccaf0089aa6233082192493a1f541e6fa62b1cdb88755541ec999815f6d7e45e78ff0e7125be640780d754ba0a696ce386970d3895ed42757c5bcbf47b5df462e1f6e2b4c3cb0c08028f062cbb3400f83fa09fcd8d43b25b6b0318c8fe38ee06afd4d5a03e15600da8c1b8228addb3235bd2d61cb28a2a5af7dccd17a17dbf0f64e533d51f132dd41ec7d319e4e317bb7253c23f68072af027f438eb4201df319f6549cf55a7652d465f801d894e2818d0b49276ff1fa1c3d3c353c32b6ea356c39d35389bbd65d64fa7d19043e712b752124eca544948236003212f319030e2f531910faffcfb28ddf390aaf2b615bc434c2ef0a92c1d4dd96fd155623c18bc2b747f0f101d7eaed37feb0114125815a9b074b971dd04648371b78ce6e257c06effb4ba65e7450eee53b990d54b2b55ebf29e0019788ae9362a019f2362a6d1899ce3bbb54c55fe55b03d664fb1a37b787c273af84022b95ab4db772471f4cc0ef120ce96a89a87bf85637c6ed3a5509c3471dbff4db78d95f9b671fbbae05a12af558621fb1dc1a925aec9b362837eba50d6e101c90b03ca094c0adf2872ee8e4c79192425a640dc3bbd7e40ef38ff9abd9de2ce63f18c9f9a31e1f31746b07282afd3b28ff949591de8fc2ac473801c2276d0fe312b371f48dfb99693ee9ddcc3baf602a1cf1f14e19025d8b444630db0b9b2b3c10a7355790e67ef17df3eef422480b702fbdca31f90fa2d04ebb5be178c384e14c7c0955cf6791978180c9955318de7dbb85ba0a3f67c18fd9c5274f1b27b425f0950c347601817f7eff11918cedf2dd4049bcf0ed0473ad54cee3828278b9ecf0dceaf74179f05d26cc19f60443f880d0d4e37d5a92e31eec09b6c8b060c4eb68808b8d2382fde77449a517f4219d81f8eeaae057860afe180ad73c397933d6a3489f1fab703d1419460f7624154e9e201ffee6df1b83266c218cea6beaffac21c124e930552b1e3230c57310c3f5140d3ec90089daa30fc6a350e7a78b7c62617ee37ae3067fa45718a1fe90bb1cef4366eeb596b7f286b193c9ccc40b1474d00a4562f23a8d8d68e95601ce3899ec3acf866916193a44c678fcbe8d2de23cf757c24de53053d31559ea6299e30c42507fa96f801d113b62942d3239abec6b07dd5262ec2ac9eb4c3b63c82821684f778f179b2ea64d30d27a49e70b104060bff8a8b7e98d4c87203a7651a6f2e5cf6ac96e27f7a48f4b27258520cb52bc119bf31ef22ecacd2489083a8c72c8b1c9ff7eb0f8d22099e81241db9770beb73283c76acbbf59a166d14cb89d58d88a2a18a0638225cf4d705ddb93fae6797100341cce532437963a432c771ccaa3cdd9e6ff4d01f8bc9dccda23e6ef8fcdb8461ea694ef448eeb2f8a2d7f1c552a1a2a54946b029dc7c44df1649ed7f83f27b3c9a1b3ed25266455254cdaf83276391d1b58a2e61cc6cfdf374e75d8f50e51f1bfeb35dd9ca14b933dc2442f3eb822a311e450960e7b8cbd4a1814fd3ab7560c44b4c77028399f7f8901ce54ea9d874da0a1662bec6c8f505d3835e14c854c93ff84684a39672209f1a99b1ab922fa77cfeb8eddbea8d0c16c08459b985a234427c61b2be0747d6af5f442100860b893d577c6bd4e7f9e24f744e263a2879f750289faaa4b0896ec00a3a81a0f16361a4b3eed7e3bfd498fa0a4296f8f679d0c7e06cbb319de347a2799cbe20e1f6e4a94c119b729df02919039202c4ed0b406f36333578c209fa97a6647062c2d17a0aad0511fcc7889235e4744bc0e965f85831468e6ca92600c94deeeb5f026182ab6a7973f3a68b302597773ca7685c90d911956dd4acac43db15f35cb4d6ea5f657997f49fb15d3ebcb2164753ca2aff7e5ea45302eb83265101165f39bae636e33e4a3e508fa6150a84dd749fda88c50b5e2b84ac74ebbc44e0b79b3ec8db6cc506f32bbea706af0e85337c7c865826f361c82f1d6913382b76aef4d76e5e1162b3a09f7d77fa8c5af7e990c0ecf6604c706f07c42a6349c1fad00bd7bf596f083c3bb74d0aee7df99237c37a60a211180bc95bc76f338caa8dae886b19846e144e528b3fec6d9fc4c08a47030ae7e3c53292edec60f04f00152ce5c67ec52c1e28f95776139e6f56247953e0ee9a47401c90da95e1109c5f53d40ba313f70dd5bcc570c2ead95a2d3d32c960a76b2ce84b851043512ef8be0822d0d607d82fa70ac9d1012404d29d5d1f0cfc8089814decbe2e894039a9a90ffe538841299ebee1dc2d9f14b1a25c1dd90bb541cfc1f8ea9cdbcfc95efbf15fcfcfe304dce4286e4754525e36a54eaa43596fde493195a43d40efed92311dccce8960013207822fbf19330d6f14708b438520ac0874f7ac34a2dd923ba9659faa5fd5a1f95b308eafb76570c8b53ff59d78b995e8bd6878b1c89a3995e3738c54f93be072a972d0a9d7074519d4f20ea7e7d4ebe7c35c799a4feda74067f067658135fd9d40e1244e5a7c41dbeb9a1a14925dfbab5185382bc58d761b111c24e4417c7438e27f4cbb40f74374b0f707df38f172a340787a02de448230f705849454426fdd7f06872318068dc871e1957c44d472a859f3e96d905803531ab8b49672d012becda29d2fbac0e30b96745d40dc04b6d671b6fec97c19298b9aebc9b21b6f2cdc0d77dcf5a49717eecd66bcf7be2519eb2af56ccbb66ea82b441e57ae0894242801ba375b4405125947adbdb8f2d7cd389f7fe9bba48c7b639df7c303eb433bc587e11f5d82b5f1087758603017ed33f6799144f11d42bd87e52998c0e77d0ea273174bc5f9489592878d247fcdd93e1e8a82fe22cb18682583228fb3bd1245ea171c7288a0cf68aab4f0f9f456b03e3d66b009cc25e0ff365d429cec58086d75f0b301b550f8e5a0d99cfdfc975523c05f2536ae36861a7a05a91c6a7d98732b54b23a22f64ba3f289ef1b3a5414847f40cf6dc9827df783ee105b482e5bfc153af24f4c37b0d3bfe34ce0b60646aaad899356b4fe51f09e5e45b462ac2c35096865ecb5d2fbf1403dd67ca7f079403c3946d0e190638338e2ddced4f10d5b3a4f0a2f83a75bba386f05fa3982121e24717a04f70578a55b47d463669757414405b20c283492d5bf9f8bd42a1904203ae6e93e5a6affd86399ea91f4a6710e67c373730fbc847c206edff1f05e0ab2e098378df110947ac1cee0f21f9afbf1aea3a3ee60f06655081521e5c79e4430d70d3f6fe0519c688abe43315cbb0f8cb45faed69ad01d5f03e2226bc528b9909e265bb5db1b28b6b9e7ccc255b1015ef020622d2d6815676e7c654f7031168027fc75bee8ae8e1dd2d54f649fb0bf2dd76ef41fd6486e2dadd429673c22ea9d633fe363c6d98ed627c84cb39d9a3cd83e4e1a3b2f82c4d453ccd235de45f6194cf48f32fae0f7eb6793137ab0c9ee4be012ebf904b5e76cc841598143104c986e02bb94859042b0d7f31c7f68c070f3a36d4c17edcc7b5690d80c6833899df9f75d06ccc46fb75266cffa64e7b40f3954bd46dca064bd87989ee7a636b07e9bae07e1540c150649df396631107e9620b956970341e7e81291391f894eea0ad0e55547a192c9078787b089806484460d53b8388e2de933aeed41e929159c8562a93331f4e5f6d1c218d41c28b4f378a6cded9d6bcbd3471a53f883943e6f3d3af3ae467c7ee942cd5dd246263257459a4b02bc79c8e76ebbdd33d3f97beda72540517a2266f2b75d843c93c7f427bed3189879f8749f03f3efd41bca6c925a7b819a81034d188de7cf3bdb5c03deaf676e53f4e0ce58ae2b192e10d6c505573ab8489b518ad158e6f7669f865e620cc8c86214e5c2dc7616b28d1bf937f06db997f768b759b60db280a117cee470855f70447d0eee4aa5747433ee00a863cb4c1fab299048d8e1ca1e3a8db6b8582335bc43cc96510bf84ebf6da5441a3e4cea178b404c3ace1fb5e8238b5e3e586af49f1f28fc495c3028f9c7ad30df6be186828a6c43ac2fb80b288256174df4c4d6b192cffd6729d31eea97ac44544f461c356c00db5825be7fb428968bd95c11ab891d17727ace4e0d5ad0236db397fba3b78231956ea153c65992f3b495def158424a79f4e78c4714bec24e4f96013a15219af7b0afd5abc8ce2c791391e446b11e5caab1cabbb2b46ecb1f49e35aa8f1f47eb60a6577e0f0d0de7e5b9e45a00a51ec3be8cf3ee3e98e544099413ddb1ea081019fa8ede14f89747d46061331fa187a62557ded1c9381d6125e6ae6f0e6ee541a5191df8cef54fbb37ef2d40eeb5ae1600073e805084e3fcf8009d952ca1a35f8d4521048353c9239b2f25b243ddaebe8e487d31b569ce868eeea93fbb8270b9c71b4e4aff8ab4e66509866815a0b0365c180787529c426873dd0d5c199cb18689339a4d401e463e8c53ede73e1711ec1dd7b90d15f3cc8986909431d2c24ce4b567c8ba56a200edfed6b3e0881ce67e3b8d0baec96f3790e6527541316282c8418eab0b257ab471fe82d7421ac8b4b05b6101630c44ffb034acb58370aa9054cc58db06ca268673fd9eda8c11908e5c8d16baa5fb1e7df07fb08ca4f5c4370bf37746119c32d39d99c0f8ca6edc5a23b9795a959433a9ba0992740c53388b88a007914b6283c1ddc5ab58ce5806c53f927465915b7298b6954970ca25ffcea1355e42410d4b05fae05c168ef1fc3c587ebace53d59ba827d5ca2bb1779e1a0d8b0cf1f44876fb4773ba99fb42bafeb53e2643e72c93a4db200a72de703f88a8902779d62184db6dbefa422e7dc64f677c8ab48d7bad31303c8740e7d456281b3ef0ab9d0e41da439f475303fd8277c9f8fd9273829efa64b8bef91d5afab028292e9835bf563f3cd212c1f8e75dd0eec4a5d00920404a2d68ab335999b9cee7a003a32f2f928f3280a22d9df6115467503812905289daeb26327a6c84f76d4ffc9d2de1e463ed39ac24e17231031ccefe5918ce1ecb121fd4789ca6748cc8811fbb4effa9ae22d2fb0385b9737a0201c54cc7a883fb43c508df773dbeb3e1ddb0a322287715976d28667d8a7485992c2dca4572aa3e8f688483a6c18dd785970394ab9be1d8806cdeaf61f5c58b43776ad56f62cb3c603f331a1af0296d8c8a2acc7e036f83a51678e2686d1dd77493d5651d301ed04026b73cbdb4c99d702f50ae1418d29ae0c5cc0bf0c18fec78dfd339d9f1858dfb5e051dc6fb1639b80b2dcc5ce1c074a39e5641bb1b08b92e1266d87cfb8c3adcfa9342195e11c16f6d8ce79356708c1b7c47cee21d1bbde886fc7ae400930f90d88f08f98157393fd5cdf43fe5d5ae0ffb064afef48be0a91be7e5d39388dc19bc650eec3c69684f9316aca9e46afdba7c6a210125bbc11d4e6ea6604cd0e12fd22b8d86684db0060cce2f3d22ac7e3a5b58e6977991ea7e39588367db2097757a6e7f4414fd7c482c9e47f4c52baca1f0697043ea4d2489f94a329d84f1c68f61e396b4ccd6d2965c0f8584cd73a3234f4195a8d04838398beee6d3fb90b35b90608605330f57613e06c810dce7a3382c67500d114c767c4ecf494eb84a45bd358bcdf7a7fd28e0a7fad9a39bf55189253eab6a0d4c671d933deef088f2f2283c9d85b60c7085e24ab658b01ef624821808bb70b698802a444b2fdfc8e322cfa042ebaefbfed4c05c18196786f443420d28f2d9bf3e70f976ecb0f369c83c4988d66bceef16b675ac2a33ecf7bd5e54331c9f91afbd69b14a078775fe2373a05d887237f363d1dc4097c83f7b6c6729d0ef4cfa0216b29c54d739ee3b7d11c603d499cbf6dc6ace4a41b584af3c4e2e4b8026a6942e7221acc2b485fce8ae1469397fc9536d54c42286178b79365ccf82a24a701a91d419d200e77085271e2c0c721be820c43f1a58d13b97a220100c0458fa1e5079af4cbee6cb17c6d56722a73fcbbeb45809002011cc8debba46c1448c66dcc310b0593d33487312d7ed91dd8c9486ed940494eac6c4456c73959d3675559ec529396ff27129f152ab4e201370531711940818b418e87e5a3cc383a2ed869f5b89578e0263d7cf83cbf033f3185de9b39e742b7ffab4cb9f9530064835e907f76f2055b532d9e60735d57c2c97ca708bf8d5390c858fe0e61250408aa312b4bd015c00a34a624d6c7b0078cca0ef04cfb89e1f8397a7badd20f4c3bb8055e20ca1f6573b96197293272a050d3e1f8e2687073cadf3bf8cd825a60964bf0e5276a8c6b51d6a7fe39184e33dcd2a0df1e5b8aa2d9a9931c7e819892ab9f3310b59a68550d3c105cd50826ceb3f6cf048d0ea43fdef7215910a4a657141fdfee12f4c81637d5f352736a5931b040164ce440ac7caf69640c438fa5d45c675a13debc37dba79a4c687a9035aa4a3354ad5cbdce479378a8ed4998f6e2e8f162269233d6cc87d31b66ab8532ca8e0ed3b9d3b7ee7cecff97d93ad8b716378ceb1f2e4a922f276b5bc89a4d9f11f5cd34c5130305deaa41e419c1e3d10bfe8a81658183896e1da73e9004fc16b80b1b4445683cf1056c47cdba04d9d97029ad95afab5584e852f8df64c3bf91ba2823029a4c62a5a4fa0bc3ddbdff20c9143bd2ced96f7af05bc504677931f5657d3c05c4eb0ea89c9c694628cc7e3b634116e0bda6eb3598f2e6bf11b4ffc91b808737a6e7b805d3982a3ade665dd192091124959d08c8ac184755b6488b1b77fc7e1fecaa43f36a97fb9521b92cc5b351fbaf3d8f5228578baefccb39131c604b944e9c9cac7c37ff2a95bdb7c44eb123f401be29c03d4209a9677d83107286555d94cf4b3bff576f894fbc1935214439af14b54e4153c5594e297302a344b047bf52a80751e07a0e4853b49a317530f96a8d4f53b6bb1e5960e6193c3b7de2e259a7cfd78832f617e60da6095d9bfa92804c2af8c5825bc2880092790975c5228fcf507bb75351e24a59ee90b030667dae95f6169dcdba1a305aa841cbb5f1a26c434253259859db2d725be7ed2e09c17ac498ee4909323abfc9e6f0e59b50f2e8aaefc9f0fb2ddf1352bb93b98a3364d2d3f4226054c66349a7d1a7ed593ebede057458214883a35b115f179cbf97d7ed60cdd6f6b12f51817601d7a4eb5e609326ad905ca91161fe7b713d5b1bab00f9200741d5f5a51078831f447013cfeff5714f3fd7a5b7159199018be78f60694324e0bd996645bd0a2fcc9b153dd27ea71589ea595be0821af3e56445f21ee4fcf3b219f582db64de1e9a2eda7258275877677782b6473514430da2e4e490a0b335e2d3fa088535daa80ec705befc7c22dd93dbe8c33376bac59008bce964bf23e509d3a4341e9d0f8b19b6e7938364818f8368b6efd52e5d26fb94fbf4f042e2e1b5054a62b690d3db2b59d3d8810ecc8ddf7f5b91d274b4379ab8c0dd49f193d2b54e8422660807a277bb9ed642ef609249f242f22c818a21e7eb439329c701664b3bee0e2e523f4bbb397c022227be59fc4df5592a7e99148f1ea58fb453fba9b144b423868540dabc82ae4dcb38f99c5ceb69d9190509a6367dcb0b26ea10b6825750bd4c9c62b8d91bcbe8497b550ba35b26e728dc050487b2660e9d8778d473108a371e3bb793c955dcd7b232c5c03ad37782a91bc7e74a0fac85e909bb5daf5b6e0384ff3b194b53c2f2eafc01e23c073218bd019d3cad01cf802dcfa05f05ad91df6c491dc6da710535ca8401f2ca1910533b2fcb656a4ffb4cae3405970d150d9229ddb57139b2f7f6e44f6912c5bb81fb7f24eddf763aa30667807d895332717184ae3f7966134ab4f0381eeefbad18e8b32ce434a3a595d47fdecc66a9ff6a3a7e751b0450e6df2b0ea04ce456bfb7baf904a13bac4ef3b77babc03017a2434577da831be939f0fb7be6d12c50fb27dfc9cbd66c035e38afd00564fff9a1dcd76e36f2f8c17b06e0800d3892c5b96c683c8dbdf4dd8121b055336aafbea876913e8881c6046e402e35df5a9a53cfd66779bf3485408c5e6a768c24e23c444269ec3abaadfaa7bb6263ca7bfdcaa0c5987f0802b510b37fa1ec344f1b7b9c519c676f26658745933280ad23a5d0d38039e0e4ae4f78b754b7ebb5537bbd43a84d22b304acde0175ab195f4b4aa8daac716ef27b6fcb1a0acd52160b9f73f73c5dcf264cca167523c52dda4cb126225b03ef962cf97a4ba8116d095b727c9169cb188b7162eb63ada94ad86988e1ba174442dd3535f0644cc7eef9e23ce843aea8ae679963189c56d79ce466cd1688cf64535d44ad2c382490c7763b502596a7f5f1857e85459cc0db9d49f35c4202f19170291c5829ea91ed8c565145b333c71f0b6bfe18bce2e7efc9d002475206abd924171d9675618c145a337e80fd914ea4dad69f8af3bf59ac21c2bb99f5534d610b780f200a1e986ee1ea63906d95544cce09a952e2d6764a397bdc9fa93c0527895f53748f1d942361d6fa9ad32b6fa1099d0a43b100d19e0ca959ce2ca14de129f10357df89ba1ef7b1e1e2532f2ed7bb8bf4dc6132df2622562829139742b3238bde54a18ad724b8347f4b753938bfd80d2a76e538e08aca2e23db5ad474e76ba4ceb04132ea65dfe99f268a277344137162a7d4fdd65d06f106afb25414f4d9ce4902ba23b25c9eb68f07de76b4a86d9775baff542032182ef487a02f337ce41f29f6e42a3818de783d52da12a522f9111c0ffc3c7dcdedfe51dc754ab2d8e2459ac5282204f976d8fb6b51f497cca1cf8937c7fa0a320475e8a1222d3e2273083a316f186b8caed681185d3b6ec4c8e39f0e57f64015ca10af5b5cd4fc80420b22ecff1769809a1a8446dc1b7e79a647f635a0b49b6de0d768ea88d84fca710eb13f16ec0d00757177f889536769a74ef7c2a00c6e4cc4964541934d004040b3d4f6a282ae8f29bb10fafb4f359f5654e6bb7aa95238ecd577c1e25ee040ffdd4e631e2a9342d319a2efeb0e36d36f817ceeca1054d9fdeca611025bf0edcd643786c4d39df9e1eabf2e96c116895123ff2fdc73ea6a965ad10f8f92798114379d2420ecea3c8d130325317be0a499a8964fc84fc3077d214e9f6909dd7b8314d884db868f32f4460d2e70667cbc09226f315dfb1f747615a61bbc8e602d3af83427e14121c2ec2e474da2003c4bf2e93b0cb4f1481d66cab12b1ae5ce6634da5f3a93aab6098054c3e2f9ca5095f1e2f1ea6bc19da7cb7946dd79b552686ae4ab29535c9abd6c4e2ca6d5abf808018118961dfefc732884ccce19d1aad4e6f5676ea51490043305555f789111ad0e91b3ade8e79e9a02ac8159df8a6507989af4f5856d7715f5718a0452b6f9dd46a208409b0d3a838169602396487f8af69f279bf7918ae79fc3d29d24458068bdf1b99ef9837bf806c8430c2a7ada1fc1f87b38235ad2dfffd5d8fcbc158009b56c892e01d68df38c86971a0ef10081dc16d285b90844fc8850a86f943cac5ed61bb95e6ad824de016e50e98232100d75518b2ca45c44cfd6d2020d2fdda4348ecbcfc56d1c0a909eb213d6e2d10766d1f9035bf6423ff090cf3712f422c0813bb806aabe969afdac10da802a5c6639e2c9540680b25f51f2de4d8c19b4d76fe67c9670b89fb145ad2c2450301f5b0cfea8bab7dd65af2df0d65ded97f604cbed72d446ebd3f74c15a47a764882bb1049d9bb9d000d162c10c1471154973c34bddcfd7b307071c2d19ca4f923bfb1119a187575dc701a5e4786c0bc1351fb9f459bffeecba4f028d0200c82c7de833f90c900d48e6a7c92b7ea53e07f5b50e2688312b8e9e5e823b7ce240cc8bc188113c7a9f2bb9cdd8da3517aea6018144db33236bae8cfe91889eca87676e2a6f9842782eff0267e3b2b829f9faa9a610b7bfc452e0a53c9c7c76c117479b003db5462ff033bac2003acd2fb17e2db849af24cc766e6e619b64c68bbfc5c4625a2d0061635732173eb62cf553a250e391ec9d49524c9f21046eaa7eb45e6f81ba59236890e7bee14956423c0f966a3e53821fe5b0e8c92df915e3eda1d4da8ef4e514a7837ee75069e8740c4e083118400b6117ebef4b037fffcdd2e9578231aedf7433273ae675c4a5120a4eedb3cef5dac1976c07e28e30ebc5294ef214502fb583c8410151d8235dec2caeba489c9c6e358d83c79e5b6bb1e420dcf8f7613192f497c1904046a6b5c6e4aa8426cd613e2131c723f57ac6f5f00bf9cee88d2cacd9894f713659741f811db88fe5e4008ae538c25a50bd826d2589fdedd41b2c195f101a8442ea112df706b48d5f0310d3d2fda50a9386df862d1f0e6a4c9fb876975a4908464a79911bdabe917ffc61f9441559b919290f08213eda11b3b3a69df27cfdcdfa880eb2a6dfbc3e200c5bac5abc4f3a61badfa7cbe3f416b021d2d091acaf3a19dffdac0dc59c2c17ad940bd1900dc2a9a93f93714e19c2872db6ea2c46a9fe71c0c173fc0e72a34261d849d55df6579499b249a8fd30b71d13e07af8503a4bc5582d2edba9d3790bab2c648b371b87d6b74b59020f57aa5a3e9a69d7021402bd3d487c8368f19085a329de552d9b0f1e48e9fd92b802951f7f442dcca570a5affd3a2f58e01901c613f9cc742268cf124d458cbe2f854047e137e045ea8c6db1646a56eb66981a3e884e221bdd9c3ff4b5f9703c70b50e5b501f5093f0808408db801615c64bdec59a67bbb6eccbea926baac97c6c48a2d19ebb8e7a8184333986bc5f5c37cd9022c135eddcf1485f06969227aa59ddc0a87e44dddf64d92b1b32942c9c1170c86baa6108176449ca30ad921f9c37bb35546c10b45be73e66a352d2da9040f513c1d98373f1c6acc2124ee60de0fec0dfa156c98c248e72315216f09c796545d6e29135d8fd45fbefbee93ca507dfe0df1a12e1ee9050d9fa4c76e3c7269c4376d4823d83b690ad57d8c2da440dbb8b2f1577e136af7ec4e5a47c25e2c4a30fd110c92fffa9fb70e2f36c4581210b1337a06fbbde4eef72ef69fdcd2501b6a4d66d6657ca17c8e7f5bc4ee05162c3b8dd1a79faf3a59ac4b67f26557735c9a6213f2d9e9b91baf9860244903babd579128adc94a441a9af65314261c61d447b1d5ef7005f6b383d0f977df939f0342e66bc77e0e3eeae40f30a4c802eca307fc5fccd8f692ef70c46cc3d3d55f8e1f18d3ce5b4b987c1a11503d2f89b4cf76a67e51b265bf9323e655f3fce86a35b11c518c798e1a420ebb486754c2ac1d3d8375daa90c994639feae4b24a36bd2bee8360814b4fada6cc698646604b3c3461c089cd9802746cf2d605b05fb2b9c6746e0d71deeeadbdec2b0457a9ad508ebd62db1e7cfa2637c45a64f3f165c0bef46d8867ea2fadeea8d0e29dfe6f0117c9795bf97f02fef85d01121b3ba4adb32013604c9037b9c5e7cb9cd3da5fe6d8e9371ce827b85dc78f1bc9e9000969e0da3fbe7d95656b884f666bfae0b712c28051f9d014cf0be60a13d6dcb7d9fc3ed49af2b07038c8d772b1befcbce4a78d1d36bb29ef6cd8d7044f8931cb2ac981bb10ecf5c78d588e581a45ab36b6a636646d251515d35aeafbbc4cb20b9aeb77f6eda0dc6a7ac75720a61f9a014a561072b851c2d8a1f21903299fafccd7e0eb70308587f2a64f47a0904b2b810a160ce7d29e97fcbbaac3466023c8e5ea49a40e8643d2a55af9394ad33b6bb808f14b41f4b42ce0b5fd81812a2079268de373cce65a51a05841dba93e7bb254aae2fefcca396283e55d1980559155acec2a172b6577a2b050a05d20e4ac98db6dbbc322b7bfbfef28a84cd79355582ee7eb1fc0fe6ac11aaabf7e3cb827447f7ce325fc7adcee4ac0afbd929bf451748e04c3779873f18590a682c6d83129521ec06c9c7509e0d94a4678213ac95fe968ac1b96b14ecb02c5a46156b5ff52fb05d9dc056fedf1cce42ad2c8c023ac0fd565f6d630254ba0884f89ce3668e0db97a3f36e717b0d99546daae80dc276932f634cb27b13c0c90cfd47a73f47034b5488cebd13880bf81431db336db45d08e350108eaa7bd70720fc2cf00e54b75dd8e6700f59f63e6a7cd575df2ec9148741d36db4b6297b9b6282cbad0f70b6039bc73a3bb36f32ae34336989ad2dc13ed3cf7173e2d9c825f240623fc76a6edce2f6ae922543b8cc8f73d755c60c153473396060bfa27b0669a71e066831199b8f1ba600ed05c606b3e1f49f03e6e2e16351c31acd4f5a231334f80c08f0d5c655b03a80301a7d1c9982f7c2a756dc215c71d2206c8af5e64eb079b846f1a15e1e0038f982ade59af3d35b31edae8a4b5bd0d9117b908edb9b618f8b78e0ba778cfdea50b89af5293c4c6b4ab2699010a43f4eb75b7f53d5cde573e97f744ee71e7315c74dc8b30410d898b548e74f4722cc658ff7eb052860c08a33653f1acd54c381705aec5b0bd7f04d339db73e700717bf497df5bebb26784e35d76fb7995ac2c9e0ab62cb65026c12300ee2cc4f613b5076ec82998ab902f6dd56f0e933d969879e6dd7d6a0ef23444b33f2789ab5dc53b302ff1aaf655029c2e9b964213c413d674945cf8e89d1945828abb5363708277112b2946f63139dcf137400040f6ef5b59556162a4973f7ab326aec6c6b414aaed4c38d6bf873efad21d3b1036f615d1498aa48d955358d630c6290343af80e383572f13cdeaeb99a207fb9f4a086ad9e430b111f69543e98734161f62921dc79c5766f43f10e31f2fee3d3e94af0e4ad3ea7ec974944c4b5a74b1472d180d9ddfdd247c472fc97aef975cd07aef2c622a4ae4e898c805196c101a55c5c9aa5171bd71ca1552c4633594b6fb557ad02434122e1209cb996727f87f66c3544e0fc3fa43349b8de286c9a4cd5c56820293c2630043c5d2fe5880ea2736da193ab7ddc4d893bd0c2463abd9513a86c200384e171df13977b690126c8a11d5455c262193c0b08551bc718e0105f25a5d01f5f0cd392d5f270cc203f7206f5f7a04b41f3193bfa3a99172be227776e8e3e06ca755ebac2b3c92ab8c13b3a779988ad9636fd6cc7550d2481960565c07472ea1aa591f6690f4563e85bf25f85335a3d2fc0a01e448f42ba6afa2875910f4e3fa188bb4c221ea965241b74144518651f215b790da601130488270604e19be677f39a27e417b0b9d92062b646b7d72b023f523858d17d87e3302519399b88abcd61ed015f0ba891260ce232679e967dfe2e771cb89ce0956beaaa704383e94f40336cba1f3d3a2618075d995452a648a15f7d014cd8161744ee086aa9d6b3c69bd365e89737f7954c1863e82423e998880d54dc4522ffecc4ea849d50ab1367158b357eced04aba8cd438ca7a2d1170b0d3a0b89f7ca36ae3b84c14e0b8779f50849c1a6248693956159ac700d1ae025d682f7d0cdb0c2018df275851bf1386e56e7b7605e2a22b02d0ea3c7bf42effa43d7e7a389accc04171921b87eedb60bae91109c2123e56c560f12c741df53628d10554eed23c19110261641a2eb74102b1c7045782ebab75dea1a512796ae7d001b22ecccaaa24779846017902e5c9e6bd5e70190653805d29299bf4706a22e498f5f9f26a3515bd36a896745c8125bba584b2c97a7e1ea8fb4c6d716dd2f9a408f6ca716d44273e3b921562926097d2d56853f1f397a6baaa67a1aaeb7d70b8c20d58dadaca16212b5f3955b0dd5287b32dda291083da5ed5626829141e20e9daab6615b2b316f287de19292cfa854c5e47491320de41d87e4e85213cc31d30ad0dce34ab3fbdb851e41e357a5fd94d53f95a7d25ea8db5e060cd97e5e280dbe239b07241a8f97c9ec14aee9338405695ee50b98fa3ca46c4d17d61080433663bf2ff1980bd38120600513bd6bd7b2d59cd082d009b1bbdf159748f79327d55e4bdc01d6014cf8e6fa8b883639c116e6e4fb30b52f6e4a2c7833f854fb07daacf33c678844015d9d742992779b26e945ad863b3cabb8bbe24d8b0d4544eb977fa42f320ce6708641bd93e15b60ebaa04451a64f4802658fd489c677d39a1fec234c2834bf1d3dafad2f0bf4f62ad38add792cbdfaa0ee7cea4922b1d4babe47dd650204186adf4871f61e449cd8b6520586d1518eb5d2e85176fed5ff4365216b1bb72e830f868b93c77028f8f10f7819fd12d136c593dcdacf73e831feb36f9f8ad888a4ba5f1b6ca6b2a5d5f8e888972c7860ea0ccb48736d08566934d5665e19936e25009e32c9ba065f56772f9eaf823965d6e4a192851c2ae17a78358bb2a87cccc7497cde2e8cc854a996c31e2280aee298c12d5f6f7af1a09aa2b943eda116ea2f6922132a0686cbf5116916cc0396fc195545693bb158ebb4d108a95d30f21b4feffc9aafbf6aacba66d6a7445f89af68cc93d4d2033967e11fa900498fb68f17d19d40ca132e710a3ecb891076e56d8642b9c35b57991bd487c31725ba776cbe8cb74d9da8cc38379e9481409d7eb3f74628af1674ba839b40b46c25146e09c60cade994d17e519a291541c5723a1a9a0ded9065b48fe58438348eeded98c543f361db9130017fce301162230a248231540bad0d559c2e1e088964127bdf844151b4de9b9ddcce38ecee6f27d092282aa9e08215144ec0d2af1a549118c5cb082828981b041bb845d791e92923b083c7708e03b1da149155d058e157aca61642d4120999fd3d280ceccce1dfe8343d1c3b4d3046f09f9bf893765640f5f04b9a798afa5e345efa0091a4cc399c64e55254603432f1b756ea318d0afbea4b36e7dda3e274d9ef73545d3dfe5127c9c6957109b350d5cb663d3a2898f61796656e514f7d4fa061be6cae7fc92f778354176ae709e696ca08acb7f651b9d33711e2a6403ce80919590d44ce7a791186051a0171f15873e3e5ef2d5063d9fb52229502325df23465551da2a95252887d291434d2723a6037c251551af3cbcd5bdceb6d1badbf3c62cc1ee09fc97ffe1b19b91dd628982096bff6528672615821b53217acc66a84bb69c585e34c639b06265b2be49f732cd8ada6edd0acf77c93110a2fcff89402db2b12807a765559f8642f25bf84031626789fb401f2c93ca08940a2f3d674a61ae287b6d1de68c62cf72a260633660338874d05e37a3ba067a2c2033d79591378edee652af074160e0f24f7331b69c4b5c13d3766093f22a10ee7bbcf7827bc49beca2c90c8b2c89047d9a93b3a7d32005446fd8cbca6da12e733989c6c46cd3a34d9aaf549e364027715bc611c95f9f7ee02e4cde4a44642e7b5717e4e26ce5b5cb9973b97040e939d579f6b91c30127909ac15dcf77092c7a19e23b41426df05967af83376f1727c4b31267dfadf9e11103531b0dd8d95f1ca39a1c40b014740be54cb3d7c5645fd8878372d21714805d4a8f55c039d6464d11cc30124139fdce5e4b8b622f8b0b841ed37855acf25fa67f937cc4c1cdd56e05be9675f66fa01b6714c9e24bdc0cfdd2b515f222bddd8476d19e455ba6e7283793fe9fe515560da2362d6b08abc6d3b6f64105b18f52157fdf408690d594e050ac98a16ddba1d34991ce8666a1746a7f041ac9c2901c9b58d1a784f8c63056d987b00744e7a9d61b61dfdccb8343f6d59f228ddc6cf061dda38cbf5cc1a9dba687cafa54d504c98eda87b88c56f565c2a24bbd01341e3db6f5e48f4e70a0d47fdd1510462bd51ff69b0de7a89b7d969d7217898c0a23298e055e38eab4ee850d3161da04f01a1f670ef638d348a613c17ac725a5328ab384d14eb79fae4144c3863a490ee3270a1d52b7d86b0cc14eb979a411a892f3b6d68de4d0e31fd70e229701b2add1bcc3403787a6eea3f98c46aedd3e4a6474d2840e17b697a5792e24d1cd87abfad2357768bc506d857fbba37fee51c70ac40d161746318b6f568673399d690d93a0ba68c9456946adbf3fde70b86f394758de9ff9289bb5e2157d6eb049b2499565be2d531b6d62d75e73c558ba55abd2b62536d641b95ef375018c637d81978d5992fd3dbc9a3cb56157e8121b060fbeff555de6fc9b73a2a9ba40003bb0624a9df5664178461b91bf101f89c03d6d54e663082cb691bc49b22386341f950d859751838e5daf400432594833154b501f0c9ddb793268540053931b8b70e79397bffad317ae95e604781c418415c7f87bb1d42af1d5a0352464d31e97b41dab1e470e4fd3609c71c1230398538f5098e4e25f6a4845e1205c64e99798b4bf3ab2f66018ed5ed8dd5fbc0bc30a43bc45ce6931183bcf51766d671af887beb901ddd5d1401ab1d47ec3d92de0d60560253bdf22f4a1a42afaa77e3d28d52b072a648dc7ce9e0a527a0e111220749fca242261456081c83cb22bed09f29c93455731c524493391529196dd66eeea0efd077b70c1703d590be15eee204aa10c322699f2390da81e52285501b6df89f850deea0ca6d3fde9ce46ad8bdf8c598cc98d9b7915b8d4bd8ba72f10fd8f0e0e74149d6e0866561e07d8d24b4122ab0fd3b5c558601d0de005f5b3aec26e59f17140016323d8f6faf9d19960a76009bd777bc7aa61897f3906d38fed6ea30a655c17caa84e97c3dbd0ae16ed4f9c171e796e0bccd49e98b615c12177ff6fe713c3a82ba88f7d0e859b3196bb731c85a86f370e8861edad745d890d324cf75eb8a9b81f70c8447f92e589f92244c1771f4653842766a943b6d01f132ca554ea587c790a966e391513e11a804eb92d6a404b005caeebd7675fd8ea28789c6a20fc10c658f986c4987026f4230014ae10e3f8a3d5f600aa929e7185b99b4f31c84528ae94a8f0e10db2a3433d3ffe33382eb27f36e0ffd447f0982b850edd39dc66e81944092f8c368c709b369eb97662a0f9d2bf04bbedab87843557a1b0a43ce2f9f5e67fcb780524d4593de3656bf835257abefdd7520fcb416942c3569026b305bab30e7e7d78456df94c25c09f5140fc8f8eb73b638606630ffd2afe5532a35c970e280a64a54e3249b7a5305db7816367f70b0414d81c48ae4ea646dcef981d6e32090760668c00eb72ffb4a93bcb7e95d7b7207f734eb875f867feb167e308e72e481980fee7c47c36b672d9922a9a8ec2ca29d510d157987bac2ce6121f63b893d2664fdcd3995f3ee0b0fc5902f01488dd0c00ff6babb1c79b310f46c856613733536a69eb596e581a75c33700a449caacd2e9ac55fa96589df48a1f952f6d209e0748ad83eef81f451ad709cc3723a1ca133c4c34e5e5a3ae57cd2ba2475aa1b147dffe07aa7d070ea2b6cc87730feb45afcdd5d41a46a286345be46f27d9b8dc82a2fd2a2ac3d4e5bb00bca83cc9efb9ae42a2b2baca8885704e3c02d460711fa059aa87a4bae34f212a4f9ca26084ccda4632ad22669fdaf6c1c90120e3ecd0fe29b1a94793b1a41dcd0bc3f578b53a1337673c68bdf51aa5f1d11718cee79dbe65f622251b175d6bb1bd21e8e2a801e5def9ab822a45a8345741cf26332dcefe035c6c58929aea42ec7e6b32d9e5124b45c810cdab8583d60fcc9321ece12964a9c418ffdbca7a9fe2add8429cf615eb44218c26be671f0cbf0802f1d8d639b6943a200be42364d76c77c0c59f6c8af55eb969971266495cab03d3c5eeb48ddba9819d0e2214ca3464e573b44d6cba351c3f6009eda2039c10e29d364d37a7da42faaecbbb31efdae9c234d70753a7baf20dc00e385514782a265803bb408ed5028045f96a05c718d2cd6db4faf30ab32cd78b4b7d5116896d0941ad633664c31da8b54acdb191b47d1cd26c5d71eb1aa32001c7722ccf672f08b568e2c81b21cc7e254e5868473d0d573438f8f3baba80ca280405ce16f98ad04e71be01b10e2e4b0a12cbf113f308b3c933a5e077bb19795ed1114179325d677a49df2bfdbfc47a3645be086574fbffd9fd2b2a074da2a410933d850ad58ad33e77f3e21f9c899ea3d5276a2a3594fcd6bbcbbe5c5771b7a828c8788484cf598916da88320f29fc1b6fe09343e078c805889a13e940ef2321b5dbeb3a25b8640d2e1a126d4fa0c3d5616ba2698e355032b1942bef85549ec3e1c03911406400a2755a99d163792473077250550fbdc32c28aed786e281eb0184bbd0ca54a8d3af84daff4229b9b2041c28ec592985a3c9f5ff86dd33ec10668104a20273f9de8fece13a3b20d92ad341bd1f80486825cab8b0cc9fa2df7084a247a9f81a0e21b1afef433c8c94236c0438d605d8e05a2d8e8bd10ce8ffd5f9e41e937349c3a52125b5977d7cf8d68716004d7f884d9ccd762e8ed51e7790000ceb90a3c74a9375c94943c944de324404aa040361ab93bf0ac58b12c5e684d3250a7c8e7bd735024a162206b3ad52a4808fdeabf9b2607cecb70c2263b29bf7a4453c57c2563f950819ce8cceed4797b52cd3e01ddf214140048acec5561c4d6d2adb84c1eae9192e8e249ea7cbbaff7dd20c8d333112e4cf33306f0d03fcd2790dfdff9da14805ec507cc2d2a7db2bda2c8bbd86c10fdc168b0e3e5b53b634e6bf4bc4734d04faba6bfa061dbf7cc680973b248fa4cb30065e6dbe44b748a279f85009a1b024fce5c53a3ff0ca604f5ed286a935e55d8c67329cd0b2b5a94a3b6bf226b6848f40fe3fd637e8919ac65d25bd8b01eaef4421b55381e795d81f7128112be9ff966ca8696e2ef2d102fc4787146221b989d7af667abe3482dcb11a8da83be5c7d550f361860f764e66da79f961f32c042742330f9d4644e3f955ddc9c634e25b98bf056648893c2990b98de1d1ebc5cfd78bf62745978303bba90a65d584cd87b89ea137505aaa025a54bc98f1e7fd39162bde7113c880bf2b60f2b8d5f0578a4f608b4a074546e0d7f05d8b08b0e708bce28b723c9bba6422ab86ac66262b91783f50148b2d5bdd64d5a8a08563298a98d97e7c2ea29a0d0a4730614386ff9efe44ff37b6b247581165487bfc57c5f6eca7e7cc36327f298569beca47f9ea4b55494dc57f7c030ef6b9d49e7e4b635531d1a332ea3d9b7e70ddbb3de62662db902eba54a8d72a41f72686aabf156b5a682579fef69a68e1d97a88d88f82bb7910c6c0bbdcdecdfafbf53df1ce06d46f9cd9d4d1551ff76ec227909ee249c762e5db30b8bffff934e704e99fa32cfadf65f4e4a7aeeb10d98399f615f0fc7bb5918ecf41c9920a44bcc1e0301404869125902080a867ce8c4083225cdf3790a54a439c9d8cc3f6af7c0999ea66c0bc2d7bd6c1183e28b5aeb6e03d468a5b09a2f1e88d7a774a81b69a54dbcc39181d4783cd7703af1aae846b2415c128e5460ae95ddbf9affad59e414e404d21d32d307c8e67c1a6b9ef5cf6fcaf2bce858a138f7afaee59102d32ec7949982e76f495378698ac4cca4b5db2adf9518cb1284bbe4a9bb56af177c14e680fabe091fbceeb1cb65378cf0acc1bdc71a356890d192b92fed4169dc2284342903322dcae3b40b0ba77afc7ba73bc1a796f0381aac54882bbf9eef3c5b57baf73e4574b15a5ab5e00974135a2984aba5986ffa67156efd47fbfc3a408568fc0488a1fd54e938738e7b63acb69f3990782b2aa3e4bb23253f76c785e79d79c9d27948b28c31cdd7090cc08ebb9ea73dc8887c810c1025bb727eb5c75ca645a7fd35f2fe473bb680404dd7863e46341ae0e9c0618d3c815ee98a9de9cff27b9aea11fc2d85f473085fc9871509b529e30b34d4654bf03bbe23a92b028ae152f58f3af435b64f6d9810bd5e82379a7acdbf77c005c526fca8a6887b60efde7192996e06063360e9c6fd265641fbc701d4557567b593665b9c4438aeab526deac3b7ced88753c2ec5fbb832bec7b1f9af274a21f80e7270d69dbe3c56977f0aeda730e0dac3c39f702fa1373bacc52e691c386556156ddeb4378e542f4be2e86f2a74419d103d4cbf57494349309434b756c701903246ebdba2f91c0f9b4d64b0263ca6a0e313621a8679bfd8b75cdd272058c167cb10552f01d5d19ef54c218cd6b824712b0437c536b652d2f0a57f8c7c1d8fc23ce107e79fa61f20c3bd860a5c1510add3bf3d25ebb695909413fd08294f650835a075f1f7a3cdd8e6850532730827cb88d69f38c22af7857ff1a26330eb10a4d2604520d328e3e822f2a37c4a6bcbe5b13f42b4377fd33a1860ea8d07473856302900f46686af46e5a81e5965db67ea14c7c359d741bf565c9b8dcf80937e3b63ae845691889675ef2f830f6d2d26353e1398d51c21c243f120fe9023e2c8d76d0d7103e577e09fd1073c6f17845dfeb72b9192a6540726be48a6a200ae19dbfd00655dd2688ab4e4723fbfe76f2232cdc95d0741897afe33086dc48ad2395a0a5ffb00541ed2c7ecc0daa69f264334cad0de747389fa36bf414e019e95e6726995b0b01c4a59a54b990cb00ec537033edd6e2d4ddf4fe72bc92bdc73fdeb38dcac5320ced014cabf7b431f832f78ee346855635dba188eca3de8034975975f0c752c3255c371361668f8281bcaf9bb84be48ebfb6a185ac4b3fce720a173368522a87e45914b6f87597bdc8c5654de30c5e323084e92ecbd8b01ff882b5abfdf494f26a51a5a8dde15670174865b4e67f0ed9c1cf22a8d6c132f89a32a436266356705b60cd169d3192f4b68dd77400fba964bef23c6ec8e048ebe184698629ade8ea4542e72e86b7c1ef870dd7701856ba78e1ac24429005f6589669c1a27290d5695d5121167e67293ddff47d8c74774bafe47c463b42c5b9c8a03b0375b83c7fe252590ca5251c7ba99612aa9ccced78e2e02b3e432d786b6d93d73a5c53d18cde7017a4dd4d0e881b2740fff0775beb6e63273cab7f83e8c1c4d0a7131ef808fb2ad40054dd11713997a3c3a3ddf0d7ec153aa7d28b68ee39d9ddf89b37ff768ff7c6b3430a408e43d8b3ffd17c89111d736d2be65b4d464143ddf13bd8f55e0301f0a7258a943aa9c4f12d75e44814cc49fc57c54f64c6aeedb2c06e58e741a2958b49582b9e9d6e62e2b000527f00765556fb60141c2357892cfebb2e266288e87bec7efd490e860c948b70848252e374d239cd8d7c6e2b8d8b32d8f1997b7551424a2ee36adead0d77d0ff3df7e96193889099a37f3351ae396aa7136c362271e330f23d3f121d1e178ea1d99775f9eb49eb92846bb2b2d6dcc0c254602b06cd9f773b090b2f639f910eda4c84e8dc7be88d315d9833566052b9a1948a65dfcdb195ef35dcdc315ed58edec40b270b4b83e7bb080339ef69193c638c9d58ba893d83fe7a9d48f068c85be9e478c2fe7588c23ae58e1bf4f7f860c4fa017c8f25107dbd6f0202ec794fd36cee36cd722b6245351b91ccb3f4d7cf69369767c6d3242d9ff7245bd450a9c7daaf8c894057b192d0aa230bb949955f8de52d9714365bdc4f80064004b0bf703a77ee41ccd3a6da8e5fe308263e8a6511ad16c0d964da6bc426f03eb87b5303651090991c95661eebb6ea4e68bd34f36637cfa78ccb5f4dfa922a97db397814fb78a5dca50acdba2aaef6e4fac13ce0a6b77b774ee78428351f331e9173c51c1bf19b4310d6b3dba359d790aca2605cff067783ad7234b0845b7d169c4e88e794fdd9eb3ac9676cf0432f35445f0b4af06b806ce0ff941d51a1f4250d51df91eb302338d3c7b41d600194d752d98b4a38324d503924bb8d73b01f6f1aa389362cbe673e66e6534b1702697d59403e09e72a98e79c0cba928c7d36466201ee8e235fd69e80610c425b1bafea53c2f425195d2eb501fe529543b40102c8a22fe3897cf49fdc0aca8421a1016518d61da4138ae562cd8e6040d83f696879f0faa00dfcf9fc3f0955089cf40b4bde9d6ed29a4cb367bef8aa8dd8546d81c2ff1a85b5cdb3b597709b6ff7a5422a23765940f542df711aebfd462d4aa95dac89b9e045e9447fe6da7d84fe92cc34ab3cdd70e3572c4bc61beae132cd7e66f31ec91b49833119738fb312e3e599af6b77972046779544b04ddf80320bf34370aa3aa29b4f752107ce9cf35b5d346cee2dd3714a2b0cc8e63eeffcb552d8065b2369033eeabe9ff3ef9e584ad89bc469697c57e7ecda8c565a626271ac51b6cecd92546eb924b257a7e4b2cbe93f4be9c53b603c28e5c4997817cc9538d3120b41232ebf88a7b2e130f1f8ccaffcd19e75b1062ccb625c1b2c5cb2fb2e7ac4c5cc9c1a753b47a34e56013ec02c5b62b07af56d742a747bd73216708d74e75a7364c9f679e953228c5b6ad2e80c3bc6d8aa0dfc40ac8b9df4b3f1bfe4bdd5ac888d42da6dd2e3da39de3e0db2513386f51d18106d7ae99af97225b03f029e352f5e657f46e71fb32b7609c1ae5acfdf04899348734e168859817230db4091514a6d640e60bdad4d7a07403f3de2a59b3a41ccf03ac66839b53b025dffcd11adaad300c75f290a0ec1166412e08255b57f5ea9a1ae7ad7d7fc8a8111ed36f1cc291c7de6ff628517495d54ad8cbb4017db3d9956be56343c4cf4eddb5d312aa726f8ff596c6b7917abd5d51e741fb539f9200a155031d442739bc5b0ce872ffce93924ead2b0177f0d0829bce5c6bbce543a461514523e8c01e468c7f5a0c7f23055df8de140b83cd57d65dd26c24830bb056ee7b90e44ad55e6c4187f519466ca0b5d8ecc6676438e819beb34333410e779033e29f6543954195d2d2ba6c49777de40a9e788f79f1f621ea86abb2f29d8a484858f13323492b535fde0394c426285099b0bf27059d4fd211faaf34a19dc82c468cd787b0303bbe6080f7a45367bc7cf7d8f82d99179b7c07af0d08179de1d6d99b736c2a0005c8abd6e4abe0ec40eccc461e80386bc846f7ffc7b1c7d81d6152108f68cb7fce8af62ecefdb384b5d0ee9ede20d0e408d5a4590baf904f14ec80d0c7ee591c5e3e8ac88f3ec6526edbd2016bc5ac6b5b2a0231237f4698b81aea46ea22fdfea03f911d603af3ffb6122e4184924126192e0b27ad318d5e244cc97df521d61d95a5df223ee5b4523689a835a2543b1d560afb247464a4022f17da89321f34a184e3fd77fc1725d2a7dc02f291ac57494b33dc8fde24c987fd71d30d0e627629340246386c52791ce27d226e84579e931515ad12d03941deed28efff8ba3086a0c26c7cab814195e95bab4f486988aaf3d5078d6c6ddbdf19c26d1ecc20c82c7dfd9dbc90ebc2acd90a0c71b1b548c62b41ed50b5d27793cb80fc4cb00d0dd7470248da3db615a435193ec5e5aee45677376e5f576979931580c3112090bb3c020bac582f5e6e056e8c046602aac8b3cb823263b605d9aa81cd1dece882d895d574f66d52ea665e0d1090694145523e9e2b6b1686fe67bb4891af93fac85af61e6dd84055ca9ff7e7a99c49a070bcbbe026d797f6d83d1445fcfa53d21d8f0bfeb9d434c443932c1cf54bfa0314219f0597e9e35a644503a39bd722f01155cd4cfac2c1581e63d0c912cb66fe7c21d43e72a29dd64b541970f3ee60fe8d1eda8cf973ccd9a626a8f2904a33c358859b48a8eda52a4beda7c1efc6ec6246a2720b050d48643c08556a1b80a53844e1df2d8d88380d87a4a620aa985bab2eb7e35040b6fecab1c7ce236ceaa7042974466ba635a6068b2c2ab8978d02fa6d22a8ad9fc9ed81880f9eba0a406672a74deece52051843587d7f8eaa30d198e9fd5b708a36f918cdb61a19af413dde1a68ea167adfc02538274935a50f5332b1a77b2990b92e0c63c02ce80ff583638807b1a43063b095ad2f600b146b7fcc7bdd475a920a4768d7ce5bbce04264a1f49153d9a8c895cde6f96f7407bcc231f0e286b737ea7fbdd181f31b4723bfe5a216dba51a1896d4b9930f2c6dfbf0e324a6fe408dbb068f3c28cd971026511430e036518c40203ea3d1ac473bf35275f89d2dad24e51a01b8b32800d41dd65e9669cb02ebe7bff9ae7a868e098640d2e4d53abcdc78704233b4275f15c3a253103a442cfca5bb34a7ddcb0f16a9fabc1290a56b533c832439a736b40ce883e027c0947e7b9411de8845fd34f312fea6f81da03b60f38ac375421d50c32a6a709c03a973a8921c740d1d85edbe266a37d01d090b8226f9277c5cc02ccd3d7c5ab363e5e1a36d7009cbd65ffdce4568168eed27fc74933485dd4e068d67c0f781034881e0ae583470e70443577ee9b07a1d0cc96b1acc0c6abe30836f23c2ce9201c044f842d3408bb15d7c9538137cbfc512a5f18baa4f61fe2054dc7b8c62e3ce3f83014ebfb2a71ded2889e4d6f8a633d9f5c48581f922afef1fd53620ed03fe3c5b8ab4758d0ff6dd105bd0002f38e8e51b3c7febe9b75a905607d52a96f286eb96ca12b42d17a895369cefd51966bfcb51ab00a677fc38bbc8ec4aa2fb4f4246e089c72566d7caaf87bd84fe4814d78fccd8c2d8ecda258b1639166a31352368e271e135e692607a6bdd97494e98bab67bc9472bf09ffdd892314db5ce38f384f6fbd993414474cab6f74ef443298edc34bcf05fa5f902ff2499fb945f891ce7853cd0b066b618ae6f0de71ef6a449f5ea70451ec57d01c29b1a2dede79e598210f8a4ac52cec286ab0df660ac0f7e6097d68dcd4e0bea71b2bf773b2261f6a4024b583377f4a6b060a25b6e00dc8a8a6525991353d064260992090384deece4f77c545d03be6bfddd29fcaf61a3469b7c9f3bda38a94711c27a47304cfa37c417d6af1cbd4b1bde5e46e3b7820359c81d044dbcf15a8bc096adbe98a312805f43f26feef3483876bd37d2ecb097b06b6924b8346acfcc86e197b998071901eeead377608360009ca98af8f50c89cbdc9de876c6bac5966c5f5ff6867a21a09de10ba9bed9f1d555b6767660f1d73d7f10d222b8dc1209a6fc79694f75c5ef45d90a321effad1e84f6c1a30d889d45c3331676f601e4f6ebf5402618b42ba4cef45e943ce0349337d49ff2f23ab9f83fcc0186da2fb3e9c5146d64603cddc17177ccfff6b3f25ef8ce9201a1ab8144d140b37cfa7f7d42988f95191136001da72e773e230aafaa03679dfa3f37eec44f81cb991e5195b37eca393ee6b250719ff11f92591ae0e6acdf19c34014eaf29b9ac9502b6bf161ab73105507072061c3354a1c4b61b251d25654aaa73f89a1f86cfcb5c7b1249b4b5420ee94babf0f05cf71fca331cf0c56ce42baad27691e9d6b63d08c7f33ce44a97aa3ec7c37dd4c6007c55c3013ba52744209e3bde799120ee111042230dbec9f5d5ce1bed5c17a0b4040c999650040e79782214874dc133906e3a2dc472580853f8cace666ea638e4ee51ad658842bd83ab946cd25f8ca158c5b18895847ea37cec958f5207c704c4902126fdc03130ee2249d7ee454648f3e0a2b616e0ef2770729717c0434d9ebda6ee7d8bff9286973ee84ee2a186db784791d2ae41ef1f4364a290aa3ca7a4c1b3aa6387000ef957d08df9778cb6cde340af0e63ca1bfe4f6095006dd3685a86abf684367fcaf5b02b3f1b2d8d91770be1f2cdbf3b56ec862cc64a4a95395a2367c8baac0e7adf8dc155eedcd599e553f598f1dde415b8c643273e8fdccd0c38acc943ace27b208bc91a606a6b38b9bf61cda967d56023e9c7549f619157af3a8b27e7a9a5d66ce0d3a01335c426f2795a450aed51a631786957dbe9d2fd6231b706cc1738aeb068eb996076f0deeea80fe2f7620c63a4dd93d43a87a981a2c6daceaa2ee1d179e353d0a57215db6dbdb2c8da70ac8d1d4638e529b51996ca19a799cdf22faa024d530e6a9ad39ef13465909b37c597dad14fd99b5df9cfd61d67dc232230e521fab0357dfa984c7a3103e85ec011a846307c1bbcee1717e69368417ad949e48ef73801a40f69ee6e868e4063b5023566b29165a092a86611a949284f58eaa343ea1286fbfb11395cf216b1ab9a6bf86d49b43e5a1c8bf2ec64e0e0371c80cdf8008e3c9c69eaa1f89b18d018fb07d6cf884899e9da400fdbd95c4a5e6c6f50580537982d7afd0d10689b4df2567d716fb98faddb639f1c929d32a73c45862f3db92c0960c0caf6df46adc21085545c14bea53e619a7e1953f0d895daae65c955db1e59a633a9426b6040b664685b1d3ac0b72119dcf392429ab4be194b68ad53ad4b59e8dbf669e522f0249c81aa1b063e4a4b41f19a4cde7e6256180b3ea114d4685bc744e55d9c5e7c562973aa252673ea7a5d28cd87782b73b499e043faa5a48226668b946a159e323d981c1fafdec8b523cfe1fff1db44c69ac8889e485cab1a70443e633c0e11e420b09168dbc534b7cfa123b9f2313b99ae6d6784d625cf7f0b98a2fa8667401bfc45e4f27b16e30cdbb0a5c97780b9b0685cd97ded99cfd45cd26f5283fb6e5cf5fc35cb5708e059f3b5e56abf85a74c200f6daf0e7722eb3b6c9ad47898fd64afc57f08d48edb440ea5df2ba426cf1b5c15813422733b554097cc1e64d75625153f0c39ad344e7821c2cde6c76d6e0c25b8c39f99323b7c2a0f19b4f4b1066146447a99f634d0b93a4dc0d8418db1b410b435c34ec62a6cd81e3a5b3da71591b20b65407050b289f2b22674d84bd32f5d66b11d69c2b83cf936a9fbad5522efe7cbf13b436665e63422e8e5663bd38e0889acef4442f96a87492fe5d85e79362aece01e22a128f265355537e210a6f24c8a3852cd73877aa13e7afe0d55db66de5fc7b316ae034df98d980d78df1abacf93658556f9bd484f4cc283fb3181f41cce21d16bfe85a24bb0ff1aa935cdee3a2b8fcdce612f58a49f628275b4750578a084f492a77eafcb5081fa9eb26f7ccb454e85570543caf67167507eb7aa292ff7f9d4a545348717c979893a16b89305d23f8c0f5e1c6baa9730e092330eff00e6ed6e14e655fcec3b84cc8678f38aeb8fac6620b57256392422cd4355697018f222feef839ab9b605f8a7a37338be6c5a39732ae544930145116a0ac305be291128f4fbba01b305b7e5571ba7e89f00922045a92b6ec7d09075508377fd589e8a6583761d85f6bcae6af006657428e016598492af65b080fa9b9fa0ffc3eaea5b4003218f0d2a8c7511c93bc6cbe7a19ee028de32e94db659e829841e6306fa2f48325622a02d962b98f80228ce6dccf9ac3bf3f9627f4f5de14f30298fc57b7eead0195f85f1e51a3d4ac65a7bfb53d3b635408c268bb3c4809d310c22ce7b6943f04cb830884001a16bf2550b9ddc6b1e92c45319a4abce5defc84bc45f61757f3aca453c2f68b7e8256150cf1b26398b2403aa2d096661683a4fa519116266083d9feca0a33ca078a1cd03d202b366c6573e2b8e5efb6a537c75919cb387e3f9172d2c36add201b85111b1553f0d2616930893e247ff9cbe9b33d24f7546648c8c5914baef50ebd15ad5924ddaee17843476d6953e6e301ce8f6954e0ddc59aec823ea66b19a0a8c08f1013d7270769094cb1fbf7e18bd13c8e447f11c8a99eee805ce3e5ee96163e435c9a3be47a042a2afe575dabe926534492dfab98a1b57fce23a10e51c1957346af49a0d87ae1d663a4792c118848f57c5c760f9f2b8e8cfe82c063ddcc201aa37d041fcd7d285248fa479ee8349b7f775713668b46b51a2a4fb74aa614cda636a70d1151477d8f8fbd4f7e5fd689719152e3e1837d064bbc1d746ce371ae0cd057dd367f441e1730753f8f90b9c69250ec7c6bc94959703b89e1ade9531bdcd997c977289863687657cf2a1977219b9d6559c9af339c07d5df94eb6fa45494e919737d17693e2fe55a22e58795b73bb95073803c453d15d3dd7d03b0d96021237cdbe4a992edbf7438fe57126d83f425365aca5878789a45286e98cad41fb975626d0c8cc671c6baef1243c853991bed58aeca41ec7387e5220012b2a078ee251a4d06392065fe6837246ae5b9290633a2f1c78489a8374525a4277262e7d706b4aba9764047b1b68ca616f00b901e4e194769ee50d23a218533f11d95ddb8c3e43a726a41cf358f245c360e0851df8d411c97e6100c7f893f0341808ed22326b1eae3a768a735de0e44148a5c47b690314ab824d9bef3dfc352f72ee9e125e842840d50f53761ebbdc2ac37084dc404fb542a6a186557ddbe08e26bd117e73c7b86a063211a307cd7fed7309fb52505b91b4cf044e7e09e97a7af5345a5dadbcdd236a25812392f8f66c32b6ffb1a5a5133b2d55562a4a294af0c3487d2a58ddd2acedf96c13dd281cce4dd35878c0626f47e2261d8508a981381ff157be4b08856801eef342f519bf69db4f6a704a62aeb8ca317ea10ecce5309c667c91d05bac82d9bde2656b6dc0a2ff772ce9376953e5021d98af46f8b1cb6bb370df39d923a9acbe657f57a60fc8ffec2cad023bdfbf1c9f8a3faaca3682ba1057d2d523fa1a277e961b17661512b844acfedd7b2c763f02de9e0a82b0ccc6aac6e2a60f284eeb5b2b2a0b6229d2bf4fc348ea55c132ce2c511582f0773d04283b75ac70de94e89ac23ed1be48fbf1354bff32b9deddd17de339cf81d7464fe6a0c68da6aabe2d5e3a93ec88fea4377eef9f6849124b69dd2dc65d197e8e5310424c849a0e57d187457176d06bba990abd80205d2503198412bdaa7c6c62a25152165fc1685d154bd31ea5aed9d735f86c533fb928a64ada654d09810a41c679b703bf8ca5b5f168d42ea9413bb0d8813ed8276507b4fec2ddc8fa579508a4dfd3c4a885ff5c7acf2a93633c455f1c74abeee09c6fbc903488ce6086c8449f388756103152286661e026c47b4f83fbc789450a45de7a91ae4a11c07db5207b153fe0a0da9145b50cdae6831dbe4f1e338709991c5247ec70ef91782b034f6e8b63db0ac2c595b6deb5071ff107e5c0a7703f7ba00bc83a7adea1d01ab9865a28c5070441e0d2e9b7fab7605a613c42ad689073a65e2a41eab5aba29f5f94bdcf09f49332860b9a5a0736fe5d2c86b1bc2c55dfd049a67d9915f72d72d77a35699f396948ca181220fee847c434e517dd416fed1c20d9276f62e083b5da494a5046e959d1598d001b483f1cf415d779e899ff9dfbcb5d0e14e50ec3a21ab5d083acd8ff78bd765ce2215dee4cbc1abd0067735535e0cf786a2f13364737e208e9deb43b97ac447c21d0445138dc08e2082bcd2da8e2e2e5f16da4e36f3cd186b51364e68fd53c7059e9e62f04ae2be4f0370677e794c3c2ad762285eca55dbdb9340f9379b70f421853a969c2ac91990fde6960f7a7c2cbd7835e34f969b33bb55b26f65ea680d6924bc033a557d8888933c89b442164ecdcc915092931cae08d8f00ef276c8c710d683e08e79f0aec92775858295e0022a740efa4cc27dad5248670710d8533c25e765d42484185ee81ed56eb6d96a30fe5c478a45a5ede3cf8056cf4ec48a1848795af3428f29c0a12dec1fdc3c6097f6a5b8269724a5e1c2a91a1a7e178b6e682dedeeb57f7f290e9a2bd9d9b21ced2159f8d50b22bdacc3f84425e43f879c9e6e79c028b61b41206f4141a1a7196b940956d9ee415911826c1833a033722fdbbc233f2c624ecdf3519f36bf4a39c6f8ed3b276918abae1e92e0ce7fbcdb8f27074280f49b0f19fe2027758db429b563e0372f8a886afd1a784edbba78bb43dc978b346c7201843cb51ada9cc4240d9250be01a0330dfd144d4b6fc8108918fc2103ab9a0c149f36d27c5598e931dbaa7ce1aae3b3ceef5b48cda9aa3e8c7bd0ae5a49768247c413de9c4a33441941e39a5c5aadbb6a55017138e08224c3e5bec3333e3757fcb18bada5b242c95296326e03eb0d0e89cb52dd391e7a408a06d515a2894d83097814f61c17064cd757e7587582e4c710cfad98a76043a45aa01790f22ff1d2b2c2e78da035851097aa9c3b369205d01769e17728e5b2f432889673bcb36e4898ec9c6c4387176107a92d5a89b7171a127567aa9c78fd15bc9032c31992580f5857aa894be7102da99133cc3567cd16ad9a5d0070d8bca8cadd27b7edd0454be7909f992a9d1fbbb0506121314830831f998a4582e7bc1569949f912e0f83ef4e5198562e2d4658eef8897f3115ebab473f0fef500d081e48c1eb7eaa8299efdd8614697f72d8158791a19cfd0010afa8dc4fd786fa8082b17b1edb97544aa943fc9225887bf90a330d6625cd2cc336cda28b909ca3dd1ff339416e63288929b152bce5b42c3459c018782a27be77781597f9b59b02083200c10d753ac6210865a3bdf63cb7d8031998e2d09c025077b1fb9c3d353bcca4e2fcb5d71f5b11e7a7fac51d213ca12f6e04aa9b49855791867c3678f50982a39be18c8a8958d00d4fe7f09d5f4ab9ec68a550e0b557ebb62ce96be197fc4c25c10eb644db70567224079d9e08779a49720aa9b49cbccbd5a7ba57bca899dd01372a2a128c9b35c302248ca212c890979c16c5a615706e2bde4eb9bdfda43dcc901312ff0162ae5f58d1b1a02fefe32f413181003e21924a88bec65b56970711dadab74681922bf9412147d04e37ac5636f9594f54ebfaecb6638ab40a8f3d8e091507f83f51b2462db825f880db412045a23dc60cf38e5e764165d3a2f37a294191d606c18639f3ab4082fc9ac74b5387158525da50e0f8defa9199fab1c95ea139ff5beb677004225422c7a64c509332800ddaf50fe0bf47042c5a40bf19637bfc79eb565e0746284150f67f558c0e23d6e56066330b7027670d2ca63e3f07697c44af87214bda252369e6acded72e7911e8effd4fb5b016041c0cd0dcde44e5ed96aded65a997fdee35e051a442a399d148d56ae6bb7943c1987fcbb6774d428ced95c28f768b00f8558b7b4d7ae291b395d676cb9d6e51baeee51f5ec684364ef5e8fceb770ee8db96611cbdfdb970da7e0ea1586591c5dec74d334c2be29c85a8b5b96955a702c8b5933bbfae8a7d3845b4afe3f27072fe132747898bbaf12f1063363731355e66cf5949ffa61b8c3db8b4b9d70e97bd1b6cd4e6a4e86d833f9d2e10180d886caa9dc8bca44fd49eb8c45d4ab4e5469074dd08a64ade47cfb567901f3f852818d1f92066b1a9d569f334eac29e84cc90f5af9f9e4f6661d7134c1d1baed40848eb8ed7669f915edf9f2a621f34f2b7a0e224ccfb2d280cfccf22d6c520077c7b013bbc30c9646e7913ce15e1d0e406cd59f6f369e1f2c18fe95f95e32609257f08689eee0dd362d644eaa8db5cc0502cc558ca854842c48923e77ec462b7b4f38a2b12859b7ed89405468e3f2258ef1f774e8fd47e207d5111f89f6e5128fc86f80e26fefaf0b264c5ee2728e0578aadfee19a2324fdcfe11c4b370b48433255f28123b425eb79cc6be3e1c4f7131227df5140cf8847d94529b0a651eb57c5be6ee18be38ce881842aca2cab46502778881bec4b7e2aed7aedbbfd2f186937be2743e30dd73df5921d2c945564036df6207073edf7972d447a69652bbf15effc064e5e307699e6594af9cabed9d9d2fb11bbe7ddc6ac2af792aa3088e9205ea86187fe1c040d22aac37714b637f934b52d4149b1f8f9385d44c77c6d06fb712394399b04f617882bb5c93fa88cd7c4e1ca80d208b89f316ce750f00db86c353be1ed2c7bfca613ac9ececb9ffe68ac9d9d2cedb1876024d10c665434855281406f60b197c3ae7bc0174674def99c6600ddd3f3bd0589b144b842211238277144ab6da2649f534e83f78684a737c7cb6c6d43361fc644ea3ab5c2409ade484d8dbf3c0b4e9fee4784d637c856e8ee33377ce10bc0ab9ccda57b0c92deba03e0ef87785666b627a5accb73e47bdb78445c58995aa37adab22bd0ce5714629611089b4a3b0c12ea372a009d728347ac9048a841d1f4394415fdf1fe82f5483564014111528cf87dffc23f4b7e6b4c7e5da405b720fe2e55bf4c729e28fa99f54de46014f41c4356862eeb8d8a55534c27d27aa0412315c55511bb7d39468ace32ba4435a78cbe09516e172300e39a01cacafa558743fdfaf1d5cc0b0262c5dc67f8360dcc13a8188fbee9267076ecd3374dcd843937e82f015acce2523203fb2cc0aecab7b790a5a7f4453fcadba0ccbfeb16c5eb47c8382a5bd230da9e688bb43693994a77940544c76570f3717c272e1f2f566fa5e66a22985cb97301e50b0fb74806f244765b07cde9dbd3618fd0ff316cca88d4d7a511768cb6806fa52000dfca97a9188cfb5eaf64b6f554b3d15d8cd6e7531efd69cb04a614c4b0694db598a8389a6cd47ca472ef2a723355df4f1622b93238d02fc38f29760cadd8e26e64e36171fe6db4f6ae8a9f7b8c346ce47d6b478312882e287e6f8eef344508e3599793c5d64a202e4dc4a1cc67805943cdaede0f9db9bb06cc612246acf63e418b07534d52f92123f29b84cc9d87a8130c6f18cf42471438f387d798ae6339db558c322de43b15e4a44242c8cbf97fba273adfd7b73e51dd50c9d8f3c48ef2fe3fb37fbbe7d49095103ac4a0fb4a7a5a11b7d2c9c320e96c20b2c727815c879151be52dd10bbfcd9be4692b1c4eb4160f78a7ba59a96a6514d44f22994f62c9460b4a62c34c0e363807dfc23a67b506ec5d17c68128d07ae7b885b88f83fbfb606e6bf811480343c30454bb1fb50694c298c738fc7a391c0ee354509c08d60ff36758a613a21364944374c08b9a02668c4e1b4d0f809e64078e1bc6f8d2440fdf3be4022b4c23e935dcc76f1957b9c2c20b44f2c177c6b6cae2898342d7248ed09a58ebb38cef4a1d6923aecf243b92f77e372bb697be8ea3d2beaa285d61096bad4ec9c6140c854321c8c0e84b09f34b23b8bfcc3c5cec0ba28860e36c51fa73a86ea6a33ed27b86b55606a4f53aa7ebef2c54082043f431c2d5ee592f17373e150d0637482bf31f13295d320c4b693080c41639cd878b11715f040a7eaa8df450e23d01c276303238156da3fa715dd8673003786e825e6539dede091621ccefc7322fb0b3232118d29d326e53670324d8c33ae0dfdfcb81ad30adb29f8755bbc643ab4f3fc06dbb41ad5e71086f3699fbcab57d15352289ec23b631483e6c27b5b7077b65cb1e93bb82b5ccb7ca5756d26dbb0c2a708f703752e191647a05944bfbfb7e589a3c9393b5f711f0e94e4ccda70bf6de43e1f93c2fca44b8927bdcf3d47f16a32a1f81d41b92e83ecf9aace9c5d827172359b7db131cff1225943a3bf6d391092cf5a68e200d04069b56888e5dba7d7af3dcfb7dd6d994246ad4133b18ad8767d2ff1e1c7b25611352e7fe59f7651301327574f95f667e201b4d7d9895d720039de864d94b2e76003c34910fe823448f65f5a6d1e9509a4db049dd3d2914ffd9d53b427784e76ae8cb7fc1aa85972cddd7cfb13ea787c4d4a598e3f175dc1f9520365b33735566ef285fca2985ddbc4837141c79a4c0c7c1b8bb2ca45ff6330e16c24dc6ece42dc1de106d5273900127cbaa56e743838d2d47bf6037d2d8a611bc713e009e9ccdd91de5d99c00967c4e0badd5ad0b056f81f7209525fe9afe014262f51d0a03f0ea6d8aa079bc4528d8e4eaa042bf9fef7fd02860f64d35102f545d9ed3d5290ab0be05c21346f0bf7ac11509c77538ccc4d06d4a8848f95ffcbb60147c7b22dee52db3a047856590ffff531a3937f9a3fc7e620c24b19e41faa65be9886decc3f44779022b3eb658447655fe71186dcb560e5cfa7466ac4634d7e20016333b76cce0c66a2817e47ab2264f98b6852efd9d29877ccd97e0f0bcb3eec7e550b686fd1eb151250e87f0f2abceec8a248bbb6d75e23fd2c8c4f9fa22b631f14c7420285e125faee90db8b1af0e85d07f42ff30178de3ab459fd2e04520defe1ad7abe1334cd42ae345920b93db59d80a68ba99c3ccb9ad9f79a315a11eef1fc2cdb916f1ac6ce1246d50c6f753a02e7aeb8a1ab1e81c2b4d60bfcf79a3bb30eb63007bdc931938f2770a58d7e98658eb01f6f791221ceea63961d9617ab671fa649b82f21abab96083c6f06ba20055e198fb92d65f4fce49ecff8f0d0d53aa546ecae7cdeb51948640c3504c72ea4670b2444e66ea5f6bc6a46eeb7f2e50465adbd3d6f84542681aa9f16450fc982a71a01e71bb4b2ffb158476cd736f7a8d03cbcc618e331a49e5d4ac9f624f7ef6ce65b0d8364ad59c0d6e12b5c19b131732babec37fe188fe31e88bbe9966123ef0fff4fc36c5b0c7b7936d59936138e3d7cdb33149a8344afa738825a5f5c5b0b93c0ff76cfe98a9a6502516b6b38d84c9e5a31ce3353353bdedb45aaeb0c0881f5473725184d337ecc47b0d6b25c43c859ed3669016185ebe0fc6b7f277f0925749af6d950c59722ffb5d84cb5d774d9e2c8c2471f43fe8117f16f91b08f6fd86dfc420c77dc69346de155625d2a3d36d8b03aec8608db290f65acbf53cd182873c51d90de86e3c80f882bb0149c99e5030526c6667dd19cb592c0be7e5b597390ddaf5673f473c1f71f1e6d0b813b03e2fdb88b26e0fb0740b7b2e7d19f83f3c42057aafc006b70fc7e55a17fd3e35d0c41792682cce894bf51cc1b0cb0c966378f2484cfe313d5b40eb9671f4d715cfc5fdc3545e1f3d8b2a37c69b392e72cb345c959d45f6fa5f4e4b19b92f0480b1cc7a6449c4e5ba70041e2a6aed39d3e7d38e1955f010b8c701140abe0edde44efa2933d0d44e88e43c7054ac1273032a87b6739dbb64c069f1ca25ce5260886bcfc5a2d588a104e2ef55c25c65c8396d0aaa2d0e57d78094bdc26b823775b776022068d07b7a24a8e720a6e56e1ff7c17da52025ce1c66b0efb28389b704967e4a9617f40df563290e387bd6a7ddf38528bc29d777c8a24da62704b19d913ea83ec0509a3a5d46d8890469fdae10c71f923d9f2c2cec282837f0025cb62dd3e8a44f7fe6661b794817e8463730464ea7d1db8a1c680706bea8fce00518850fa2bf2dc961d10e67ca5aa5e1bb8c252c048f362ffb42a42bc8b9a4f4c8390706dde9cfe12f5aad7eb09eb20e735c00da4aea4ee81efce2b53ddf98b551c15d96a52817479799a054574ed1a5504ab4713e394ac3b2f6804edbc874cc921c23e7bedd1b8efb6f48dacef1294eb9bdeba8a65ad529f26820bce3aa763ecb7850a987fb6244a50b713a6ec33140c9f691b7d15e5ec513a99dc46c331b8e15fbdf8302266960fcda90a7682b040217893a108cb78eaf45b8c2cd5518f0f97d79828816eef6744fd96a1deaae95768c2e78aca8a0a9844aa05dc4ea56effff7012daff6f05172341694919b64899e13639b6bdb676c85bafd4a118dfea9562f58ab59551abc352b55962bc1f285bc33ca8ceab94980baa19014f3668a303ee0465247ba4acce97ec618b0d1e351326e9e60b31ea5af774eb0fa303bc2e748dfdbc18a88b1335d18948fedb01dc9b943a838e8f0eda27f91d338d80ea2ede29be61d386b879ee82a73b5ddcb6e5e1686fe1d3a80624d8845a2683c00028b04dbf1252e86a98ca545934f9b4f6cb5e8a0b72c9ea0f2ddd9db6a4fc9bea55d7d2f1267b386b94b8c329fe737628b04c5512e7685e5d902b3d12b64219957863130224e99e73a65695f7b0b04f9dbd0de929d80377ba038677d7e11f21bd2c685abb7209225b373fa270d2fb1f50d50a035b9ace5f8b33de877f16909a691ddf8938e0742844b6f1777c27d6e12f6fe3fc324600462c8d4dfc85b6dd5907260a32848ad1fc66f79f0a66861dbd3226737c1c8d45b1b19b76265a19a44c0c4a7260477144c0e1aa8f36c7abde43deb98164c288b95e7874e89db6926a8439a8b92f725ae215f454fcf962d92c164002a8d1249fe153391cc4bd8b251e6505bc03a15585f6a5711e951d19ec2dbe1aa6fc26f912df7dde42e073b86e13fd41fa2b7d6d51af2c9797b69a91773e7b11c74dc2542fdf50c5e14525113eabad8b480c615a1df20a1458610a7b67613e8e5b5d14544c0efae117def6ef4e08482a72de1ccd710f581f6e14239261d7469fb5655adcf79b98ad7d73af914ab7d83c498d4f25130e37b4120cc8593fb9e22cef4a00a788c5cb9a5f1a56e7db4184ea3f9ce95d99b955ab9519d51e11715aaaa936b17b8efc31389ae3eee4ad13b821958520a8c526a7435fcfd5c912ea650493380615b1ab1ee7eada823ed0eb337f0c7da1a80ebce5be2b48919d100ec76cf3dd455682410f5997f82c67efc90f4039254c397d138e1030d34d828af46a3a71128c5297f1862d800317c5e422da517782c8f11b90f3f9ae8fb4c23220f50aa3fdbc3ac0f5ba08b4c20e022625fc0a57d1a7b14c022a7fc0b88371b296e27cf3f8e50b52032bd7befca2349b6a1060c0cc8c7644d9e5ec92494dd5dd1577e0c20ffc4a31a2e28a8d5f493b0dcd6d7aba6b24d23d09254b9ad6c1e898c2a6c9ec18e3605cc1039c8a7095c3420184739f581e228fb5881218d7aa23f3093e6f1cffbbf3313df352e7640626c4fe62a6f1cc3420b13aefc15a5fc2884ba301442c8dedf602d962b666c4e4f04179e0de07fa99535a707c75239264ead33c3062bb90bdc9404cef4e3a1af008aad5f0deef8989fa41eb20da53a0dde71db22ef6052632219a259d18e3e47c809b7e9ab906642c2fa7cc1a5519f1db4a43e3aa9ebad48538467b1e609a8723a8a4e54d1212ebc50b9b769789575e23ebea265db7b528c872fb57243d5f53259ecd39a096bbb2928a071f725ba0c028ae43db0c6151cb6c5d85e63cff485e4f9b7804ab3996970a546a238f8d2939cac2538b11a13f09bb6a21682f6aa6ca3128c27df2ea0ab8f080774cd778f5a3799c7f61ff6e184baa7b19ef1c581d4d5ebae3bfa81334ac5928c439424a5f0bdcbaaeeea6fded756f9585fd983846a0ef0b838e60635fd8e078e0aaadfcf83ac6dd8f8e57df7b953bd1993323fa0c5bf124abd8b688253210b6b10b0ada87692151ab81dfbc34f4ed8bfb7abd19da455038c7c49b2c384277cd4e8e601af70bf171f2fcd565f95ce30c9094122658531a9b8a80c5ee10bda8fb4a93b3bdc533767b64718030c86a4b1b47eee5c0003b6df38d990f8bfc83a72cb65d2316f72d37b7448555d34cf9bbc95ba9ad66837c1dc7a1259ba1be16c76c539eb38c2386c999c2e8ceff36c8c993fe453e8a311bdb844fc2545a06d0758a03c4cd878787bbb055ce3c5ed51b5c3ebf0234c5876125a21dad8d8fd678118a4d38dc50d2c9e0d0e6c1a2cd1f3ec4d355b52f74eb59ebd292883272e60ab18c2f1686fe32bc1cb48f3a143f5b67dd5b5c0c47a3ddd830c41a08c05d714a1ab868c28d0afcb965b0db419b9c60926e717db1847a27debbc81da7c45f7e24d9543efa0d4fd744c7f204aafe7cce89b7b88e46ba071a62d31a183ccf4dec0cb0b05cda983118caed371c0e232e2846067c78ef4133e9fb8eb3a1bcc20c48f5f710781ff834e171237a7a8b1ecc8c59ae2be9f279f7a4c996d8bd8c4230cad8b34837674985165941ac2e4dc828e05e7165da5daa32364c1fd5a9adfafc014570fe8fdff41fe547ac8d6671b915b694e6302e9f41a5ec8946c37d922ffbca6daae4582cce6aefc22dcc5eca230901bbe93ea63f336354d645f5097a02537d086936e87fad803592b160db00418edbf50d0e5dec4d76f08fac36ec94d8e89c4d15d6096073140bbf4b8f80781d787bdde0e0791c0ee0ce272dddb9acc2bc8538e16170e0e18582ca0a2e16266c6800d66160b4dc92ee3823c3f8641d83e65edac6748efd4f6e2daf2bec09153fa5bd89ae47c0c7714587357ccd490a131abd5d9eae47fe37b42607f4e76f3fa1581a77e32dec21c9705c1a902a0d5e017e96019c1626d52cf887db4e271d43a78a3ba9d985b2f942d6cab7ef09a9eb2747d8f84bc856cd44368118583dab816f18f82b14a4c71d075901368a004562e3a3e50ade66a8a0503e1575bad79d5165f5202fea222103cfc536a7786876a698b676e986825c313809f5778d9bfa1c9e597a9df6a3d320afc169ce9906a07da0fc739e6d553cf5d08cce0bd8efa87557e17d137e22348599b1d86c7c6e0bad8cf96196f0309f9ed7cded2a4e0c2b4c1a8281398289fffe287c8abae60ca5fbd0fc6ea0bbea0314008d4b3a9c5d86b7bb55eb5406ddf741a189db76ef48ddcc37a7e12d4a33487572446910471dd7303f6b975e9d0f6e5289d529573008a23c0979ae7a108850027317105404f68110790b0bd43363e76ea293423386af6e4ffa5c31f02c61da76ff3219f15712669d98e05288b5e20e72cc2295afb191459322b95e14233016913d1f863fb901c3e0e046485af5b885ebdec019f91afe9102d712f9ccbbec313518f40916e533c71349c7813e98f9bd07a7ffaddaf026b6808a5a62a3c22376bc6a0de1e3b5069675b95a932f42a9fbaabf566f7ae2c5d7191e399e381463321109b70bacebe93276b4bfe230a71f573d1e9912388253f82d4575dfe9a3798e193d9f0b2f65a42a7d3fab054a48594c16c26e23e7452e7be1a3b2e8baa535539efddab2a1d0b47d64487a70b91d98f2e998f4512d46775cdc62c1dc7b848d2ad388b67fe6b12e7a6e68427f2f0e132c9834c3d76124646ace366818213fd6a6e22716b6edd71b4b52897e03a187111838db3a628618c4a3582943e82903269bc80439ce4cfe452b5cc2277e761dc6ea2a988686a635835dc22f404ec3d9e3a11310957532786e282d3f2e82dc4a8e83a1dac7e063d5c0911da988d23b4563b0421253b5400b7a369fbf6bceb996cb5bf4968c4250060a6868a38ec0bc3f5b8b5e343386cbb924834b4032c77944fbbffaa7dda153e2e89b824cb452442ee3406d4ac88c07e6e7aef78323fe3c08fc2345916f06c00e7cdc21c8b6aee9de46eec45e8aedd3b89b9e76d14426b811321d90874c0fd8429091c6b8ed54ccc8f0b5827a5888e225bad6e55031cc150acb8d66445b2525dbe35eb16f37bff3540267940286da100284ec85eef6d0868d45faca4768923bd95df72fdbc1e80c9e6bf3232aa21704ff8d8d8cde5e7fb41b166cf5db9b27033eee4832546d220f933c9f6eafb39babfa595d94efaf0fb976bde7888bc3b59d8fc74d5232dfbeea207cb747c9b642467ee2114f47aacfc07cd89a6ad83aeccbb6a20eac6ad5475b215f415ec65ec87634799f3ba3e515bedbf8d846db001bc2e9e42bb19434fcdebf76e7e2d820284aa309551791c211b355f3eb8f712539d1eb41974befddf8160bda624f518a46ee89017034f3da1ae4dd9ef240756154b49001ee15985339c7f19a16a4e7225884061a49276fad269d0cf8d4578eff6f10dfe178f46efcaac5cf9d3551108633929916442e34b52e43749ddc8f6185d570ce0230de03fdadda60331511a4c77db23eed1bf14429675baf743190aaec9797bd3a319cf8cab105e1555449b01b3df90ec06999eee9cbc4335c5dbc0da567cd9fb47ff1399a447bad406d3eb51cd7b9910258799d7caf46066483ccd75bf546f5cffd80b166a9bca972e4850ba537965e875a658ca4707ff2f4e379fa331b5bfe49f6fc0cdc16e25fc79cacf739549b3ccf65f79eac7c3c41177bdc4c8e159c655fdb222d4f69bbae1610941786cfeb963e9b51a30e3995e47d85c0d9d31da049f9793abd0947a9034e18e635a3ee7a2db5ac8dbd7861781bb8fe29b60cdb892a285695ee65acbf16b072f310756b186421eb0dc7551d7553680202a02469cb0436df43ab7d152aab9545d98aafdfc8b456c3cd35846d9441ed76e024d61003849c22fc0040a28af42f6b6ab54a352498d1b7d7b5dcc2998847af71431ac3ebddb4b81f39918e7bdd2fbef720a6cf2e1a8330e0480b889c43838ecec0388a2dd3b68d9308793d41a39bb9f22f8d11cad2146085dd31cdd9338d132b9b6c4922a9cb4cc15fafe7cb1503fd72e8a2ffa3b29100ba1998c7e7ed1ba03bc9db051fbcacf37e001f2c9883c21b66090d8c2d91a91e379406b4387fa320349bb0b7a3cea1201c47e75ba010bcb326b1611452bca473a7c530e7e3e5bdd672d0783ca9908fc786c91de626483b96d1ad6f50527091e9debc75d8c4ac3a1d6d0142543c619b882e47c15fe8f5ed1e907a113786796bb01df159c989e6924e09f8054e71731c7c79c3487968efe8261e2ca73f548e9b4ee9dcc52f11161f050fb2884b558fa69cbef7fcbe76c90a19fdb011a31bf307fafe5840a582c9de101e5d9666164d1d2abe3b00f8784d02f7ede72a92e80ee2aabc4bb77bde55b8f4eacca33558646de815109ddf3d69653a5def013f0306f7ab34252ef41ea65540041e9c777d9f6cc546e7f6c6d6b4095c9646b9518ad6bc870a1d96f238bef1f2130d8c10d5b1cd99b385e0a504581fc162ef8d220ef4d0224690feaa73e30552ab604fdfe5f5cb10e2c65b74a9fcf2c8885a2feeb8bd328415c59c750b866127ed9409d340e93c8f3618440ef6a031c08f367dc7434458913bca06e960008e9c4ebdb606c790668ec2ac545985429ca8339a30af43e90486e76b3d4980d86546e459b66586dbf23d0a41c9600025c29ac964edc1c77c67d95cbb5c67d1367f30d31a8ade1b129b87c4dc8edf333baf2a0ddd0616be68553289bfb2fa1fc1dc1c5ba60d83e4e78e2dd8c93c8dd6d0bf5f993f694abadadbf3d1f406bdba9d1a83be3f405e2aa04129bc565696548eee3d77b903b814d111053acfe65b5386f8bc5d8c1e45e85ded21d108bfc8ec8fb4d2a2190777fe42534361e1d9ae1d6a47a566740655c9fab99d13c098f3d8f73f31e1828ce706dbc56a1a01b1a9e8b2bafbb083ae4ddbccd68e5718ba7036201139492b6cb190bbe7cb88df5c6740cd12acc45d748e2f4a626b95c7cc26de891f62f4327676ed14dc62e2eb5cbbc90fd12d8637a2c46c1c0d49133b349c0aaced1cdae2bbbaa04d1363f64a1e300e1ef175ea7dfd4048a4c1500bb6a188e40b2f963ae19ab4d73e561e9014d5d901ba90ce5b4b603f2685e84efe913bf9b0f6a9765dd2aab15cf6a36ac56c2a70a3f38e3eb1e303916b44c1bdf54ea39227062ecd5804aab07ceebf4f5ba27f7805b36cf3520591e2d6a26833d5c375b2779189edab9727cba0855115343848b1ad63401887eac4c0c42ae81789edbf3b6b776d9d427a48a428a0a7bfce3afa7280888ab189cb516e88a4709a1dc06a56ac06078bc1f86512d470372b01d89b569803e00cc518ccddc7bf46db33cd7119fbf2b031e2c7fb04b006e9f18bf8b720d6a693e38314609891a6bd0d7c1dc2c216c8d56292f5445674f271ff110acb75cbf09c9ab5926d5bdce071fc44c1afd1428fd60e84f9310d70546a1827558a37e94dc9fa689090451ef92c0652b1add207cccc42cac8fc5eea96d8c9b64c760df5e851744a0388e982e308b89e0518d8b0318a9af8ccb2c67039c2e60fccac37ca790eb905a240d9789465cdc3901741b8a70c61d3b504c4efa4b2bd416df02c2c9ccea77f7cd3785dbd154a12e7b9c5015e612c537e2ef5ca58a632d14df23281887ae0fa50fe83cb2d0406461500c9f4c20d3e3980824e4f18474b7ad3e6c7f5526d5c5d0e447c087703e817e01befa68c0edbc77c2a25484493cf610612bccd494b7fc3103595a3ecba9828a263216224bb72b2b6079c16fd7a6b767d95e518a10e556ac6aae17e7d97468d3115a07ae219afce93f3cf07b70b9b3fcafbe1806715e0c74b546b6d4051d580e97dec83a2a769bad6b5088003455577281db3313747622d534771b93b6b2e65f282905eeca5376de741a1f7728852a080bfc2c3e55024bd455d14f98257eddf81cebe2afe61ddd9c12f455d6bca32eca5b74011d5b6e2530c3b5d66c498253cf79254d058a6175276e0ad941230aa4306eda2ef8b12e0eefd1720d9cda07dc816040f61f2644ab80691710c6c2d9c1c7d34949e546f61d80f819682f64f1123751f0dbecf2c877db33fd0c235982138f7adb7b1975c255a1fce06a1332bc6aafd85724c506e71d003f5afe841a2eef8227ad73963b32ee7e4f0cbaa0e53925d674107fe2cb2d3652700e403f8b1efc976c4fbfc9ef5ac80bb19903113b81213d5a54d2f3e79a9d53cc1955f2a15b005550def331c64641ffa3980c291ee23a25f4306ff93820d5a405484f61ddcdc57ca2ee0f7e8a166d80f78b027a70ba48d3ebba2ec0de4c745792b6b442fda1ad0fd723d10050fde518814e47db675ccd1e2cec7c96b2bdd1890b038531c6c676c5ddea488f824b76e14c28ebb6691251c7d48861c75dddbdce3a2989c20136e72dda5ec7a3b69b59ac02659a518d5d46a07d7810ec478833f133dd353d13d1428b205b0e48c1b5a4c9eca7ccfc6b1b6fa32009c4dc3c06a0d3e6ad9b984e070c323171c737ef867e7de0d52c1620d8793a7b4c5b22786087b63b8c98595dce0849fe4e389aba40504b51818472aea3a0bc964eeff9a99bfa9366abe820b38b520a9c588d5cd90a8b0215b50d636a2cf482506ff3ad4752ba36e555af37a17609de4f95da40c869de04c9ff55a9bd602e7b370d7c838844af3e319e7114c108ebb886abb1fdc5f954945359904ab6cdf888e2a279773d94431ac506467e4e996fc62aeff43b58c35aec85bc3a4af0c91c6e2168a12bf7666cd204118d52869da3b62436c5d94fb8270cbb4aefbf6b8de42531956036affb24940d8663502f2a2a5e84d19907c28d0c395c8324eaf55785930fd0192202db267d27bf79cbdb06a08f94966a951a6b0898c29187d9ce63de1f440206a0e408751f170fe913196c98f9d4129049e1aede43203e8f289f969047fe18cc330170e9a15a5c3a7c1f4a73fcdaa8f0a9e2c3d29f0e7b64da790ee9489249289731cabf45ffc3490bb5009234d437f3773393aa43ca93e2e416ba019b9bcce6644aa582e655c8a7ab0d4599dedaa0f2670f38378af8462e1bf067e41a190f500d0ea44fe9716d63d1dcafb5c4b06073c541e6c30da2dc70bd68b0c92d07dd35239d94aabf65c90b96916a46057a8eb8fbe5c76811c70c3b837d6361cf104a385a40337cefdc0391dd492160683c67e336a561cd1d29e627060f3b0bf0018da5eeecaab28ea0c4566475151e3e5f13b50d6490d9e499be7daad167c3fb54093c49045fc761cf8505c196026ae16d80623797aa0c04a56e6e5157f3914f6da71934798f6c286bc44d4edcbd36cb81b7113d70421c5241789ffc4c0685583e7a3ec304a4631442b703387322ae183a3ce4c97ccfcef27805438a1222efbd5827f6444aa13245773efeec063ac009ae8ebbf403316a36a30861201c401fdbc5a6d9b49aae6a12d2c216e31ba7a7042c3ca38547052870f76e3990a69c2a62f5dd6d570cde52e2cf0a84b266a51f04bba0ae6ef30eb06e16909f9828ae828e8365462f0e2ff3221b36323b48629d24e9944d087435cfc19ecb952f33d1ae5a9ad6fdbe00547094467b8877056f97734b8d731e82e8e8d701d2731565a0bdb176fc57399621d19793be0f6d6f669dce641aa7b353f1a40685a42ba920916e475c1b8baef089ee2ff40d96ec146f38d5d06a44a0a8f30679aa2bd346e15d02a142872b3761d5163f20566d38f8941fc969cf087da84f5748f4abaf0d3a5bf049e13832ebfa00046e7d5fbdc93a96eb420067ba6a4fbf4c255e6da114ad98b426d9ceaf27ad313613a256b8b621564e6542c948b282d734c42bcfda29e196f09c745f9e54dc320f190e3141ad8f8f83994d824d93ea903577dd61990d22897c4ecde00c879fd27818c96703816d7c8ba9de782a3127502bcd588799187a6eeb3d29963a2a4a66deda12f1594a143acace15ee7169c8e44b195b25c144730152e305aea2d6770daf7c631fd43c5371eba62439714548e54a019b98570e5b259962f2335d075485a60caa6b8944e60d33200e5a1d5075b05f328c49606d505769a5240336d076e619eb9ba9cccda94e5797e46721dcac2ce38a73c86f7b03fdb1b262744b8ed7a3ec0e87fb4828c7acbbcb4494e8235abc30660dc57295a61d3921f63f540835eaa4e4a83647a3583dd599f4a441094dad88c2b7433bd5f4ec08c77a02ca33906a19b20786c35c51ed622c4e56f9ed41e4bf2280a86cce3f4f2bcad38b9a4d70a2d6319d6c7e1101d4b3cc6d521dc919be445e34ee3dc6c43110d39cc266384f483b8a3fcdbfc686e76cc86e194ac2a657b27831cbf211b58a93f1002e77631436b6fab193a85972d695c5f1289bcfbedd49b9670be0a17e0a36450a1a2b26cf5696fb9f30634cfda809943a8d1971689611dc5927dc13d3f2508265feb3f46968728af475f320773b973ce874b9c401258703a91dc911bbac46590eac324a232c8e53b912f82cd69acad9e596b3c3ab9ccea31e47b9920fe48e202aef43174398517374706b33e5e76dff4447dd7629dc6bcfdf0524c331b092211223be960acacde199cdee5bfd5712db2f308c71c92142b96f852f3eb8e3edd836c585124bbb5af91f02c0d8e7fb7bc457b87b5a1bb3e5ab02e623f5478ef60c2c5da1cbc9048b9cb60b3900c755b1b6226c718a2fbc13ab9fef6cc25c1b38554d05279185d97a130d00d2526c9aa4d7564f4014027a2b3326e56bb9972644a2a5fcb310502f79e545bbe043ca3099079d95ba6ef0dd909a8369cf16f9d1b80613868e9d81951ab1ec887e1c25bebe1695d926c830f43cd717e1510d1038193415ca5951ef393bfbc4b8c994973c96ddffdbb968d402f93ddc1a66cec39ff7648daccece81e5bdfc9758fdd2977df450a5f855f3a23d9ef5787b3a1a38d5d4007f74c06a927362952c6a1d7f449812aed99dafc00ec60d80be9ed48d357a7eda3f2e1534533a9cdb177a3bcab110ec08246233135099893a30ed3c1caa2f5af058792170c42a18a29a10acb0259ff4f59b8e8eabcf4459e1de103fac249d81e5a5f6419bc4e60dabc91a17d0e5cd43fef52dd2beb420894ae1dfb028105bbdd08412d474362a65e317d516928344ddc751af6483b93e65756ddf7bb3836f2a27aea13ea93f5d8019a32019469019f00a2544c28b85dec25d680c3fe2357ca35cede27d4c636593e256814a44c07bf2f0ae9d3dfe65dd82e7f8f06aba75b4c8d6a262406df34ed0a0fec10844b7a1bbba5e18d2902a9aba1f7e5a1b065b9ac4e3469c43ac3874fac7febf7c3fbe55e7f2de2a03c2f89ec8e42e47d029e9cd3f827e71983827e5a48198825fe847aa34d0e42b39dfff580445172b16e9e0d092174958a5385d095e57c808d6355057ac5a04cff4f95df9acc724a021fd36c9d30b8484b7fc0d1b1b2eda0d78143dbaa2d5bedfef4e3a002c2486b2418cefbeea5703de5c397a3c6daa73ebb629fc94289246ae3a24f428fd3968922d3ab6b30636ab14eaf1ac3c6d3de539a1882764796520cad12c259c3afd04f76806f9ff562672065cd044fdd7831b38f8bb7c948896f2171d1dccc3b8b090c833d10f788aa39d42e7bbeb7dab00efca38aa9d8993a9005f2ad73513cf215aa80efaf16045ff37012334ba0a34f992ca228afb182a2345ec26fb081c04c37115bfb19d881bdcabc42983be019093f61e4171597f376c809760a5fec59d4c43546f94087decb4c27022f9154fa26b2f549f37b69bd55bae3a904e6c03e1b8dfd2a4a3a2bbb041d0d2e1fb111d7dfe834fe47754708e169ca026c176bc685ee89d93643b1f125562c95ecd668f1df5c11ee1e32710d54c8f2761c32ecf8287456eb33cb96fabe2d5ec807d097598581d7d6cb8fa384018fe69d1891b9a7c0cb17cd662e6a33fef892eb22e6b5232ae6510a6d2b7c08972ddfb8358c8b9db6747e1aa1f77aa6650964f9f4b8a95cea0ec71005131a4ac03a315f6b5032924359aad604538adffcee64796eefbfd412d59b68f28a3561be8bbf7ed34a42546d5194d3f4cb767600ed68af32eaa6a1ad959f3e47a1088ef65c18ac02e1ef02749d3ffa3a7bf164b158d8e918618ea71abafc14ee355c1facfd41857417bb36ee7661e493c9fc764f0082a6b0a567fe0cc17a3ff1af324492d67a5ba6ba764e9d611b5353c76996e7e149ef19ed21cbf4b4011ce213cc224a9353b20db143183afe07c5f6104d63292b6fed90f6847957cb766efbaad0fcd1744b1608d9dd5f472f15f7b38742bffbad11c5c325a2c75ce0ef10c1bedc9a7cc1a9da3b8ddee33b4038b72757af42901ab9cedd13e6470a98015ffb501cddd5abc6f133ac02ab40db999dcd8685ab2fa22f5b9b41b76a0287cf4b620b3d8aa73c5a6504ba2cbf7218e6d5d80dd24d0921a3fbbda56b19a72f224ff8c89339c0125ad8307cd0071f860c183e9358c535040984d50ff0b85615be67f5acc0c5e6b7d9623640e522d119c5e28e68e8c32ccb5bf796ef6ae5a6bfada407fcc1c1ba0b65daae98267342876cdb4defeae71cf0ac99c3956c28b4cf1390ac07247e836b9b14e8b2c522f0ef1cff9fdf5ce321cdd269933a05b7d53fcc552c18646fb9609b5cfc8430ef902a32c99aa2441868d1777cbfc7f2d3d2350bf6e06b2669d7e2e674e72e283e6e172dd1ddacb2535f198222af2cb10b7c0382fbfc88c684dd8b626035aaf7d44383f8b1463527fc841e0a0ec9becdd04cec77e6a0a00f62425b4c84de4386df8ab327fd4849b3f22c99547c4d3d008fcc9dd22282967004f965679ea1e8bd522360ec166b806281c003038d95adaf3f1aafe705f7eab40c3389cf595d8267c1444a58390561ac6b6c1dbb4cb2a46b60cd4745c7e35178f06b15101ff998e8b3bbfae1909c29eb636c3e16f83ce448156b4778ffc6b3baadbcd2ea4b2a566fdff5e55d579cf3b6f6fa94748aef1482f55c0c9b4b0ca3f11236c2aad94bd2713af6fe6e2b4a5e052b9f072fca4f0833506d4bc74b56a99239d45017ec08ae3c52f7c74166cfce72b1e21a5a6da700469316ae7cdd87c7b9446c0afaa825ad5135e3bfc9ddce9364afaa1d0922d0055f96a600243f7273770946d52bda3d684199dd79dde028e9a8783371fb452b49d5c903214e4f03f46cbdb9333f1091be3cfebf90d9ba3b0afebc8b7a3eb92b6053531bf9eadbce83193540cb10033d6a797ca94f1e2133f3f6a52e48e16f8fc04cd0363dfb5e205f8a742497791cc374ede19cf8d79b56b94f4232f57d84880045bb722d407bb91d6c219a831f146001eded10be59d9d2491680d87213682a038f51e8fc6bd369f63fee47e1ed8d888b0e5a4078d1828f71c413d64336744b228b870131d7e5d584c66415f6e2fafb452209a8026cd82e731e59f74889b6a66511776848b4e9fcf786096b26a0515b90e2eab3479ccbea118236e54898b12dd5113ef9192fab72919af214e771e92e0f3614661c80791275ce67dd63923d1ff7a7043dc01352f204a9cb79c755cefb5b33cb869f351ae746fc6743dae7690e04834e8faf39c4f9656541de9410df91c76bf7be5adbe3c16d44f87eff0cf40ea46fadbf8cda34481423c571d76f7cc6eb828e1dced98d1c987c2970c4c24cb18d6dce8bc490d434a77492f2de7e68756ada2dc6c2b4a217f84b5b0d8be622cc41fbff5b727294bd80a564ad83de9778edcddc087eae9c50fb23c3c8027515028312c442a0e87e0de88232dcedd082d3147c2f5a1015d30d3887e46e975349fb185d43fb8a9d0dbb3c9588549208088464b74109f409a0c6cb0b70eb348a2cd0c1fef1668be94e514b88441e4a8b63fce1300369a7ec3f2a73c04c8aca17f459e3dffd2f224aef5c2d135f61c85fb21d2592f529635731c9cf4c93d1c3bef6871706b0beab6ba331769fb79a93a625d53604f98e8a52d362a49121542c416a79982a1ed26dd388968fb0737bea32d72ab2438101ab2e7d3e3b04c05b308605a9e7f2cbc4dcf05f2e501455d3d5273d6b077a251cceb40e583d6e627af096b192b7769c5e5ac330ef82ea08bd3385001f60040df2ceaa0637e6f7ca7dd8afac7861d800f79cbf8c3378fef4843fcb138fe3c2cde78f395abd8776e40d438ed462c8a3730e6dc7f45463d60aaf4f9da1fdf61a3c579fe0ab6dc98bdba519ad184eb50a61f9cbf5b5b06c1e2c6d8a4253a9cae4b3f2737ad93b6e52e52a4669ee569f2b7393d1adec171e507003e572b5806d55bca0730f16ec66b61b5c4a7462bba47a0d36742adfd8a4a648f215864cb0fdbeb5719efce952749e9c7bb9b7dbf923359ec592f90b17a34cc917140e6e59026cfeb4597f421dd983c314e222b693a0eaadc782bef63fa33eb4e5ed83d4ac5ecbe6454b9f389861a2abe00675fd217081aa714367626e71cfb4d92c4398812435dc525893a0e161c17c3fc4f92ca2a64cd4f7723b837b54baf649b074ce6dad48ab97b0d8f764ea28ff05baab740d48b935a41f05d4b09cd06bd6f03490f63982c62db030a2694be818404efae909648b353c88c9883bb249e2de494ca76f4b436197f2d2aa5f9151c218fc8dee7c25133f46afae730d72c9aef1dc43a609a1e0f0afdaf7f63afa8148e30ad006156502b09ad133ea6f50d75f718b61b95319b751f336cff1942ad628509bb4e77914afdc1e22cf09cdce0f0c2b42f368e08987f23d4df5873d156e28fc5fc0fb4b0fa9e9e60db2f56aaf78b822f74302ff3004405468fe60e2515de30eda65ab08f1c1c2a965a6c073c5292ad73194f632379887cffc3b0b538cd683730c906e125138fc347676643557500088cd486ed5a83fe8fcd6aab34afc4666707c9f5777f76f0c016fef348fd410267eaca04f222df61239ea6740573df3c260025a40b161bb704596de167ddae08bcae1da1ba034326eee81999fc701822eff32eb91b8a4618b171f020640f355acf183cfcf809beba2d4ce5961ddcd371a77a13c3e3730432594a1236236778abed57ca4cbe41652c830d065e1dcfbe6b3d2e498e4e931e8b35f3294cf1f9114989b17a6fc9470bf5002abe888e9f9c735131810d1e2cae7c6e37042025a53a21bbe24ea61a4e33978535d78b1fac2f0703222ffc13a111e76ca2fd93629a7a454ecf4a0a024e6f186044bdfeb08667e25c6fc07e07c979e93ad996fda223f0298fd8e3eeb1a673bee6f493a1b60e5e89d6fea3d8671c6b38c813ecc029b0d058773d6a064a749bc108bfc018a5824c47f4fc8f7b92529317294f0c2eca001c667d0c9eb9a8b9be1c2da8c567f2a085a8fe8ab77f6650a701270632a8143bceb42a903a887e51491f05f4b54299ea4154f1dfe189c666c59356087a495f78b1563fdf2185b6eb6a8c7c593ed2e8f636bdb56d090fc36feec3fa272b5dfa9746d1f434dcb1ce8dcab943a0d07536c80d5a4980daf88e48441b12dca340f6d0dc88bf2c75b37c4bda21f2e8a7ef515fbf0adda80e58147c311ce841c7936d987d1f859bcdfe7ae014cba30a90c83af9b78b2e483ec4de9ef49b88e736737bd969c7a89afef7a13483192bd4badef22ad87ba416c93ccbabfe2b200c70a9d095cbca820bd44c6ce1eb397b3cce032a0c1fdac56572be69ee5b04c27fd3fddde5b828416f4be6225f60a7225502669032398c4241c2138d17ff39023edd53154d329a1d3101fb386603d09052e515fa85d281101d961d4b59aacb7e77b6672b12ca66b27219ab7d769343d73cfc43d3e83706a96907093749e286f801130b9c988bae58078ebdec28b31dbb6f95f86efbf1607e01402b2cc70b47fcae77f8da3f6bc44eb71f849258e19d26511f884fe7a484f6c16e13ba98a3d2ebde349625707faa9d48d7df25abc3295364b783f679b7cbebd1e4ab68046358d2d38240fc4085b7d68971558b63e086ae7c8d8c6105a8b9f90d2cbc4bc5fe49222d278a0a9dc46e3858f4f79119ac6fda91cc0d602a9d7c21c3864cbf235087329ecc94785f10142b5b4cba32f703483b662e76a0fcfcce4d3daaca6ac2b34fd29e155e3bd440a11f8e9e8f3770026f439fc82071dc344839fabe56e1c750bcbb06835a70da68e7c7f86e6ec5f48be1b1c8a04bb8c96b50bd00766068dc756c784aec1aa215cf89fa027b2806ecb44d12c9cdf415ba7fb447f18c384c0f7b2a096e1c4e6204dd52854bb49898bb0f4486f71118956bf7c3179e28bee22f1d83af6afb8f0ffedb4c733ce1cfbbf9e4cea5ae9e2e338b401acff73470a56c57866670233840644a9169542792de28f9f2c8c4fd1c026036e74196a135b55951711d56a86560c9015e4145f7c1acc8479db62f218155a85e8107a1d9c4fcd0ccaa7a9944939d1e6c567d618cc2b2b24a2beeb90f93b3f1c3cdcad789f79ecc5d4c3086718c902337f2aa66fa8745eb22f047bdb3bd1b723ef384e95650e01eedb219480ff7ea70d4a4460ed30c0892f490b6be041040f6532175ac75916753f1ae1cc9644f692201c88aaa34163ccbf38b66eab2fed3f7d052d0edcde9b7b2da086d2373980569caa2658580629d0dbb1fd99a0b270b71878593e7d8fc131773412b2ee44ffbc90ef5dfe356d4df10354fd9ffc27557581f8204f1cbbcd11bb002c752bdf9c680749c1f5ac2cecdd27eea55eddc204746aa108ca02f0d8df751464f886ad1aa3d4d45d7ea837c424c981442229d62bc4afb9858cc14622fc4a2ed37763ebedb9027317fbeed79f8cf92048764e59b0eb9a16d4b71808d7dff98092e49a05e98ce438aaeeafd95038c2729aab1f6a7ec4e5770babc285fa620844facae55765d8eea2fdb247ca3211a6f5c6ed3967e60be616606dd32dea976f4037f72e156baf52b43c28b6476520a7caeea24acc980a496139b39364e9282866b57461e750b813cc1f936658d85fcb2e79310dce0d69c3a9525a266b9c09cd500c3f22c580cbc3985250d1c30d3ccf5d59f6b8807b428398555f79139f954df3df67ee6ada4c160884e541b8f90b2f200aeefeb31e3531bab62d77e4742f44e8b0b0fc3172e8e16af87eec65be124d6cc7989e19be4f5d00ec150e95b2b097c91c8032400c2a3281ea13a1e3a35b7b055dce6e6326419e8b240320127b98db7eca60e8e9a735e93acf374208513c71b168356e7a587940b9dd55128d9e65860baa450685c2cbd38a3ae00024e4a650658e52e0061b6184e5421064eb899b61ab6ef70311725beb5b9cd67696b9cf5f46b7bb1fa3dcc03841f2d9e3451f6fe7bd38cd4d8e2e418a7cd06988c2d0216dbbc30ace88f3f7cf865c0cdf4d753d2dde9e64f29de9c49add47740fe61121f48d7ab8d5a40f1c04689aec69fd5b0d9d6288d5e4c51faa76f5e473e822cfb0ea33438c9ba5ae68588b574701b91a63e9ec3a6b15fa9220884f5d0df09e2dc0a47646f92928bb5093016b53dc75cbdab3d3da6b123edf9fb3d70b1aef1363738f3615f39c4f313c9246e97034b98dc9749efb93d89edaecb0225bdae3af42a86ca1896dc19b89689f5cea92795d2784c916cdb30ed497cfce4e0d3a81ee8d021fe1e6fac4e25ad19a1d372549e4d2a1e24e923be2ff8fc58385b509e9bc192aeb00bf34e6bc63f1a381910405a42125d3539f48b14e1fddbe30764ebfbba9ede7c8fa82e42febdd8f85e3b35e8ef2c0a0e53bc04de27149dab40d4f691c04738a5e885de13a9b59aace7823413a50376c3f327bdae7680fe6dacd3a3acff7b24b7c7ff8adc55cd2c807eae4c60956695534aa8a1a9dcdd521325ac4b2bfcbb931628fa182d61fa16544d1086279c3babb37cc4fd58fe6cceb248fc3e9f08d0ff068d261d4348314bf2075bc4ee34988e8ccfd0b9a43576bdc928155f7eca1ebacf4fb586963a13b09e26e3a8347c77ae15008167e74550e778d6103588ab23e1cad33276949f17e67084010d652f9fe575acc4a1c0758f4bac9e022927622ee3943d5689ad0054c48583f7146b09d1bed0ab45180e4bd4bf76dbc62ba0768df32d69f578bd7ab0b324df259b42a0b65a9915a42150c78c7ab21da59b8648305728cd0edc4a671f91f585dccb5e7c262cde89bbb90adc58ddec3e0d70f3ec49a90dbb99d908de337cefbcd558ae5b75e5758c1bc4136aa8e2aeb58bf2e6555c95f22ce17861632c45c0cff2b417f3ff5af77f2dc0d744d3d0dbe41a8c762277d2d7e734694fd0c03181e0c3b8b0ad8cdf1b2ac49690b109b0554b48569e43d7aa02913449c5bd5f48250c691b4c6245f88d7f4501b3f3b90a2a6252deba3fc45f264c095869dd593d353d111f06c561f43603681a58cd243616417bf1e2415a0e7144a19770423a8c3e2b0b8b8aa94e04f0f0363958239cec2c4d7e073a7a89f2750e345c697f0b0c1445fa9662cb8dbc4ddab9c606a104b67e71974d67e0f7dea19575037c3db0640e445768862e402698e1e79fc03ca12485b5536e3ba06fba5d63d7bf0cb0d138327a7506dc246cc4b2669955f3bf78078e41f9b4067ec5b557da9572122269bbf3180b92bf639994b8376dfc6022e42de1484f92dfd96aa3ce7ca465bafc89821de90489b67f09de9102354e7fc3e71c85b453ce28be4dfe07977646130a180f1c4a2e77256d8dc4cc3c17aba5dd0463e4cfa4e53a73be234e6f42a38f5fc7e2a139fe63ad80eb9473448286797cc11f5099f1210a304d669d35fffaf6357fc45d004718a03da8c20a5ddb7421e8b50f47ad17e54bd59a27bc519fc93bc0a1817527ef7d52999028d91b0171167b1de79b0dbf7c77f0f442bb61d85960a225865014e1f50597ce57d3ccdc9720af3793565bbba6b64296c0234f38e5910ef7b171e8d4610b4e0aab8f6b4e7c060c49107f63e1ee749c69a512c22a612fa48b7fd83369e6883c6747810a46ae10bdad93fe486aa0f46e9991fea516d3b8c5ad8f441a8702aa031d81920d06d618cacb4a0fafe05672e826e3b99d4846f2e537d3cc8fd5a143d07a00336b04ede2b4deba46f2178fad9cc6ec978f1431cc9bdd392d7cd635361c775aaa680e8b583a673a663373695d9f207500bf8d00a21c511d0c6107bd078e90ec7021ab69580529419e1751e4dc5b3c158ffff84bed68d7238df9b2290b5d5649cb357e75a1cf77bb8b3041dcaac512157ef8d7bd9bebab502c44d22148e872b46475801189831d74e3597ef4f3382bd9128d8513fd59ce613189dfa3bed88bf90f40b85f4ca85b080dc4ecfca9dba85449696583f4ec6ebc0981284dbf76d8f5372e22eedb1b2e6a3cb846d80fdd387f75b9954ff1200fd171f072249b382382b53ae1a9db9280308426a4776267dd1bf640837f9079883ef4c458ba7f54609a34bcab963419233f2febbcadec83436df086ee641fecb9586706c5b12eb844be11c31700d9a9534a4961a95a7fbe366106b45c2a49e665c806be9bc7e2d2e641751d652a76d23d112f71e82f7adf9f4ccd155e2a3e742d3017bd93999ca22358dd7e8c3ecd0392c00f89cdb709289f3626b31b469b63e7b4da0722c75af5e0a753201ec5219d2efe87b4024f0b0c643c6ffc7fbf1fcde358217a6f07844e86603c669f318330c9d5668011efc8499dfc75cdee188ab35ff94b5306d7449336e5b474a3f0dfb9ab8b9d58d63dbb6aeae7efa3fe1fcc9378876e7f5445aa1d4e8c90ea9fdd178ded6ecde2690a6c8a9342773d6fcedf1c0059f931732da2da9fdfae1695484478cebbb014065d1a5a8764bf3e6c9d3369bb04d5f05eabcbd97e898118cb9dfd1afe27ef7acad29896fff397785c5015f1f9718979046098e4f81d0b967fe437f8b0aa86cfac601ebc524a69d70991b924a292f79ff1150669c2bafb4e56a5afe5848271546629d1c912a8382dcb78abad6e4de15ae1cc2ac5d70c68e5038a1fdc1d337bf1d59d48cce045476753627009a9936d5786f5f9ca6aaec86f0903ff43ba5b9869f59c1c8c447d5b60031b84833cedd07d729b9d88cd8597bee11f1b8410883f748dc5815c6ad9dbe75d5715e25467791aeb7428c13c0049bd19c541b7dae1075b810789984462e34e5b961fcdb3e809b6dddbe9fffe4e54fd743afef658db8bc3f8e478b48533d9c4d0b12694633179a9f948193c0da94cd65f924ace7f8f19f473377248dec6124635eef57017fd612c062dff2938f9739a487cc4e9aae7ce1570f6d7f66336516d2f366487770c2cdf669ea5c3a4374c30cf24757afe03a1239da9aef5aec99649f7e3634f994e1bae639db834b3c176fb7b87e6974e46dbabf53bb5c61e00ba36aebf528f879dc6cdd928af1e48e24df34b03ea3a910364935fd3024f65c2214fa53d58eaad55d6f397a0b709bd775ecf8c46b4baf6945978cbbf6178fbd81fe1af2886c7ddaf598817dacda19b26fda24bb3b1200a3aa89bbc0c3ec27a97fda07e2239095cc5f9afbb75a89efca0d99804f3e6f80ac776ec2b44ec46e53cfb186380e210d4eafc56e42d158dd06dcec00dbd04536881cc3a7378b5fde177b2b148e5a6617c16d63bb0ad78e4848a40eae0fb91600dafc0c32d65e886ee673515aa688e5722a2b965127249da6af80925f3d649a99df38ecbbe93a4ae7b4a2c0acb48e3601ae67a0078484d21f799ffd8993fc28111e648a8dac4393510c1f57910ebabbff9872755f1db45a67afd4d8b373c9c8386719bdee3314dde32ca933cded3a62241fcb39b5b75dfce558d33e5f15c26d5c0b346f887f630c4f13f501ef5175bc59a7a344bc6062e2cb9ac0c1c2c86592ac80c91ac3608ea21f173bbcec5c88a156109d7445fe893019271d452f9f42cca586255d01cedbbc6da881170dc1472f865f5a069bb671eed30889c4e9cb0324f1657053d34a25c154b1cdc40fecc1fd38ca8308d64e16b40fc9704045b8e61103bdb0359874efb2117792a644c2f4541bc7ca22f58f354f4789b7303c10f4a0d347a98b52241a8cf75fae21d8d0ae45adf35e8b7b8c06691526e98363fe9768792fb5585c613e0ff82f2e70b164fcb38b2c76161cfcdda04e991c58690d0ed22dbfb8d70e2b098c5ce9a1b2e99cd9f8f82cc9d7ba08cbb9a484545cbdc4056a6e81efc2b19d8b95a3a2d1c9b13f85769e589906632d32a5677b6eaec6b77fe8f57cdc4275d09ec45ddf8af827da6cf787094c2bd2783441df65219cdeea7ad04010219720a846201d435c00b394b3e3cc8f8916edbdc7c411ddacc1d7a4845e990521b434867ca9f12ecc995f93930b8353f2c0b7ee63a8dc0389a1ab155eaacd3097f594baa3fee23cd3cd22e349c6b8baa876d71d470b9096122b69271c1fbed4a8344215bfe249831f2ad7a75948046afa6968e8f64dc9c985739e6b8cfb0b6ba56391044424ae9903cd3e4132bbb467b32f987ed3ad0ecf0c28eff9d6e22664f48237483b5265bbaa4f1968e76b91c8db6806e1b133710dd28816ce415c2d251cef8a77674c5f243be881b36c43536935799a46a1abcdb100c042f57472d086c77b2bc116c826cbc9bf91e09d752fa22c0384eb3c91155d982ddbd07e991e59bf8a3032076c597121f80399c6f37aa5c9af29090e881f28e6c8be775dd01c07961b47cbfb4fd505202c21c0a4e28f85fd230ab6c6e05fbb2a215f31342b3ff9822e5cbf910f5d46caa291594319fe7059e0429b81318e51b080e50947795fdb9d35f16549f7b5e423b8fe4a84041aae4e768827435d7895a4aad90bf333a151b5a6baacc46111311b07f95855d6167597e640eea445fc92802814790bd259ae651699337c9b824b05ecaeac02ab58927494052bc983fb418c5960a120f5847cb5299acf2c4241d5954a063f5c63a53da845f0d7913c55d8d6d0a5eeff74d0b43ef1c844b192db761e321a3699fce0c2fd63fa7dafd04979c39334a7289b394d2654c4136d64d1a23b62e63e47095fef191dce0e80ffed98574285b121ecb106f7308b4e3cf33a39604235b4f785e319fdd1759900dd7f26e77e8af7b6d2aacdd5e25addac0a06c1d059d344df643a4f6344de192ef17241aa942ea9ac7c75f8dccb08b0caf580066a48891eed4d8d451de1b6615173a3ef9631d3335d9be4af3b6dadbf0ccc81c8b8724836ff6ec8dcefa6043cb54f2db6149f1035e1ecd3cb01de0256198d65142ecc46a1b0cf4a8d1efaa80421c96bac1da30d1cf42ffc5fc9c7594e64b267764348c4cab701de9ed8eadc81d092f210dbf2bad45f108c88a15702800aa6406c958ac2cfbfd31216b82075872f26432c5260c18ab58098fe15010f5b4cd440bf938d25cac21e364f1382e4c0b33f30123442a40a9ed69a4d649f976ac94da11fd608b8a625864322f9e7d825995a12aa83e8b69028fd12ab55d26ec5268d5597a2c6f776a5ddda20395629d8c2a13b38fad1dc8036551d390e0c981c514968dcd695f4d2ef7ad601f88691dbafadf695334d4608e7b75f9771dad871c7ffeaf818e593e9b6af6b79f6d6f80f238ce429263657f412c9fdbfa0d6d9fbe6d21a7b5f292f1a88a5cc3a0d0a5a1ebd7ed1ea73402834a67a4920fdc33a173f997fa8c18a0818419b5c25c64f980099e17b49f0fb735ec4850289f9b5a4fbc8b131875b38fc669744c297fe379a7c89c3f3927128b87bc7175c632eaaec58152b24bec89f2a6a5026aed200d7cf7aba2746b057452ec04d3e1dcedd31526b600002b2454926fb5e90f67d67c1de6e3f167d441dc2eac966c463efd3b5efbdf4d57268aec2e9db95fa563af4dfbe413f1197e52c18b37efd457d8292226cf40b3e3c759e228640b521cc42b5e6c2265fbef387db23ee492eb7146a4632f9ea469eb825629966268976a527d92b9f537cd4acae6fbd7469a7d39e911c5d5c8f7ce649302e773939ef70f6ac4451ce1e3d29a0d54411bded0b68eb780c7eb502681d7e06b3f218c9054d5f6f2d34521489c13548ffe4d8b4e76ca9abbe170136b80febdcc7493b55cd394db76837978643585913d08f0ea45ee1649006a435f739b8cff67ee14fd66049d5c47eed325c7b0ad0a6533c4926524fdc812be638e5f2a691dc308b968b0a08e7c1412d8f8b73f6779244240df5ae5e9a8998e0d881404bd4012d6734ced89abe9ed0d844651c15174303faf1fadf6a302ca5ea82ad939fde857c16a483243f274e5ed886f9c157e20ad36d75094bdd4e95d676b4b9a4c3bf801231bf712763e0c628b126456f89950a17c0e62958bed1fdf1ece5a033e41d57b43f4191051cc8d889632df6d00abc14c613d9a278b5a8feb923c1a85ab2eb0c6e7c1fb2476ece7df0a67cd76285f22b2e07cf43dcf79e9bdb53182d26bfc563fd4ed1fa68cd3e477a15b26fdfe0fd7ac4267acaa0165031d27aad168119eb75cbe6112d558cf88aa069291daad301b81c430329eee438bea49ed3763fbe3d5099a46f8ed5a1adf1cbe0101bd4bfa93fa9ba2a512d21ffbf6c2651145bd2a65535e1bc6e85c7ad6b9242f9530e09d63ebcab0c43f13e2367230efe0a9be7cc09d396150621dc4f76aa120455bc3aa55c7ebdbaf7ed0f0fd08ce6ec1a2bdff36ca0494a33f801cf48cb178a48ffed7cc4a5957f844ce849ca7227738f3f715545cab7bf7cef0f7d95e654b3f9903ded1e511033eba3695f371024b264c7dda4de8ae4784d19a3030026d7ebdd3e3083b09141fe8ac391c0327ad751cc76ae092f11ef153c317829d0d91b996de931c5ef08b580ffe36a4b6f1d5aee1b4ba0f989de1ab7d35caf16f946aa229c1e709cf0c0a87a3a3162a439e3b4e2aebcb83202dce5c0cbf14567437b93941c20f4d040ba928eba3205ad907597b3f04c522c45df7c97199df5f3c5aef3aeb74a676802947345ace50d58de7f1ca720ad84ef6f2f9e5542105485c82703e55fce787c6fc3939ebe8aab75c85d781b4c5c48078cf805daf1b8d96f7e10a6936652a2457154a46914a5228e4f9929f99f6adee377b7689c55f42bbd8898c3d3f94fd9316e72f58ae534037b4aa7f8e37cce6b57aa2b106f3eef16953dfef5d4f451a1f325aebc29b7e92012ad6137a5b75561e4a7783ab422a3c08a508c23e8ae3e28c46aac1c5eadf1bbc350c427ad7101e213e869597e20a88f4d1e5d6fc64ce4ca82bfd2e7094162c27366a88b4315ff31305eebf7285490e3f81c8a2e5556c9ef4c6121194acefb0cda4554ad22b69660cad19287484ace7c7d526a698fe853232bf1c82faf8d1df7c64d6f300e8c53dbf38f53a566c4966cfe4bfc42c3cd2b38017962c52c5b7a3e714d6f439760fe277eec6b23329c9e21eb9333c537d970c0fcddab92c08fa9662d45ef358d7a9eff25ba1e5a3de480dcff3491007a394f7f61c7464efc1cc83d60141c5569471d9416a94c0bf81125fba53004d60145e28be4061ca6ea632796cca2b6e9bde346c0f07a71de1df3d53b2d1810b56a9ab5a4921ae871cb7035338e13fa243b40b9fb3376c1738d1185508d551d66fc5645fffc5bde343962b08b1716c99dbbc16dbe71aa9683d1fd9f6d34a45059a9320dc454de1fb26004479e797e31e8cb0768959a9c25fd6e828817bf0f3cec03efceb52166d2bb2634f00ad93c2579cfa69248cef0f5beb2fad9b6133c31a459e6c59230a944aa8a06d09ec7ad5d3882b42604c6721b2dcf2c440041b86c4c7594d7e92164bf4a66eca8e39334aa0c136d7568c887df3db8bd707df943069c9f14c2b1bb1c6923e2a42f44da14cba9e398113496ccc2c8ee37014e9db5596d43e15ae48e7b2aa8ae00879e7d4ca3b2fd9681944b2c14a321a9f3173f213af4704cc06fe2127deedb77f240c43efde6f5c0aaa7c785704fd4c303ea804a16e2b1cde9eb812c01b34c3a1cc7b89cc9b339c3eb44cfc13d9c7564ec0417c0f368f699ab98b3e8e8db0c66e76e9b39cad223ec2177a09bb037674e0be78e314b5c7b9047ca86d096f8743cb712f9cf88489d048e14401243c81525a192836cc407c6dc72fc353e22af839d395f3b2c9fffbfd072865021c8b10b38e39b24e1b2e0bcf5d5925d539e99a15ca797e1d7abc627d5a79a29c80aaf0c478251967564a7aa0adbce8c09f35028549d69e2ed402465aa4f59255efca4a537480535a50e1494ea57ee89b231ea36385eb1299876c5db01702b44542a5499f1072535a0df7a1371c7cf7069d1f00323154bec151cb925a823564c072fd8460a8ff8dc72aaed3e4db21e32dfc90f0d4586f44ae60a342aec0ea8885c88e36bed5b0965037bc6da27e40871aeef2125ac674f6132fc8175e425b0e420da3d24de42be11e0b957908e42d6344512c852ff9d2d4ccfad0536c1b2c01cc3884661c7097a6b2f99a93d596c77db3c3434d3019a60747969c3cf11042310bdd1c98b7dcca20e20662f7b4226fffc7786a74c89175ae3721a11e96c196ce3c4c592dd05f4fdaa900e0dff5d4786a1a60c3589ab06bbce53f4a8a0434afc5e90390f4c34a6ad00b8f9c80cd53811c09a04e7d0bcefaba7ca382723419c80ed0a68b3779353cfb6b859c0e2b161f2d6bf45d025a351d22d51dc3091d5bd06b5032db52921fbcf844733c08b4c71cf9f8a6f7269af2375bab777484095c441044ece0e90bc78175413dcfbf5650a5103ddc3da2ae506319c5b8da29790dbae1855f299d9bd7be4a1de42752abd1f94a2ae152f67fa5643edfd65ceb6858eb6fa5d7bc7872d1a59f12ec63ce2af1396de117eab53b06eaf5d58dd5aee871f344812deb2e4c9e0cc1a29ecbfc78a431864761c103d3ed8e0f3d6d885c57c2a053f63b481b06a13a82948f948911eb5e026a0e74550ab1c16f3ef9b77409ccae50ab6b1abb256659f6d66e20ddbf45ffe06949e1b02e085ead3b89a49fa8185cfb9ceb848f7a98e6fe6d48d69b5f05ffef61257e538b1d839a7df954492b3f7bade1d43620667c99f6a7e0be09d6c4ed737dfd03bd0b3751a938472ed2a2c7e12e986957445c938958f3cb686b8dca54b31483d7962103cd8da8307428209cb6c05663e41dc63e0ef0ebfd80393cbe30c4dea53c448f343cb70ff341db580f8b9bed144bb647b5fa69ddd9cb6b884be3931eac6333735086d4a2abbd1a310daca9206813bc85dd16cf49bf8b7fe45281218443c8e79efddb15ee2672dffef478d040ae07300f862ca31718d4f840240aa1be741a9d23da827b04d0bcf6e18a4e8f51b06244f14be81fad297b5afb38e0112a187b2e92a9f5f9c7e9fa5d694fa22dbba24cf7b29aef8b3bcd3b2701f8f0b20698ee61a2d60c71a189db094d329ebea9fa9f295b23568a98a90d75848c3e118a448cae6fe8e875600fbe0a6d8af82ada664160407f0cfb0ad2781d0787360d66a94088698192756b31e5e4d6bb0003956d8ded3eee55bb194837d152c76f29b937392a771cbd0cd8554004a50eaddaace3bda78ecc87697169135e099b3a8613b8807ab109c6ea1a300a3cc8557dfd451df54403c556a5d036e07fc228d1f6be96622642c3f3541c0b9057fc5bc0b664d3e08896c54ee3d7cb45f1e2fb2e6d37c352b3ec4bceede8504472d25be97765eaf20fd7cdf9ff4b294c0020749ccd07eb31c2ec2ef11bc17ce8e336dd69af20c93a17719c5d0c7ee9f70763329c9905afd42e6009de9e29d62bc01394e2a0b1c9fc1de031e8524ac0a9312f903527854ea8ce61332ff8032fe4a68afd6d84ff94da88a1cd341fc6caf4af9533d213abe268dd77b0a455f0838cfc1e7c4ba34b684bfee3730370e560b72180f81011d78693d954144767001cac6003331100b42681d583677b98647b1bc3859acd3ae8e45e5b9903077d57d82a1047f86d2962671573818ae40ce4dc945b888b64122e6e17b50446ea65af9a7783ca12b5ef7d32ba7eca5fd41ae744616ad95f4c402b07438dbb2a35cf0a8e0077852c82694eed25ab9924770f4ecf55019e79fbdc9e5146fb4f40fec2c5f12368844b6c0212eee9c8f58efe9ba6f016df955087190a974840d5ddccf7f978f492e4f8b1a15b7f8a6a97389e6ef8322d21b050a2ec0cad1f40036e5d8db6a5ebdf33b1abc7d1e7732a7a911f44eb2e1e9e73a264f80f28c5ff239bf535f6eed829aa4fe2716292a54fb22487f910cd21096d1a20694fcffa2aa40d68d2ecb44f6677675b16d3b349c68188481560c90abadfd61ef2c6f3d90162a0fc7656b65e0fe63ca51561eea659e3bad180cd276f8824840502c4cea16c0bf8da737619ab137aead27afef01dd3bf2ed4e6591558533055b9cd2dd42b5738c52be639b5e74b1b9312feda6c17cb4a1fcefe46a4aaa04b28d1cd6c454edd903846fd30f4fbf1482cd6f764d960e831dc716011e95a04ab4b72c72c3b7fbe54fe7a9f12668c95c4f86fb82b4bad99e97042bc2d44a6541d546961d4daaf2211f453a3057012da82b341184bc0b7f8a06aba776309f56518fc9b17299d20fb753aca775b96124110c2c2868236ae34c526cb79f3728c607fa9ff745bd12c6f809daf4d5b7ff9651b824ec5dd55e4bd2f56469784df9cf06cc099446d9721d2acc11ac1a3319d30550992425b0524d03030dc056d692f820a419b5d59a5e206965fa16bf5e3a957c2403f23de82fefbf7ecae5b917d380e70f950b732e5890d5034e3d6a4965990c2f66782099a9911554fedb8d113463c179aec5e027dec89182fda1028634ace51852e16d62eab04bf80fa7a3e9af026d0aa5261267dc08581c23b1ac76834f060a19117dec23caf4d9297db56cd4ece1adaccb275c396f4850f984d7371d1135006e2fdc8c07eafb73a2238ad2686ddc2e0f81154391fe87aba498121cd6964603cebe3f3c87f83f79e55ceb31a85c6fccb79bf871ac14ac74c6048c6573771a84fa4bc4a6837ffd92cce1bb2b65fae15e5553dfe2b6865b2c987420630b55caae9ee03b2e488fe35525d07f1fcb8951aed49417ebe9c75069967fd1d75995db43e9d959e756f1f3b07edc2c464be5df91927689d391f48044d97f536a7470e5d7b733a6db282ca73da2d79d1ef121b869a3b4ad8cc2d717eddfc9bbf6de5d327864ff52a268e1f671174841cfaed23096449ad561fd1b3afad37b067e63d2376051d4dce46bb1020bb11195b33c01fe7adbc15886434c9253908ad69f418f9e5d5bb1f1c8bea08cd6991335cf74a45708f94a75428b13a4347c30418502d3a86d3681cdcd44d403cf3edecc868059fa0d408597a76b910731d437636d5865def68784b7adb722f9582cf6f2006e8a0392f635b944688a33904b678bcadc8e4ce5f7289f9efb3db8025a817ceb2e2b42046e7433771dc1ab44773c8b6305610dcc66cf6111196a56c51bf283058271fd41e83085e3d375dc781bd5c91bf7b2cd7cacc138e02942d4ada54c67c83ec61fa332ff8a8f46fca91667e159ab9898b83ad4b3e9aa335bf1f894f31e14f15ee3e099bc835b96d2fa797cb56658bb3cfe65467e2a45edc386efacf2e09f6729f2945a81bad686678eb50eafaa9ac84411f99de0aecaaaf023cdabc660ec8b70f25a42de9ad4eb67030628335837c5247ed4d97822d7dd498f83493430d38be39a6e9fd7fd20358d7cbeb24e67a3155f44a62a6df39cb79636817a62025a9c256ffa7ddf7f3ad2951434e593d0f0aa7f0655ed841aad5362cf3bf25e044425eb28d682c2e1fd805f926ea4ea4ed03f46eed2c55dffde4af6e41977a66869de696847a6973cfe4157a6d06758261f6634c43eb07c004c8118e8910351f8c7c265966f098013a38d11f3f3582fc47cb067ce99d87f863d4464da87a5bb121a2c0eb063933e61f44cfe102d26732c21159c6cbfbeb431dcf31fe688997f41307124b9de17135a741f08159f956c05c2bb169d3c288dffbe4a093095ab5f2196c40b6dbaf7ec86dd5ee7c43b205007abafa549664fb301e64d3b00d512b0c27bac019b7e162fc01685e1fd43d4e71143b0b821c602943e1c0e9fa36fa8e2584b40894ead58bb431bc4329744515388fb699211d1df3797cbd8248b7cb4a05b04eeea21e0a9fe2f62bbab22ee903ffcc331e5b3badb7d3202a078dd2d30d45ba49728c7b9f015794cacbe86b81a2ec6f668c941238cc1667f3925369790ab1d04b565650fe5ac1ac1bd5c03ff93934e0332dc4477facf03037c9bf2fcbcebf05c8e8b7d9af1d27f362601977a3b81e52bd73cd67ad4d0c1df9880b155e44a1908d67e1c09e17690abe72ae9b9ef29fc3d92c38ddf994b8a4b50c254b23533001d770f7b7511b9170683766bb871e7fa6bf273c444c7ba60e0e1e47b889c6ba5e7a953ac617b5d7c6659362616ce024ec01ee2a54708353b80da59d0ecc958e803e12e75b967c7aabf364f79b24a31bc47d7c68c2f8b1a49b8f623af6490e3dcc1f512386eb5d60adce8f77a6fdd372b9354acc7e80ee14e664a7e6dbd7bf6fad0e0036d0183ac9316d77b4b914de1887a099f80d837243bcce7a2e66952cffe96214ea465ad519ff552ddad5b1a8092c000729c3ee5d2f7ee0aebeceef89d284bbd08772502a874f8aae306eb1558f1f823b04b23d09e2c9b90e080302477affb83e6440abfb6df09c1ca9fc2b08b4a3e11f4aef5a253722470c5aa271749ab38cadf0000ed11d136ba2d7a8cf67c9ba4d94fedeb9c1c92870737aa02780c14549629f9ac9757148ea725ec4f2e4c350a0268cfce2876c3a752c9b99d852b594edb097e9ff3bdb17067e0be7a2c4ef6054dec69853dc63fdc3f6ebd0c5918e8c694d5e7be32ad1c6f370d04ee55f6413951b0eaf2ab8d64e459bdac0bd9f68f5f187a5a7e955450d5af9fc273104331f6871786b730cb0e78161c38a9340bef3d4cde341d86e8105d0580eb3fdecef669a1d225c2684ad801e0d71233debe01caf4efca89d44ebb918ec4bfdd51e4d173e81a4dd2fa4cde657ee0777c62091608c212c2988e542985aa8ac470a7224f2379d53c4ef9014ab2746329bde4d0cf9238caceaaba03451574f7bce9b6c81640e3f5843f5bafea5c0d98bb3049199b6c7a3c017193d3be1afc0c105b63f853bb0800aa3f0a50f4ea4663f49fa2ab6d104b8acc0bf0116c8f31de026e0bfa703e261634b9ba302c597f5708dca39189db87c6967989c0f0e6eb3778f9d7ad7c096724799da65b9bcbe878f4a0c8c458f6a6ca2e46eb37e57ee8f574238baf62dc40c5e64c4274082c1b3601b4ad94c7f0063ccd657353cf1a8a55f960e6e8438c69d029d425018a4f9a37fffcd9f74956895f98fe640b4e165f577cb8ead7e772ae8bfdda0773beca8c255f4f73c1e168cc4b27f17c651b23d8f6e2859ae8f8f0b351548502239f55dd9743675e4d2e377a3e2c093ad481d9df8ea8212334d027bc7d25eef47a4dea3c663c2bfc50b4ce0a728a396228af3692604e378438ad9f55a95cb87723b58cc75977a81eb781ca9144a0f7ff5fcb853c7632b5602c43e7f97942f6a4477730ef0cba754f9b4eb81914f8d683ef4e2ba42ce1039ea47290eaecf918489826ce2d12de8eed32931a02d2219c6a0b61f26298c5231eb89772230ce6a2bab734f52efc090d15297beecb249274e82c60f28e2f9a6131ba33980ab024d8cd913d22f78ad192f92f081708b67cfcaccabd0dfeaa8b9280957f096f8fe3a78421c07c2a71d7e678bbe8c6e849ab2558e884a631d8f50d47802c8a257428018ff7d2015d7f5bb963639e4032099a6abab946a55f1bb9b29054bdc1c3d2dc7d6235a43b15e8a33952c6e135b12cd64b041927203378b0738b9690a40548db663fe96705d5b1c2835e7b011f4c122a8d226189f7ca0dddb2ff88c7c6db40c56891a3963bff38c3178f6f680456ef9c454fcb03f7f1ab002eebe014f8a3465a4310371fcad7fd9779627881a9dc1d3f2edd05f89eae84e1f2720f911097ebdf76c1cfab3b750a3cd61a4a78699a1ab13fc789b7a730d5fda588d7991771943e77df8bf935bac189e0f57d0b3c6fd5df4566a23f17fbe937fcac19c5f8b0805f30a30e593685729a811d1037ea6ca1cce753cbf6699bb1d43d2d371789711e113928c3bf179c6237700080f7fbd7f59324207daacfa853dbcb0e14863f7b9849c1645e4564d4cc96fcc0334a2d1eccc58deb5e95bd88e9f67930d3248a6aabcb4020276a616cc9c660302d371477044be185ffbd27db068bffbb43927c30ff2d47305be86ffd70510bf911a8f4aef17c8ff5d4a1682a61b8537a0bc3e1703a54cdef631f3fe6692548910893352ad007f87e7f323d7a9c6e6623b7418127d4ec5f4fb97c95afdb68fe6fb76709e532e750b338dc1633a4cbc7a353bc3a024fb9595ed5c6110af5a9d0a6500fffbf61c8756c855eaf0dac13468637081f03c62784723ed0aefbe39540d61774222bdbdbc0585e0da25157beef354fe9a2039b403e6737e4f80bbf925cb6f412901161cd402f5f6188f4249314bba1f2ea907ee5ff9e12c97b80b7f71679922174563b6a141bc3800bfbd25282cfe636804052112accb790aedee7f8d5b87a09c42551fc8203a95afc9246511052f3874fdddfe09afeba34dcb95dd64136fa5c5215f1dd94f62a48e7c9cce042869e01b3313e234447676bd72adff0c8a3ac0a0381a7b04522452e7e75b77771532ac309cec1e8ee07b865f7dc0a3852ce0b02628d301ea4d03be0e7f78af6ce348e578aad230308f4110ca1591e98a25bf0a886d20d4061b516983d776e4620925bfae2bb53c415564e53d93c3d5e4bc8ee4c3db4c854dde31f9cce89f53f05f92b70e33529f8fb3ab1c1b0736291cec9a8879afb0ad02edb504f46d445c8baca11b003af55c6fde445d3c6502c696855fddcebfdbf06694497e31421065e33b0df5951195f63c55d4b356e8309117c5429895f60e05993e76ad9dd77b23871098d1726805247d64030562e6c9bda3b0216887c885e52268592ad5dc97944739e0947192f2d73a9728d0c892857743939eb644b2421eb6237b3c4fe641be32355e6701016b6691403127fc7c735bd220197a9a3637aa0e1276265a6ff116deeaf6cc2337100c0fd8eefba04b31532d67cbc2f6ca6580de949acfae4ec9b611bfcc2e8107651bcf1c2d45b722fa5a527272024f4ae04cf14b12fce77a4001f8fe796064a4948a304b9abae39156d2240b7ad2933e0df7d52200f67e061e3363b198f3c4cdbe022846e5d44ad74c21d822308f4795e69a83ed357a4c30d84829ed072226287ddaf177fde5e0f749fa86cf290a6c9d9acf7ebd14f64772344bb370e681bf99eaae2e8808248aede07d57b37b9a97a69f644d3ef0a982f8a8d0ea49cc71ebd46851ced9840e3ec36febd159aaa9ff8b896394105fbe388ff1b0205dda8734bc5cb78fcad1ca95443471383b5b6bb0bbadc9ad1a1aa2daa7cbcfadbcd46eb36ec25efe3449dcfed1f467f081fafc49bfaf82b709c7c5f077f87b3dec836c8d96fe7820cfe5490d8935d6b8967d2a8f5304ed6f4435a58cdb6b2c588ece08787e4a88e62e8bb218042b0dc43c695c3251e577cb62e24b48ef080ed0f161d549b4b3f30a802ca64f6cf2fd0142d539ce36ae883b3658cce58919d1ffffc611ad7a0c5f8f4bb4e323f571c9ceb7d1ad582916a1c85e1c08308cbe2bde2db056e51cfe3d7d868cc9f7a25675f44a8d4570d7f3905972043fa1c8fa18b92d7274cf24c8c7ec8239f192f1001eef2bbae5755e46e547ddba397141a69e12ccb1652d2cd174315672b7a7c426c4ec3d4323dd2c2051d7516f422756f24ddf0d42e55c0b9dc81e5c60b385620195f93c60c754faba6311685b13f75e6242f58558ea5e083ac0d2bd1a5f5f28943f1a2424dfee9677aa411e5097da92b2697468ee880a5c41069a01bac7cd7e30f13d8ac1ad0cbb7bb8c4105c23d47b66f56f7c6d12604956660cec1ba98176477898a1fbec2f87673f8e7f536e6a6acd5c41fb0ae6efebfa2822034ae971ce0b1933a9e7cdfe8eae11c36f434280979cab70357b953fe974ff5173e250d717053a909a2cfc38b0fe8c999a511ca09c1347504e838bba97ac86342e16e2304211338e1c2e882c34689ffa4da89c9f827dab13ec6e49af9aa24bef57f301f49674ebb55af8e3e5b9359eb2eba236133e6928812276aadc0b12dbec067916140f9b61a1fec0483fc1194220f6c2bb1f6ba6977913b1f657230589ea477da386d5c452380694286afe10233494e5c9f8efbae38f345e9867dbb14099f5ef416733bff0729735ac6b2eac9d09b1ebba62fc43c712660a12cbb4c0ccde7b76a04741903e52719496227ece872a95928ce44f411884653ff6bb77d225d008fc11beb6c1a4ef07c2688e586da27233899fd71cb9e76161b47975a8abb6e245d37e650df0feca5fbc65d97f77b22ffeaf7b71d1beb1feb9c87cafe601fdde87bda6c3785e95536ab3af7b816bff1ee27028c504185e3b575b76b5395f9a4e49f20c85d4cc90bd4dcc0daa77830430416706eb17183b9ba8250f0f96c87704b762b3edb87be1a7c53cd018dd4bb279118538ed7705b2913346533bed63426414b691457fe8fbf83d8c9051612cceb76ac653f9245fd253db21ad74eb5e3f7e13775bcfa1dc1aa51c35df83efdf2e5ce8ade55a7a5f405616919d2de58fe6b4f0ba5f38c8a9f03c21776f8c2acf417e47571b6739fff5e8158324dbc7671ef27d1f6967536be301421c18c0592e4630b8e44af22ea5ec3da1da8ca96803e3a46b3be646b377cb96dd44b3513f3702c8c3f3203e77172dd1d90a2bf8c41eaab80e469da35fbcafb12a9befdf971a0eb9c9932ef607e1db06402af85a6551a371902d05787bd9c615fc0ae7ef053670bbf5d72d080900e7617a16119386317782551c2f3ed9784d0cd502a7676ad9a6de4bb99bacd95949daf317ee1ab1f0dc750c8f75251ab88613fcba58f15d83a3255c631874ac8b635bf192d842cbf0143889e2cb6d9231398c5cfecb6f5c459825e5b60e94d02c63f2b273f941f1416a38a60996a884754c04a2af95e172b9eee78cfcf5863494f8509c2dea14e89684ccf4c43dc4ff05fa51d8b5ee0d4d8ce0738f5f3709cd99358243a5a7ff168b0e96958a438c66925c58372568d22ed39ebcad7678c3ba7dbfe8d48fed3de411bb71241277c0249338ab8ae45609f6d43da24914fe2c16396cff5d14cca47b5c52eba1acf795711a8eb622341a307ac96e48b9cb88c56e8339cc3119b6aaad9bc3f2b4ea9814668fe961bd32fef34d7f6e535c6da15d27b96202c1643116f429645f0150fb9c507b1a2b48da46e1dd99b7f6804af996a4f7c8a1631e25052e79f6937567346e197d60bedde877cdb9e6b939304df2bfc3f9051f39fe6ed35729672a187e4cccc74b9de8d4265df364170666d2f14ad35a4751cecd1932765442c3ce86491c0b630a738655b2849f85be15b3a998bc1224f6795d87e39bfcb111ee62a56108542037afa2f83a7a7a2bd0952c3c5696b780e569cdb7ee40969f6711411675f9d122cb5cb04657fba77ce7b0971c38d2a9f948c15f8bafd839c9ca39c3a758ccd780eaeeef89ae7930a0d062f5c8f0b6f8e640128cd948f018da0cd551beda22a13f0118b29153c5415058abba7be3958f3761a34c45486d77a2295a16e208b030f5438bff9d6b0a333e423d079a7f083d076a4d4369964cfb411c883ab45874e2cb7824ada42903569f10519cbd1bccb9f0cda1b312f4ecde33df885b40eab0220b6bfe4c5b1851ba8e2a639327175eedf51c3b6ab9689146acd03be202e12d53b4dce3538a5868b53511384de0f8cf097b175eec3b856bae86ec28e7cb9710ae31fc69da438b77e4873872607a29ceda9ed91646a45d2ee719aaba268269289dd57202eb27fb03ae46fea10a33728248421380879a16d83736cd5b7751bf4a1c5783c7b165c28e0c3076847199d840abde7626f081797992c14182d5dd428f5a0f039b2085f16ed78f0141f0db101b4b2f140141697adec3cbd08e15d8833f662431d374b2533d6bfee12449dd5a93842c18df16b2c4b410f3dffb7b13926fd22c7ebf4fe4092a5b705df36ba072c474724dbc6455dd262986ed126a86ead5e434345554092d014277b0f7eea849311c3e98c3da02f9ab8d9e19409c1cc9300702833b67a3306e6e520cbe432d40f59dff4e05547076d27fa4a4511a1b7ec7725a325c5e84644e23723b0d00f430e3aeb39b57bda80322cb32a2b7957d7d8e360fcf6a0e400214317517b64c935abfb472bd28c43cd6ca4b988b61b811ab2a37252fd9e8b40bd58885689038f1fdad1b14f7e993c890140ad6748eef7608485f3904e5757655c76cae6b01e8d2e294f914171126df1465091b75254c685370aaa38084ebd2805994017d88cfaf32a04e650a5ca414abdad85471bd297ff3b8982bee26a34ff032520cd0f3b9769065a0d3f40b4922d06fc6fb797c9402604b3672d366510e06cd5d4d8b0bfa2886559f954bc353ffd740901d623aac886e06c638ac1afe2b5f42918b2a6e744ac87985cf7b9fbfc52d6f7ed761d678759a66e9dd6268a332a954afe2a1ea1830822bf99e8645b3cc9a774602d5fceabd46d2ef0f1705b81153a1c82f6dcb94922f761476d57820edb18648fcf65e6d4c9712a814e0440079b2d4f524e26512214a5006c132fc908e40202c16a0b5388368575fd5074a04645de0160c4df61151cfebc95cc0104fb69f875d7876e3af30cb6c33ca462b1fd8fecc060c7c0a71821cb7170f70668f3938d79c0b4965c40a7c0cba813392cc905c42707766a7f646d09e5d577db162c39bd50d8a31da9c245e89febfe624e3bb95e2fb4fe7f4069b3de1781534424908a7900ffdd7d11309e72b46b43389891f4b467ae66c93fac7643669f28c0066a9dd4576f6186f609277421aecbdc3c8c09b8ec696607dafed1457980409631c48faf766d8b27253e3928d2db28db1218931e83610a7dbfe2d30455b90f7744f0f74cb3260ed8518e953427be60503c231371e70a43882f3d25f7184677d668ee4235cd9658465e19d2287ec8ee79057c1c82e38fc39ee162e014e0e7fbdd97c83d1193d3501080684132b423b7396458129b95e74611ef983d32011f881d1ec45dc99ba660ecbfc91f746022903cb5fd1d26a0c03f1b8a223f0df183f43bd6a7f6dac6453b919eb92480c57cbcd8aa8b99c12300ae36791ae541e8fb42c65d1eb3d190117968987a8718c392713bee4edd43b530ade877e96db4317d83b273ab8b7817da90e23936d249b693cec26536683f590037efa653c3f3d7e7f1388da24a5f808e1c5f5e1305a2ce3654274bc723380481788b69120df5a52e6c4c38437f8114f73b0fb8fc32f0f475225390d8e38c924da5de630737c40724e90ba6b8f74cceb7c03388a4a1c6151b1c1ea299fddb29bcdb1e2e63703526113f4c9653ede8ac88eda35642ae4a848a9a54847d711159c446dd3fca3e0a31b420763969c16588c6dab9764f57e0a392f761f5be8f629ce1633501955e04f176295e4f83b6f6cd86abced765fdeac5bcdb92d1789749893a14d6f3a17eda4a0e3a7fe7525a134efe27bfcc8052b034895197a081aa6ea7717722428f7a064ff0f605567bd26bbfac1c762431fdf9fe7f258335a3254ad79a5961c5f4472db27ac6dc4a62b734f9e81a3f29063b53eb7c12ad4150505827ef6c66284c8b905667915d0865992ee3354f2c19c80b753d98769f203f4be2411f2d8463042734a2139d91fe34f792e5060d3cf04acb0fc3cf95ca30f30b3187756634675a109e7c7bd0a58530c6233af77d3a0df3bc04865a4c6254c7b5679fd313c0a6da70c85688b367965613168e750fb882427bb9da3825664c8426a752380987b336e0a0c853b32686ba61f10c4014a2d95f1be164fd0dfb5e4defd0b7acc26ea130d50fd9b131df60427e0245a5bddcf8a671a1be7063c7949342b34438c3fb283a65da5aa4ffc424d0fa7c3d19316809f15057f8d876dc57040b0fd8b46917e08e468d0d77cbecd686e2a71bd66a460d21bf51f46ad6843d18a62c1990b7f8cadb3b8471317a4ab4e41544d58bca620e0f5012a790008b4dcc5fe600772ffb95b8e25f78bc03eb751240097d07a815ecf8784aa2743a29586e0feb06fd015a46783ac7eda5774df674e359acb695a3147b7112d5c055c932e66be4316e3a6488f88ce767a6a0f7104f45cb010358ee52d2ea770bb6830e185e1db0e2387b18a894d1b35c91b60d48ac373cf191856ef08ca7121a18930560597520afba95dfd1e8c0260bea015847dc184c7402179579dfa73a3e5e4746ebe6049faa24ae2a4f5a1e8556e0be62619eeb411802173b5e83291bc7e8413ba25569b10865a4ee380a5e28d9dced183bc25aaecab14635c88da473bc0e58d0fdc5a61bae8469bd8ebe17690c96b7f8feea206f91fa00770e538bf086723352386e8314e120cf7ed8d357f456a03e7cf26abcb4d41130da47c65d11b732167c7148ab7095d5067ee09b5261160cc3a06376f6b4c81c4606ae1a08c9c8e34166e18291f922974283cea3ba0a9ae3dde96eae2f9891b26c6558fb751ed19e9c5e9a85e64e1e3469ae348db664df45cf3e7626de3339e7fa8543a302297e5cf1f3f8a7ec7a4481cbad274efa35123fce19cf4aefdd6ec598179546f7b1a4f64147bca706ffbbea38b6dfa46c6f904a9efe3af71a798903749aad9a44b867a242a246220dc90260bdb483d18867706eb0e907d0c9cbf84e747fde9e7c02770f1d77a7c820c20d98b284af60491ed7b3edef71f6f47ee153385998ea54a4e9732eaf90dc26e99cfef8d77a0bb8f7bc97adcc27d20bc8d0ab35cb03efbdeb592f616269d60a2475dee79b6bdab52e65beca5637c40cd2c0c252ac0d5369ad01e1e9d12d60718633c3a70154f4b841ce0a64d353bd3fd53d33c12e4b8adf3b24676d73ca55cd4640cd5bc73851ebd40786ae3c9e164cd73387d25e5790fa4af9112b57eec40562081c40436d2ca7b8db63ac501a7422576475569302b363649b25d4867ef7262a0606b66176b554e0f523b35c1a1ddc428f8e5f30c21fbf88f18edcd7e595a428ebcf0c94fbf4ff61eeabe69e5daee60c41f273619b7451e445687d071046201371666365eb97e9e73b451a97efc95ddb6adeaa9827ce3bcfc155910978ee2e253aa0c26a8b2a44b6ca95245d3ce79ac62fc7705ff1f31d46e71b6dc2fee0816b3bb8e2eaf45a960fcdeac48ad55a7989c3048632c5e6b47824846cb86fbc3084930e4bdad9cbe2414241e1a776381f5d4750db77b6c22cf04df0ba4e3f3d88f2a265837b108bf9e9d110772c038ea3b104cffdd03666007399227c1bbfad50878a52e7b2b94b98fbf6053889c5ab88ebd130a4ef430156e113879005038a3f09545d3197a4584b4eb0a51e403eb00b735515b7cb1c0fe4e475ca229e161b6b8d058669890714bbceaf6b237ea39dfde78def6d16cf9ecc1b67214e1b5fbaed7863b22ec1980178881fea990a7577bb8f3a4f853f02cd5da05406aa4a5b3c137b869a260bd06aca23d0bed53ff777ce66d1b07f50fd5f3f502b9d80c3814dd9a9545673eb6459ba3f3761805c7592d427d84866c8d852a2c741cca34f5d9d15b1ebfb6addfbc3c166125156158b1b4ff247a26a9e1e79b03883df42dafc61cf6e61423ea2dcdf687223295b99ad825305f1e9149462184e33945ddc76f34b2c9498193d0d5547c0231c8af792f54af4a6fc24fe2e83270bf3e090ef15aad852c9259d437d647a935b054829d046a1cd1b8e1b7863bf9863eb5088237a3ccff63164d747673ead1c4194ca6bc4667b6a695933641e1a258c30593d5e0423debde77e43e21300ec9980199dd4352fe65c970becff5bf8dea9b6b4812b65e42a1f049e7c4688403b41a446571e7bf8a9ca3c49c8de6b433da8e2c935b9252ab82044c0e11f2deae9b3add45b7fc2909929fb159a6adb9a41f3584e0d657216652a6547aab1c82beab47b06a8c9e3d1b0a7263945a979d9d0ea511c1a0b9431b4611c8ad73be7b212195442c278d78302828b97c65a2e576ce71ce95b521d066d4559d19fa417c96ce49aaf196bcb6e0733d59ad966ef0a80802a020031c3f6dfa5acf4dab326e72eb1cfa0036dd90815ddcefaacd602ad0875fe5b2a43a9844c65704d2e3fcb1eb4e3b34df74730ec30b3adbced2b707d857980be2621282ec81337d1f559a75893d9bab54a9b4b5d2f59a57c78d6c8c760a5519e617e92e4b82930b306b5a1c86d525902b1cae66276a5257eaec47ea27d7194ba11571cb9cdeab40d1b83cf1e036c81b12d79f6e6d278f1a3d2975386872f6a3b4857fa04c03fa2c147a74292e005d807265127aec1d8efe350d723a8872efc98e8060191cb8414083023518b92e8c0c251b329a495bf828b029408e13c292f31ec454a1dba8ce4ac1056d84e788193f648379600e0121ae29a7622f2b5da481db45dbfc6e21fc07e9d37387f7b70835d61052392112868befa85d8f01bdef062255979577ee175949bebb6f63cc8a991402b23a626fc7d098543c70006872ef14f4454fe3e94434ad64ab051a8fdb83271374a46a8e18997af7174cadb1e5191d448b5aeca3ad384a61b1073a4f8a523bea5b39df569e30464d8aceed0695088ec0ad41f4e1adae92293938478cac8dad743d680e074a8631026f0646c8be3403dad4e9af92147953553496a9d3a7019b2bb943415404060747706abcc8f021a42819b6e5d35ecf2b445e64e26a758cd73af7b8d8cdf994c1e83dad518544c51f8e86560d6c385d01231d34d8f9ec09e4cfdf6c1f4c0ffc7f660cadc0d25b31cd5995c7a51c6fd89d7f7fb3c8e0b8b5dd823350ec34ba985ccf6b2f45ecf4818462bbb0b12e4cfb84faa2033f1587d647f952a5af59df862d949f557a815bcd1353705d7cd72bb90da6992868b018363617e838d3d0d464f6ee99c0fa065f88382153ce66f239aae365b0fa9176ae7e7055a797faf0b6e74e1f60363db7d6e6101b15b99d6953c73c6535ed5c254e4646448ccf8c81be34ddc8772ea7001515738ea4ca9e0900da74e64ff7e8701ebb20cdac3d266318e873a8782c8d980ada00f60a647710a06e6a87a0815db43a3bbbd0464fbeeaafc43d66984a9fb3f21c63c8e26d928ee8f4c6a5ad43b0e84aaa8048d9c92e69f57ce34f4d3213b351e16cb5e24bc67b98a8c2c6eafbf3030eb95b10e64e1721e2a375f83660d2c0f6f35e80f6004f1ff611fe7352843929a2309ee6e0ab9f3d589c3ecb3cd4929371f62987dc1685e0fa6ed751a34de1481992c6ae0b52981979b7475b25fe97c6ee75ab7fc9e431b118ec4a5cc407ac6afa084c81ac2039cbd3feb926fa1b79101464115e02a98bfb9f2626e1b58a6c2d16d527a883a4eea9aa0260ff00e10f856178e9856dc81fd82f6a8bb723d5f2d076ffe351f58802847dbe4073c0a736ef8b30988a23bc6c0276e5fc70f6f9fd116b9876328303f56906e5a5c51a6d8e73441be26f21c090168b63eac3b107617b9e4f4eb9bc92cc589d421b2dce1c285141be9f4c95b6795ce05b1b1ff9909ec02cf064aa9fa3f9dcf09053ecc77fde879ae4f600739eb7ccb5fac94383e0214db20d13dd652f3e5fb6b4b5fc0f588d68da529cfb5558a77a7d3046440dd1b76322f449a2f085bf35142dd70bd4e87b91c620a8f6000fbe6d632fe08a8869efba0fe01d7f7badb7d85ea0637514e4428d32bfbac243df2d30a22f8f1a218c1788c538ab65e3bd09b2b6419caeccc32adde89b5f7d4f3feb5d78be6782bd10e8a0cd175751493ba4e619ef91414d5675ad6c64802964863ca6d1e37bd587ae8e599fd191d15f748ee72e9655b9bdff0d895b4595d83449c3d04d0e35f4084d00c0c2697432759fc8811123e84703d935b9e517b031ca6db90159f146db79d0f5e4f2e3254b3d419d37659137f8cb7e40a7aff7e8fbd201b292f3574b579d3265e6f55fac36e3a52436e64dc146253ed1b3d1da9aa0dab26969ed4103fa7147a668e54a1680027b5423cb0c386eecf40ca94a7588acf4573375fe5b13b3063d3083c8d6410528caa2b98353cb7f6580965c9dc6b786467d05dc9a3c71fa2de549325ffa327fc5374c3d3c9afe2019071cfeb51c4ffefa0908bb9060619609c9fa5dca6343b4e77b9508b87500cb99bf8c8936aea66260b5182f60731ac82109cb5cb853e0f4a35a1439e1e6e2fd01e316feaf1e14c737643d22220f0b0ddff3adb9e7de0ec9f6f7c45de63eded227b6e8b4198e98a9af3f1388e8a319e2e4a0a0dffcb5cee469b5192c7443800e59a35a008965a290d362f700d08dcf04bff04a92b4951bd7fb3a1b2282253bac71e60bd14f077185748d9412983d5af0cbad1bf89f178fcbcaa6e3fd93adbccd059d1a41271fcade9355f1b0ee8071e7da22d37c67b8ecfacff726181f8d2d28888331ad6817baf6bd70da159b4467c7b79017fda63f35b12ae4b3ae3c630680199bb7b4fc84adfc7f0f331ce207215475c4ba447c6ff2070b68182f37ac3452589f9bac124dd7c30ffb07aae9beb3f81291b4eadf2ac16bc5025efb701bda607b23c638b0ec3ed3870179e8fabe3f5c74d3af96652959d4bb39155bd96a39b3352fb84b60dcc9af99701c9eef71ee8c44e1659c47311943bb03ff6515231a7b4259ef08f8e8cdf5532675536e174b31e0fb6f77fc2d020fa40b3e11b5051ae046ce048a1c8ebc2aa289e14a6ce5e9bf3fe5787d2b490bc77b06dfc390778b471060cdaa1601cb43499726c61f25a00f4fad8d69c90bd65d94c1235a7bd8be57de3025617adcea416ad7d56953bec346bc552dedb09e6c0702b26bc97526b775c07a53eb8d5028878b1a1a5201739be3f390c80c45e8183960904f11104aeec00321cd8377b3c959c96c1c24e30e393118e0b9039abc69775e6fac87a1a562e0d2c39571df4667fc3da74dc73d701c8a9978ec1c2ece6ea389938f634374324c12f5b45824f0ad69a8e17011bebcc3ffb68f1eda47e526cc33540b9ff0ed30a203a9a1d06f517ef186e9bfe0971d3013f01da2d7cf60af9feccf5807034fe3c7bcc084ecebff3542e04e59e373e1bbc79fc8f7c813e43094c0b6f3a403e5179513acd875b92a8654d89912178beb5a8deb50c1ce4532ac3b3f33d9007121463807700d8a0c8db4ef565187a0210f9c2d1eb69bf0f162fd2a7cef29ac945803874375e7a5badf969242afc9ab8aa23e6681fadfe608c3dfeee083d1b9d6465240e507fe66c74c67556c2e16f566c3be8a42b7900f505511ebd66337a4d1abb4bb33abbc3630c0b28b4bce4d863df4816c457e06d222d92b0b067f5745d7114c0d7d090b61ab32c33ef5e751c66e57b46ab1f65a6cef92ac16a64fefe69b89312d49cce9f26625a8fefc87ae58bb94ea82a91559c9f55c3099d6e929df8b6b4a5668f222c075b2cd025d81661dd86f2460c3a9a3038d7597f395ca763d4645b532552ae7088d742f87a26288fedc0fe5bf8e85c40b2ad497f899f80b82bb879b32d272c3fad0850bc69c8a1477ea8cc5404cd143ade28e71b46d4477a9e863ca04952fe71c3bdee17623d2c05fc9de066307834d1588dd0d4f223c175a19dc5e6396f19add36746eacd2410382dea091eea08783aed35445228859078b17f1701f447797abef2d4cd350f657b613600aabfa9c2f829c1f41819e8205061440748e6a8d1feb43da3e7e8504913a19e3d6e1ee3d80bb51b5f630354d468304eefc6273047de6f997fff3bbeea3bfd31a4e87ae69248dddf262e2f9d0daf5d8cb5bbd2b98d82a5ee5b85e4ea424344b00878d34034a8e6039d6ceda98102396cecdd82a15801de228ddf39def1809da3ca654175d92a5fbf2be527f583f1989a650b0767c1e56b941d74c953f48219bbca0440e1cf9b8ba2a8535e8adbb0a1f3834b57bb277db9004067212264396bab3da1985bce475ac20144f15f685702178ddbbeb069e3f93196b566211797ef4b4301da9795e9134ccf9d7b02851b4dd3f092a5f37cede1580fa9771f4dee84fa40f0dd6414ff57a3c10f755c2381c326ea44747fdec0455ff3b44cf7f242be539cdca0b08b3c7993f2125cff9bc6347d56dbaddd5398714b90e90df89fb625028542cf1bd9d86797f7644f578ba2615b909354feadb60c87efbc95bb43777b28820f7df92ddd4bbfebc4f684a8f6dc3fd7b68a49ce008c1ef717e2a2561e31f618abdc3c68d9bd1670a7de3d5b4d94263a15c465f4d787c7faed25ba906bbfadcba05a46bf44b2de6d1f2991f56fd675f4be99f429df87f2e77bd7780812bde61f66c1081696cc497e2d82b6cf67be31edd36a747013dde4e9a726e0a3bdbdeaede91f0dd5f9c25a8e6644a2cfacba726484bab5e639468b88e8f659ba84cbe1f941893019324d9aac6b00131eba94dad5067410f9a3aa1fa073e7881f4f288be672e8a8064d50f930e8b8975c8cfc548bb1cb561dd071c80f1659f475b1c50f8611e33c9e721014c821fd3d23993668ea38af6e9256800c38154708178ef82fb3d660f36feba0e58733d83f5f2c5c89f7f05ce09a79e6d3e103b50be12930cf11afa666808be50548a086b720bcdf4eb3bd6f158bef571143790c791a41ddba7ac33689e8842f13168d9d7ba82d90b4280686d75feda2357c1da3bc712b7872969d089f8ec045df65a618eae0eb9041aa4d723c94110d5a58937dac51c9d959cc1083ed8ca5e95fabb282e74864b8ce899d2e15c9db0c89afc3f83f1a1b072151489032287b40361a30449a243d11ad28ecee8f140287c1fb184d8241c461d1a0dbbf2da2f2b6c7eaea74e0df3139e70d9c9fde6e0a5526badc2af697265bb118cd6dd230513b12383f45cf1597a8ff5f876d782d17e374c97c882ab0f46f118875ec0dc43efc63dbf97e6f5afb62004faaf03234c738c76e156c08e1c56731b823a1c9e4bb4ff2803f4a3516a012022d310d25fcf3174114f2b45298abd3b167476a227000987084e3de31424367fc869068313394f1efc0c67ba39a52aa2eb2e53d8b760c0b934c4e6c7016d46792a7581368d6692aff48013d16852d19a056e014db372eb1d8f9b075aeb511329796890d6a2067336ffa7323939d6e2d76525c27a406670eee27a0bc1be07ac106c144a43622e4aec5db52c894a8fd7ed0feb15dc25ccf28b047cdecccd36e6cbd353bb1915e297e073da8ea761fa6fcaf530b6f7044010809e8ed316541bb3541bfeb0e2c9eb29708f8e9e2fdf6297806d1fcca321718a653283b2e44420bfe3b982f5ea681fbfe559bc0ec9e0c3fa7ed36ecc40b2a78dca1cbdc6c0e3795a5ee6834f6067e5f2cd4e5cd40814d37148a80a3006fb1814a82b1c700fe894db9b0502a1a1ed01d951ce463c1371991c709a6651343cd5294581005a9eba552ad97bbb6ba0869e0f50a29cd1e9548da5aa5bf0eeeccf6d7a775ea4ce7870324274279cb8955a9c515aeed21868869971e465d6ed2b707fdee3159fca4d28067f0f0d9676040402fc942232ba0fb3eef590ccecbee556f1ab1544e7f5e97452c42ef1e260750fe19bceee823355a96cc52fe3d4973aa7e126a81b4a604b29860dad110a916f1720bfcb34deb6c39b5af1f4c244560d3315f72eb2e6a9dbfdd5c3175494fc699d660188464948e81dbe02d8bcb48537d6b40a6fa9a902aef5d57e4ffbb05c2c91e32baf3d9a581b35824ff96145699c13eef44ff0f52ad35eee533b2ea1ece43eb25e73ca2b8aab537740a8c3f85b64e4ae61aa836e1154d24226c511ee74f0f473c185cf5b37260f2b9dd57dcb4d7745309748368286f8dd2d46279830c6a50a060d65f4a6e2777e1264069319eae53a9a4a4e8f7d9a43ca8d2509f1e8a2aab22b951dc1b8b5bf42e66a1f229b25896fa73f697d8a1581ba3c20435543b120b84064a859c382e6a8249097991ab37aaa51a6a772049a62fa6b1726b78bdab46a7ab82fbf1d7c79c1fe3032eb6b8748e842fbbd136752c19c02b4bd78aea2444d1b5e3427c3dbd0acefc16a060bf7ad0c437187a91f4adc6b03af3f5b8a3df0213c2027cfd478f85f375afe9d1af682900b42c7282e5f1a3b802d071d8c1e4a5ba4f14cd64afc8f02b970ee4f47198ef9c7778c1b68153e04da7ac723a7cb79c92086751c02fcae4b5b97f286870e1e1bc52f8bf81dafc9f816b7a86b71c77f55a3aff9602f706b911d4a1f029fdf3e939d5cfd2b0f7b878569998bfe5dfa5131c96668709564b060ee1eaf588dd5e154acc19c7b0e074132bb12e89a816b304b4db0a23cceb72e40115b8e5e002b9542bc0cee676b83617a88089cb4a0550c147e5d89db880e0cb2f7e6989d0e4255040fbeaebddd1ebfbec59d408e9de86dafbaa21a4366f212e49de4fff090437c128fd55f6c4238ec36a6c56d8014666a5c5944550fc35942ae9a80cdbf47acb8d39554804816f79f65b2f03353a00ca9c068061a22346e358b0552b5d583b32cfb052d60212c26a3f8ac7f34abe8513deed4040059c8624db1191a106e51f4c75031e2278e491f7b6111c587e9cdc4eaa71ab8025d8973a077a7048e32d181bca79ecf56f35149e6a2776bd5dec243937932a323f773adb9d321bbda6d69832eb92ef9fd78138f29da1e31106a36af1a305ce85c91598c7fa7cca687d1f7c0541cb2f3ecc3638a8c45924f557f53f8c60bcec2e92cbc49d7bcfee9b660d3ea7038a2690efc3d63f1d93463acab99823d913332744f9006e8d9b23075b4f14d91ff0f2ee4578cde6a8b9d6d67c33663dbbf1fd04974986efd46fbdc24247f931aa881db77e4d9f4da09919700d2de8cd1b4efae112893028b257ff8fa7267aca69b5c0343fbcbabfcf6dd32673c58afa83c3de760a6a14bcf8729b230e46c1587a1c01971e34f6fdcf2550d067e727593146cd31ef5893667602ec5cba0201233e2ae006102a3c656871d015071b8162ffd5e71c34851b41e626f86bbd9550d77a71622c5a2fd2a3f9c2c71281d36d4b4e0fe896338e74ab8e7d023aa1f9234df94c35fd15b1f711ec6bc451d079d87736f426a17eae69691adba5e744f863788a6fc52a5433063323d09c5989eb5c95e9982bf3fa9c27a89d9f429a437bfd5c1e2438a3fb24fd4921a91a22ea280deefbb19d25508db58d7bd120d616a7eb9dc6ced3b45358947de3eaee5597f3e077deb501e0953971afa2b5f5b1ea83a1a2dc9282612633c4c5d86aeb52bc6f484449798aa28960d159700a9e926eae823a59060791a8afe0ae1859339972d940ef64f43dd47753db9eeef7a903bcb7f6595aa5957da3031263514620a756234f5c403a49c029806fbd12734036f7dc6191116f6d0cf6a44a4e2259632e52383cc8a419da9c900ff0a515df0c7b5057e0f76cedea3153b229e0c894d06e4dd3cc3dc3b25f29985dc789c3dd97388f06ba30ae5d5af7e166e9d9f4ce16d0444096fcec5e039c5e3b43d1dd411bd03b5cf252c6db76f60b7acab9935b2d33ad5e6f8553bf1b89a5102201a4c1fbaae1e47c36b299136132da2b1d2899d4a1c9404f1c8cedc8cf20081bea30494ca88a4a0211f30b27bf4a6f7e5b9d25e1cecc0a5f3c49e5898a95a828c81145c39ad00c25c6c4469c37e44655b48449a75b69c91b05616374c8bf18868909ff0f3c5c16118a00e083fe7a2154c4dadf3327550d234d6f930b32cfb0437be47616a7b5d4954521fffe0634e717ad8d63896af897af155dcb63564bb8bfe8342acf9dea63d85787b1d20057cfe57878760db731c1d5ec05409d75202d49f951fd65799bd94ede5eebc5a186dc24cb61082dc97501d23dbe394143b70652b46b77902a31995bf4d74b4897fd87c08ee96f5ced30f591756ec872879eff4cd3b67a39b6e292a72b52c2f3feab1268847ed7f621f2cdf5703ccf8fa3dbdd60d8c5ca0a5584757148aaedb19e94bf8333827f5a3e7fd9ecf7d3743ea6904aec9944c522e67b0822780f55424992cbfa512de460c6c7c24956a8211f1653a8f8cf5769cd3b097c2c6067f7acfd83be66f5cc66531ea409f7831868d886d4bd505955a8a08fafc6f28cb5ee66c6c12be6af1460ed4d58421aa18e838fa0a8cfe7b30029f8ce594bb53ab9c67dbbb8de23727977f5a1fb2a663be126c3d8cd12076a58247f7dddceea3ba0a9734a9e64dfdecb64867447233efb5db29f2848d62a219d62fb2d60a948d19645534fa172970bf109ba4e87a460d38c7f3892e021eada15fb649af0b99a775da30438ca9b34922f213e71d652e5144f144792f726a8ca4ffa841b3ac76440c46878bff138fef354f6b17f40c801d0e7b7efcf169f8013900004608f378357d12873e8f66aab8a703a7ecdc8e8a20a76373c8bc71a12b6e0e478826555e3f0beb351c8a5c2270f3a21be1a3af79a31705d74d99623d7bc5bad3b7c7ee3dce3641184d169b91bea71bcc1d17e1479799ad85f19974bcd0a51211de6b7bdf4112049776a225c7c1d050dc54e4c42266a539d2e225c46e3e9fb06e9386c03fffeb7e212c75918ba40eedeccd1fdd2bb5985246841ac1339756ba91855470eae03f0cffbd7859b962b8b12ccd5baaab905f04d2a75f552ccdf36338eec434e82a605fdac89cbd1eb9bffa7695d1fca3541586cd5a1c7c47522f4fe9b6fc7289b0f79bf58de0a232361924e3610cfd14de3a478e2a4e744dcf98d1eee12299bb67722a8d27b5337450ea576f3efd4433e78fe2c18ac8b4e3251c4a9ed3b707ad6f66cca73de528e824fa6320a5edb400da7893b9c1539c5e298e55601d1834ec488aba28d5eba5517351784981175f37ec47f8e839bddc20dee9aba59b6606cec07e508a8927b967e25a08c9b7ee248324416554466b48cce62e1545ebe3cab428a41ffc18c9f02c661b21055c28c43559e310f041108eeae55513136c8d91ade8e1b3d271614c96e35306d30d54199b179e54136e763e21208824a717995201d5bf66196dd6255a9b7d67bbd8d56acf1dad0670b41fa7450b8a4ba297c3dcd46dc9a84ec6016f8115f2b5cfd3e6a8b9330b18174c322cc51460ceec321eadcdbcfc54bb256d8f172db3c2b75448186d0641b64f0951a6663ea48dd8d738150b7de6a7194d56d4ad476abba4d75de6d52fae3bbcaa914289d13bfc57dc4c62c9bd9e9e11a5ca41c81171a01bfe47804dd2e1e30012365d101c083e372db4f847b04f2f769d1004006857ffe23753d2b3ae13b5cbfab63d4813466f4c2e2431bff49b914048d2055dc1a216af48f528263680e8fc0c97d43bc6da5cc81dd62ad50e5e94a36d273ffb3dff3c39986dce84ef35f3715d84fff538907a2158fda40bf22a6805fe3224b9960addfd3edaa7a4ff2c721f03c88d4dc1c0ed72c7380e8b87703490f2f1c9bef8aa02c65698ad0bc947ab5d1e03b59217218d47139898b148cfa4ac84f6c567e570d68475ac4e64ccbd98f796aa587124dcd0bd2aaa3f4e95e5fbe93b6e4704e2102f798f3b2f7e834a6eeaea6c07b062d54675ae1d12bf106f899d21860dc3c3e6eda95ff660850dc4261c718a0d21e575cdfd5175bb5f396c4694abc69bebbe3a55396ab4846268df62430bca9f43fb9a63bd618aa1aafc3441ff67e355b156e9792b5696d4454446f4ef3b4b16aee82fccbab02d6efec0d64570ac5752b9dbf44ac8f25bb1c67f4d050574504d532acfb10fc3e83687861cd38c656b45183fcc730966e304370d3e2380f2c02904b0822dee8c15ba77c2a38d55f97ab465241c16297ba3e606503331c41c12f58c71170df78bdc4f085d497906f678e2cc0b86331178a203e74680700204c2690a425591a239fb0f066821efd6fe384588fc672622df00d22ec2a999dd4962b88b17d60d0a03ca6e54ba54f61cfee40fa72e85d4d8a50a406f3359291cbd3d538f74730336018620e72b4823c13c5c90b653fec2efcef4702cd5317ca125a967fc620380ce69d2a7194b60eedf4f8df56f08418a31f295d19f342253874dcbcac913ccda5766c80fa431f9d70cae2a68bb9eef152901a0433d21c56b02395c6a29c10edfd2e30e9413f1a26ff181761f1156427fb7bd275edf4c6dbb4bc60c6171b7b48a1be27c80e0593a212a35c7214eb0c5c3093e54f294961ee29f5ac8ddc717e04bae679827b9dc07a2ef8e3446856122595a200cec367d5e7a7a10ced23f58b175cdd745e19f2e672cd0ebf85f33beb4e6be6984c896541c0bea1596b6cc09e888bacafb8648cfe49881c93636e54a190c62ea3990d9dc84adb99ec5244b2c98977a00870e553659fa195f71cc107dac11883db6d4c96e27b1bb8841a120858104bb7f41abe057d533c74004dd5cf10ac53700045249dafd117701416283773a36e03e2fe783cae30c796c53c44df8693fdf23e620d45ec5ac6b66122af51a37eae856fec280c469aef3ea7ff063972430085571c571591837a07b0f3d1905226a38ba956047081135cd459d01b455ed0132ad780c5e1d33e4a50f3e47b5fd9d7acd6acc00a111ee171192666d2438c5f409a55f13bc6241ff70b2766c6d10b6b8ce679dce9d2d7cf07e18e6304bfb7ee4715beea8fb5777767ff32e8558d51f39bb3ce88d0997f5dde5193dff87a8b166eb09396a7163c05c61246468a2c751fc38a6b6e93e6cb9bc74832625fa7e08e84ddc4298e6d873bb3c28e7d700315da4a9a485ee16c51f571045bde4b1cec74cdc08ab53461e66aedd51b678bb23b6014a2f940854a7713c0cbbffc83c936d2b2e794695ac79c61891c949a983f47693e4588085678ca7adf3b5b85c170eb93f8a96a68e9c487434caf6c35d86ed9ac3c15a63f66218d5afecf211f35b5a5a2adefa91a0def4eedecc5844be01134ff632f16cb06ec7fe6ea49c5d448daab6cae7010b58f223113f01f303e8a49e6a97294e17d81712010d5f6d9d7f117795e76fabab328d8f3ed62c9e6ffbeafc7168310fc9077caec8f34811e021d7fbd66c885a1562cdf5177ba5974551a7dbc463c0d5664df1f7445ff2281a1ad9408d2ca0b2a4c28df74e39ca28f1e96eb4bf0c6d0563f8305c9aecc45dad6959872472f09305ac085e79fe145d8f5bce142374385de64e84d5922ae457ca1206d07804c8caabd4864fd50f3ab8274f6a0626e00663d7557bcce28ba319f2bcd6d0124d3267d27f719ba10e8f8c3ec39edf77a1a4afaf649b20ce44bc95901f06f386161f22b52f6c91eeec88c95965ca8eb9d169894b01656c018b9d50aa243e2ac10e4e83e1d41be3559f5b5fe4b84f59a4976f678cbb2dc1c340ceb42a82982321ca763be3be5b6286cce11bc8488fd40d0afbf01076b5b0453ac9a364b780f189693e377f1d07e0d3c5ddcf7d1572d6c828ca746c2e61f11b6c7b1825e88d4dcb206dd274ea56ee9e32f6df127d30c8f821f00b4b4312896e12e7167dada4abf29cf4b22e89b1b5b5aa433a95a4108929b3d841ec56a3dc7304c766bf153fb10a08f02efd3355fc0e51fb06d0072d4e2703d534993ef6cfa77e811c5adef1833ff1c2ea8309b304c92ac145d36814b949b829c311ba581a3845e938ee507dd983aba63f0d412d85ab9e825bb064252d316e3dd29010c790ead40b2caeca6002cba2d75b26b8546ad3d617a2f9a729bccae20597e9aa7409cff625d3bd1ca7a87139aef8962895f4c612bc9b373299f8b82affaeda3ad7ce6fb94abd7b55dd63a9aa6ec572db67f6143bf309847e527ed880cabec760a72ea1e9084dc1a440cfb05259a8ffbee094cdcef8f5d0a23c1065b392759de4972c15ad2ea5274fbfbe5a1dc91fe3c8dced08e3340fe4ae2aaba9cae0e01e33f4ce6bb39c32c918e1e633df2f296eb79165685b34a4656ff2a679094defac89667df468857842043705f8c9371fc41d69555b1306bd926b92e0436b4d41a3c1823269d65bb90c415d9d081726d8a1c5b9e5a1d9e66cf73b06247f1ec47f39a75c50311ff29b661159a246988848468d1aa9abd9f6589c22eb93fd6c517343a725d08b0c4e4b927ad72702bdb64b39fc394a74fb63bf45ad31ccd1b8b3eebbc305f00d256abd3b96b5fe75222e23cc32f0e4ab532291eaa35bbc850e04ac8e73557df67b489518521b8de5d63c71117ba80699aa5e605de3d4b51773fe362d60566f5861b7687edcdd933f94f07d4bd7b12b53c554872d797c2bc92508732345996fbbc7ca77042fc5892949634016c1a543a2c1e99d7b40b4c776b12dfb17c758c57b396e05ea235ce103bf4410c1e5efc7013881b1cda3cd8bb5d2c94332117a7cbeebd12bc4bb23cbc1036f411f2ec347736dee6899a920817b4c6eac58f804c107f37e6fb82e44ceccea9c54f34ade49e68626ee391f4cf2aa81ccb6c1791352b20d276c08df1cd9241d205997d3029d9d410d2471c40ac0382392c1ae8804a692ffc7f58732d63e705366bede95efcee29123227b9fff6cbaa8a31de1593f1e720f7826e505f0ca7e53d776d271aba76141404719c0b36c3360c286f4ac39f9b7691a8b32d164ade9f048d5b96efef351ed0088e6fdc92037457b10416e4df1b2d2fa3be15ce1491256a017e459a395cd61bb026177ca0e39cf502cc337d880da73c68f321b18323004018e70a4008d9ed1b7657a843dc5fced8d41262c3bd2193273015f86d13eafe7bb79a86e8b1f00e513bbead744ca172546a2775583f8d1c1d58ca4128ba0347bc89a149c394480fc2e548159730a291fa6c900f8eab37a1f4aea19f3b89ec10b356e999184ca65d19331851c882492f0928d44003971b0cc01348f002c72499774beeaa96cf17994252894dbe94afb7ff259c4fd2ccd0eddbd6cc8ad1b50da5d453b833d749a058952465c2a9715475850687a34889a5008a6a8a2beb58a94b089e9cf562055be6070b64ab5428187d49ddaad3a4fedc84125724f9c9c20dbdb8c5ffedc05c7ef9c65c9f7144f5a79674ad43c300435ff47b98e166f6d13e32f3030b9a9f02350232a0ba190379a326e364bed2fa53a19a855826d242fc355f6131bdffc7a28c11f024dd38355b0ddf42dc91b049d89b83edf22df288823677ffeb471cbf17a9dc7808ec4e63026fc78f2a9982c4f4562cd6800d835d2b3796f0d784e3289a6830bf855f3bd15cd36865c1c82597bca632e8c4b453f52a7a3b80ce631c7244ff8f7f7a90135a8d1d5189caa5defc46a152df50e607ec2ee2d9e4834bb69547453ff29fa7cf28434113ab6f3f3405d964a5131c9c6dbb4e7846e7598c131d35ee99b52a0de1a2ffd82e13ae223a323958346e5398e6886ae6a0f1f6bad69b9a37fb270b631f5319e5c32658d9e8e16656e6224500aa54f5893c8b52459b7f223d23e1388a39cc5c88b78edfb140d09c097dce02512a1deb527a6050736c9ce3d0f939cb2993f343db2fcce2c5b158e9e3f9344762b83733649e762ba2d6a1db4ff60171c8d6dd471585d2766d458c6d873b8f736873b78385704e0ad303da0c256e12dc2c3c3ddd8e5316cf73108c6f7aff9a35428f56fd3ecfecc3228610d40f4b50129cf9bf806b77aeec5fb82a515560f530fb5831e1c5bd37291f2da5ec380355abf67888b123c88a2baae93a460888145960c6e9b8be9061a6873987a732b36ae2e8e3bb77b2b6d66338d037599265f1387876a96caf16537c03d96b764fad4a62f9ff604576a6c2cb076fdf0f7d10e72ef697bcf99a836eb6962d5aca69968b79220f9659a29b9ed8b31b45c8467dbaef6a90007076d3a1447abc1d1972a36dc53dd4660d821110347951b08109d0bf5c72be89017d93aea0ee9fd9ed9e6a1136ba1be7ae1992e15d9b1316a2d950350f5b95f6c64bacd9759a05aa9a666c8502c61c7d698fdaa49bf13790f6f13f105764891f78b254b3e9c4b0f4dfd7e0739b7bf9f8ad2f4c65871de58fdc5a54827a1f55ae5a910c2de126e43d8c5b1f7f47779c127dde0de6430831359b06ba55ff6f9052f05d457a2d9947c0dd2b4f1d45b72c11c619288c1c0ba96b02ad94d88f44fcd2bc91687d5c25c1027f4ab78848d53391ee3f229b625d368816e4f6639d17226db954ccbcbf8199a5d05b76bcb2483d14870a199a8ad1531cb86b7a422c44c684197d6b93a3f3cbd7ee88f2b73a4f815ae34817f51670e8758aa89412017fa9a112fa00577f1e57e1a8179eb8167325688fbaad1ba89fbf232495a5a6d0fe2d353661d26be11ae953f7016272f424a905a5caff82d11a72291e9df5aa3732fa416f862ad54ec0326bdcbbdd35200394db205a7185e023aab07116c2fa28a85843637c0d7aab627f624c900f7a424c6b1cde1c3d8ae5f942d61589cd1894e1964759fb4560a9516b619c028a5daf210b807851ea4aaf1dd325090a93ae04df7b73d6615e1b29cbe8d4e973f28f95e406b9c8a67e7160fb4be8ea50ca9bdf26400d4ff2a2a0df2a6337accaa19907a299e9f5bddc16a558a1698ba2343d5b6edd9c28d67528d4d955f813b055da7be03a6051c1dc656b0eb0cb437b9812d01cdca9245de6990d5c93bf2b38724ef7c67f3e994177b7622ea24e8c14521b5c334733d69ef96692d0b2e29845e12e60c4ab82329e5f032660a9693d4f2d2b1a50edd4c81f5174e53bdae227aed08dcf9235c406108f1fb74c11974162c5cea4ca89f5f1f5efc1189f07bf8c1934da5ae2668ca622ce9defd15f1640512a0ec238eed5b2c05b0597e953ebde7b686fcc351935a81b6594696d0fde23286bcaf004eab323e13f5b227b2dee7dc52f01b03a05a14f2342a98e595a9ede270b725553af6ca0b2797822129eaf6fd8c674211cc686d5cef3bf5cd36c720408dbe0e9ce8e180da8bcb877ee51357764575cd7412d73a3d3937eb55e6171d52971ed86c268a4a4042e07dea294cbd6d4289cb3169e225032cd292442ce6c9c3b112736025e08568e8026ad300be28ccf4d64beca4bd6aee19e9049645bf8610c373d9dcbb3665deee2bd10d093eaaf6cb976b60a7c0c3fd6afee2136221489195c7e72280098633d26d4e2a39bbef4f8e26aac64ddc71b4618519ae8e602fa012159b52ee61a828c1c647219ef41ccb11aa07914c7aa413463d70745a6d423d2cdbe9f816af3280f8e694d94ce16db511fb45e6c8fc5fafdef63c33a9d1025a7e57f411e9e559a87dced2045bb2e4300ed1bf7405bf71c0ee464723bbe134c5588a51b67d3d78693337bc9c7e447f008a7b4a4ac4e53a2288f0b40b74e25631b986434c16ed183ed6415217c9fb62e4451927b2ec71f012ec6e24bcc964ec1200d3d45ddde2562f59979ba3dbe8f163b65c7c197159eb4b37bdf618321413bfb0b7f3118fd0a30de62c81f4f5e9efc3bd5b959936e829fbeff91d0a53c2000d1bafabdcc40d1a1eebbe2a82bbb62b795025fb8b8ad1fe9a5e04e17989f4648a8014f06b2722e178ef31980aa45ddd6191e29a626e1ea8cfb0cdb10f670b6f7699fce5e9ac4be0f211274505ce7b7b7e52c3625d59ef5795c66d855791cb7ac4fa104f759d01b74e7e2211c01500ba45107d15da851d49c9dcb8c9f2ce7e4d70eb6cfda20c03d31d19ae4ce2c52209c062c4bf908a521cd738871b6cfcb8f380068ee14e17dc39e64ee9d6d3f56bebdf4823890b25d1317462307484e00135125c591ac94269c308e97644798dca952710215b79ac4473342b04f8af55cf5428bdaa309cc3fb71eed600476a2b807747bc0f5164a3cde7a2226a8494f6563feeb8e62f1aadb206b9ea8e93720c6c43efd7dea9011ca3b51c2e246c34b2f12d88c854ec7efb8f64e442057bcefc62b727a2721651f72831adfec40f8c8943a78b332afcd01b0cf203f817c77a8ce0b167f69104332ff7c986445bb8ecb0fbbdd26e598687d72ce8726be35023df89c98eaa87c65c18ac3f2b81e77719adc227cd8fa9630ec49dd9a894066fe31f3406d59c936d069f331bf661f424fc118980083b3b409a7e4d71d66e90dca5687d333af17cc4cf7dce4ee0ea633f7b68d62723746553e2f78343a47eeed9160e8ae5c5f93eed1d5c3f65afc5311894f5bae6b9239a0b9c29a2fa40926b46f514120a37d0b27b4f8d9df9998e15b3a2fc5fcce3086a72be109565759eb67588e28f1978e7d30f3037e7c26d9dcdf4a2e5d5a5b18769cfea3ff7f1557a4abbb8061a63be7ed289b728fe3e5e04012e4146f8c73366a10f3ef1b79713aa444cfa391810bb2627d6a7a830873f676c5288630934d157640b5506e88d21473c0cd7227fa1b1298693cecf672436950f3f7ffd1aeedf9178d2870becc6c4c27187ed339b05006135884165a4a95a32cd476158a17fbeef42e97f7077c7ee747af89a6eab43ba47b62a4bd5ae43b414bae800f111cb7a17797a16165e3fdb487127b194b2f81f707eb0497931cdf21f06716f3587263027b1db940d6737fbc26eea0e3c7ce9ddab60d71fce8e68f07b2ebfc7800a8fc8a25e90c6355c669e599fe253ff557ab0527245acc5b113bd9de9494982730ad774b8502902092559dad38da4b7aa660b8be5e6390adc7c7dd48621076cfd4e70420be1a3ad5db24ce73fdbe361f2ed8ad8b7102cfe98a89375fe9ed6d2ada900c2ed840b78e23822c28dfde378731fc28b658a199494cc0f65e4cf53020e69575b4157ec2e50bee37995edc33264a99a0edc6e597412249a8a2fb9dd4b60187784eb71eb975e9a9ac07b9d891120cc8e2a648c6ab172b1c40dcd6306423a39aa8811f9a6f1a984961650ebe4de80f97a31328e9cdb4dd19c4aa14ee913ec37b0d121b8f13b1f9c798d2812655055e9459596279abcc3ece6c667a8af07133578e052d2acd09aec80794d5bef3e8c8c9ce11dff74e8524ccb8a321628ab0ae47d9f40171bfe03a8dfc04fedd805a02f3817dedfaec1496beb0642eb6f54351602abe328d820cb4d312a38333ce40ab9e88eb742d0692f669732e081be52b216c828664891a2f480da80a4ea0394cddbc4781795c6628f84b48a69116a91676aef958d0f141f4f44277fd6f16667bd873cd999fffd058919344152e74c0c48c3439283ab45a3adf78aea69638f0dbfb7e8a995cb40ab09c2581ae920c7849aaf616f657bc2da98b54e24ebce515c6da5a266bebf89249719804bbb87692f124f040374d83a0d499a2a58ba8dd5346b25a892526e498907674a01b0141a2d7425a4c48175a6a87d9e20031eec511fcf99b4967cc918dc71d903151f9f5a518347cc8c5e862d581364b24f250446c80c48cbdea44d643e7544019592a24cad8a4e156fa75a0f2428ff918c702d7b7101339a6eff78b8d2623e17e3d0b0687a39285b0254c16ca944a15b4e0d2a72e12d6d79c38731177a728efbc7b9499fdffa2d070d917dc15f96c5dde99c2133b847641febbecc19737c91f059d8f77f76c0d353f3e12aca705acf99a340e26a1aa531d4a2f9475047dc8e98e3cee6857c5196b8a27ea9782e4b261148297658397e3f62c05b911470bce5c043378238c12d4b4957b4ce1c6c5d4f57067556df72a051350640c86c5b35380bc4294c0df5472421041cf58db204a64b7c876e7e0eb0f2082274375f4c4d0becce0a2492d8f5b1ec414cf6115a39dae6fe30bf76daf0001b056401cd475685c921cdb8b353cbebcd4470fa1f90b9f258f54134276027cba42b6e4d54199145b5b6a75fc93ffc505be9ac88af8fc36f95b95c0bee0481d159dd287595c47222090e547730d45e6e040aea6b8d8304f879eceedb0123e1f1c938312d5801bae0ddb695fea56d8e078f298f8e43c12d34262238396432424f410042e3370a0146d1a464c243705f7b1f1527159f5dc678959e4b5599cedf32d646d19e396cb4686ab5f1285d29ac1d842bc5db459c2012cdb1a47e8f9994943716b77e7b17699255ccbeb03664f4c4cf376b6f06a45303c3a8e0974e3d2386fcac613abdaa6d3ca58d6ae417c0027c1942c60f4230ef9e1d80d92127450d38501d4c4fbf68785f9701fd8d4869fe02704960c0e6c8e293c88a3c7eedf06a119a568b95bab5e8a57a428889d23606c31714097f3ed0a402378b6d3067e3ea99f5b7e123f665962edcbbde6d311e4d506e19f6d67d6888a5a2c763de2c5ea4b5b43843bc1e1e0fbe05034d56cf93097d4456e38edb95b9c977590d99df3f8c8bdbd232a15170ba47b74460ed545c70de21572367d68effc77cc16a53f367d8157ce4cc2a96703c4a8b18ea1b9f31109e70f112017866a8ef1d58a384ef9ec44d95ad895e659ee9a619d64204c0c1f2138419219909d1e417597373ace3a40c8b91028ec7522d263d0ba5b97eb6d308885f2b655284562dcfc7789da28281e783455c5dd0ef3bb8fdaa21280ae0ae9136ad9a08378fbf07d232d313c51f5eae81c31ebc12bf6a14dc8970df1cd908fe8c1e428c2224e7eee6a77c231016acd22617f5c7bf36b3d0af7631be255f13b3e4c94f45f65af33440a4580beb8a85be7989fccbd990276e45abc60adb7a37e0bd31518fec87a22638abadfd3a1cfdf5c6fbeaa5ead841b4e5ca50bc57c5c25d160f8906c7b327147deffca7c8039b44af9310923342081514d95732027226d10162e57bb3fbba31a278a1cadd352d624bdeb375d9eca49a3dd6e6f6ec41a1afdc0c93f25504df2021bd6fb2d83e81b537f0bb3618fd86d698fa49d7e799e855520141f7c4220c5c04e181d765661b24aa864bff23cd7c10ad7a38144a93cc34305e71d19db044fe90c8765973308507e9d973d127dba5a3d1ffe01095a2eec59fdc67e02e65094257ec755f4769493887b790f774f987f9d6cf2da0dbccded1195322733d5ffdefb291cd863e2d57fbf2d2c2fef4f7c4b09770196fe6c62adc15dbae1156669288e1e9af613fb3d030e5e02ca73f126ba834e885ad15701948f254ddcd3efe90471ea47f9e091970d8d55cb8a7729b2c0be4b02c572bd926b454c8dcee1573aeb0da3173341d1200401695f8797c265499118fa31ecf5c8abf4cbf0376ce48bbb238f59db986b46d44f85a63a8caf51f564cb4cfb033e7ebd1c00db6701fcfa7f7afcf6b09885e8c991df446530c850040f5181525f799ef9fe30638da8a9c6b2c81eef20113395ae15ebf6225bc6758315aa6451864a43b13c63f68213ae5347f158aa5308d64c2a8a1e7b82b71758ae352e205599fd50db78c0863c6c48f265999eb864dfe9f2966b8a21b01c7177d381b4343789396d2563324446651585f830da56bdc1d9af5ed7a95227fbebff7b24f9ab3f34a4f0ff14cf06d43459949846f44322f8db64c2db7a098018cddec1ce8634e44f8a31bca8bb9e6d5516e089b657ad4cdec83d8a00b4469e3e2cb771da4eda8f31072b811298a308bb848001b8dd5637c9931a3a05427c8a72296a078c0a6d3f900db1ab2dec5790d3ac4c75442dc3be5a3880d6ebcf6a934ab08a5b7dc9f47a68c582b8a3028d057eb3e4f7ff4bdad32e125fd69b4ff6e7c1252f287dc80653222323417b3814c09a8a2b3e6088477ea7c26fabe9cb4460e2aa9d23ca2fee46cd27d9d8d3de48a298ae026f88bc819a157ecb5a3ec5b0da87dc6bbf16f937c59fa8cb121b2462108ecdd508976456b3e1aeccad3ae7566ecb9c5fb10376fbf7aad05151d7cd53bd8bd231893206a3ea63a71e008d86afd6e893a3c4a8bcde312431755194ead0d24f80c7430e29b19d4caab462ccebe6db0d067c788fbb664a9213ee588bf6008c370a99c0a7b86b54f15b6168245da1a445fe562f0a41a3cdd96f80927bf8e1557c67a83f48e9ba8eda24f6c18392b19aacd2ab5e7bd9c46bcbd5c9f21a47de9bb35de0ceb5aeaec4e999e277ec7875f40ebd5c1c42b64bafc56c218b8ec70cd4db413caf76d7cfeb125d877d47bc7aa6e62780138d9415ab254c6af7e74592a6f4b6c2ebc0879ce2e6885fa8e4235daade163ac8efc7b60a914ebbc2160b8ec28bd409cc0841a12078af991b7bae8499ab3776098c844da2d352f49d8737ca4c0e9cf905db723168912fba626bfb6d0176865d9b834563bb02a7351fdd9b72e92a1a40216ac8577656f9910679f690c88d7013fabd43414e510d88e7b07adb79d4272ae98b05b34846db598e37b556d3cdb41538c47b4af35562885f5dfa7ed2423a8e9474da084a003ee13610976e50e52060c41ce6ad42f59b33ef1286204c8715d3b2a4ae21edb11db170f50ead2ee610d65aba2f2fd1d2ed510c8d94374f96e9f26c9a787dc4dfa5c42aa980b1f63530cabeeb5786aa5d3545082b39cbb7be7ac886c481f2d80f2ce9673024ae86e49f39de1876dce2c8ccf5b71b99bed5c2fe74df28107a988c0d0d03ccc83e053457d779d7aa95e4c01e060f76d24aadec4c2f6c356461ce5446679210dba17a508bd2c9ab6dbdadc061dc0ac022bc78be039402fb45ec4f73f24098799ec1ad3e13784484ae3d27f0cffc9f747d42f9e42df5488e883bd04cc7fb397a657383ae28b5597289a4a21010b724aab9714f68acd80f3caea1c1970e9bad5b1177e391190996ab4733cba66233bd9bd47ae2254b31a4607376e36d5500898da54f1ace35b8467e1f60c7989ee45f8df7073eddb6530ac560dc92daf0b417f9194502c6f26d5b7dd17954353b47eb04bfd66e51d400bd06817c68c54a24a736d9609d67f8cbf34c039abaaa91fd78321a6b5f71f46a40dea31a588b0366f793e86ef2b4f2072d51e39f84f2dc68307d62f3e3e236320ef5df182d81ceae60023f5813905b35eb6cdb5fc83441f10092d537b3f656e34bf59a16197bfe693c5d4fa7c71ad9d392b829e78f48dcc5eecc4f3e8175194ba4b49a1df7ac10cbe46a259461fa4ad73ab9ff7a88ca3a0976a8d5bfe71af8d37667bf69842102481ba09453f5acd3b2a56f6f9182df226fff6ad56ba2174ac414f7fe6fc22488ed75b8842aeaf6f5b31ea9bb044f30e97b34b8780e958b4b382268e0ce072ad70523f037d8c5a1a8436a7183b5b09590dce6bd4931b29c45931c287a640438d40b32c26b16c5bea0d492204c8059712cf27bc224f371a166b2efef46bd3c99134e026ededb1283ac13041c3f5e3c0bc6611d4408317a8a450d84f00c6cee83db8e08305e2847e92a654830e1df506b34aa238fba24f1ff746fb6088a30172f1219985cdeb7cc5a108e4653f571afc9919ae248a9525036f4287cd893053a7e032a524fb2000fe55380f700c5b3792ab340bf12e997c1d7beb6f82ea355dac0497278caacbbac04dbcb5fa003234217100d1098c314bd903f17e80f0e34e9b696ab55e927eeaffee752f5636c265fdcaaa3da6383d141d9ff1022741eca162b99d0f575f4962bae7be973d1526455163470617bae41a26c33713d1256edc654147f08bf6fd58ca549dd4b47d2b42b085efa536be06074136156dabf463420c42f01268f60a976c092123475ef2db73fc98b5c8fe11319190f61f536de76d049175c2ad9b7390bcf490e26ca58429bfe611ba19cb9d700a7736efc3df5d233af125d38f369b6eb85482753bcc4281831b00fdb16587b75fbe701bc9b4dd26feddd5243a31a1b26dcdf88b527d4ace4651cf225b19225f4343bb86ee94952e97a1d2ef3be1341f141825abbe284ac32f473864a86fe3288d0c3c7b9dd55666f480cbc1df4f4c7feecdc1fa37be43bdf1c0ba55d791df15898a196832506660e2d856a6d010301ac84020c65591b2c9799d848461a02f8814a43c26bf9f41f8eb6b996be6eb74313e2abe9afd1d3aeaa74ebe20506ab19c27fc0e56a0c49909594e2fc51bf0b6a2908e174b9bcf7fc74f839dd0cba892607ed9e8709ae02d0a06b9301175ae86f33db43419491b13de44190d02c046a77f77dae85c986a3210c22401687de5e00c7d15860aa18b2ea053b3138e431e9ed4f44fcb108b35f1ccf6cd778fdec2b56883697bfb7cda27c34ffcbe8ae8be83437f03e777ffe4952299b4ee7c754c9fce7c48b0c7e582b6038acf012cc6f1b57817cefc826623a8aac9657da25a5a1bd780d27b3db7b489c4b31ad4519c68c3cca0c9233d52321faed16d2543190db21a4dcea6b77939f057c8a10090cb2e87a85faf6783e25090d4e3a5b1c195effc3f57d8181fe9752282c5f1600ec2e956f7c84064baf1679c69495e04f6103d9bbda3a6746e119587ee2a1c7c016b2554a41bae69f9e1f0c623e1aa82d50b2f434a8865b0314deecd1cd336bb516a827a3e795bf16dbd9d1559ec4a41beb2d01a0d5a0e69205b3b8991ac7ced01f24ccb10ba1ea7a103511bda1d8dc63cdb7998d18ef8b081c45d2d347cabc7c81830935f6ff5c61b722804bb70360bd95aaa5be11afff3d1c605d941810ae775849db141efd4da8e9ef107486ca22bf1a8d61f06ba8aee0f452d3ceb46b7f8933a14ec7fe26c5e59ce16650b3882c70a5e2981a9a0f7363d685e694fa8da1090c16b6851ac492f6eb8ea93500b87edfc849bae12eb37281c923f5030215b41262412a231fac2c1cf514d484408178bf6cd02e50d6c041705a4d9ba4fb2d1d90b51889cece090618e34f8342f8bf48280b786a23aba54896c246b14f56b124f0756094c080b1409a2c12e21954025f729ba63bcda87d04fa22e149faa2697185f483b72b7ba7b6a7ffe3b31932a7a37d8edec26c6d45e82dd14546ce6dc170a408088d9a946ff9bcdeeb56596f4e578d3ebe17a8d106ebcb56a98a078a4cf7dbf087f85e4c2a5b790ed6e93371a4f0ecfbd0b434e0ae0a5bf2bdb6031faf15fd4e0b22b9ee250368d5b3ed71ce77fd348cc48fd1d6e21b91658d9d206fe99b19507d3cd4d28203b3d3d66b1c458a912446e18c7dbb5f9b5953d50766d7371f3199a76247a1c6e0ec78e5046d5df01eab445b748590d8e5a228f4e2ca00a289375a6448b4a12967d97f6ea505d9d66d0258af94f756fa68ba039b85cd43ed832e9f74e13ab15e156bea96b24ea81ee7e6128ce09caea8e6211d1011e3b94f102c25ac1313d4b3d0cce9acb82d380b82333e862a5e0e59a16358648ac9bad42794bd2c6c9f93204b56d13cc06f4530c12294771c6f1ea52add36485532ba69e3afb877fcfe037b1deab59176680baa925c68d7a08966ec027afd31e4345a96e99ee71fa97a954a52a5846056981db9bf645d0cbedc32d68fafb03a802ef3c746dc3e9f1414d7754a3799fc12081cf705cd3a35f025321ac75645ad65fcaeb24c4b44e842f931f4a17c3808f261f0e0ee6bf0d657b48fb405cd64a1d04de16f0ec6d626a2e18961e226f751e656462d85c7dc1a93e070bacbc02001b70ed25384c43084f896bec90fbec5d6ba2bdb2b0a6f848634e0c857189f930d91eb4834500bcc39de5949d4336f4ae5bee8617ea847419bf6dd24098bc7bf75c63fac459ff911cfa1a44bd31379eaa0132a5e39cf700acaaef680f1c4344ae52469db19095bcabb9131e8e86fd48322a458721235466242b9a39692ef74cc763a2712053e50faabbc1765b0cbf12c49f825820f41526f37fd9e4bd114a472d2ad8bdbd48023ffdc505a750157efc720f43cb094858c36d85283764ffa69dad0346e6764889acdae173d64c16d8c8dc013ec861cd5e286e8e9c910d5cf275a8e3459ac7501b1a9d09ef661892edbf667f40c6533396a984ecc508544168d8de09e7ed1a60e3173cbebfb575cc15aa5d806f2a47a29dd102cd7e8950103d9353466e9ef891913160bce95b512c109f61429de6f2e5494b915d3264a9c156cbb590ce4ad4857d792bf2dd811a2839c17a921a870d9e285289312aa6861c51fa412249f3d8063057471dbdb76ba7bac705783c7c1cacd01ff2b72dd269651a1ec870952257c515da83371eb4518ae4360af57444e514a0f63129889fa94a9570b16c1086b9d12d4aab338cfda823bd5bfe60f7e18f584a66f1c61dce3d5c904c4f68050f5b50a9a900a849392c5e50c595a84022d06f4a3fe73f971283dde474e90f316b5755ffd2f86ae379bf526216fceb288d674b53df97997a2a1b781e77f5fb6fa14f7570555a375d90e536dfe6b8a2a96f3dae247371d4f6243db1ed10475e68172ca9f968842d436ba2923fea9085b1d252d9fe72166d6ed0b9bc41466ed9c36e5d3544a28eec0c6d82a31b68ce7cfc1f025e863ef38dca016003e2bb1c04a89fbd021b3326671e4756f877c22bc2094f435d928f0f207070290aea7619d94e47750d98896c10933c333bb4adbcb9c57bec6465fa699a72255ffa70ce38c0a22246616c878f6e9e043838eb0d180399c007a70182985eea31feef51967ee92de6604b1d138305820ae5c6449457b26350909db35b0a8cbb48728bc1e6808e766234d232aaa3a1070937036af2424dada82903ce9b2d9810c3d19cc71603c7aaff1b661deb8f3775c63b50de6b4beb04165be7c5dea90b48a5b2d91f7b0b369b0599c3ae11523e3874f8c24449d788d9f4a3287ae24f018351c0781995144f583bf6736f9f2ff0c396ad88a35c8c614caefa4f6d4f10661e6f67b4422ee1540119a2d4647dbd1e6df50fa7efce93b923b17a286e4a9b432e6eb677e9c4d8325e59bfe9c4d239c469256db419ccc285ce718ccf90545c14b0bbd4449c7108fde252e2a01863129496c20606e41451c6a9ddd4a0d4c89300abc95ea7c49081ebb7d9e4f317bf7f2090c1c7deb9bc1f6b9347a87d51b24641f285574f74c8c3da957a311e32a0008b2956324bb3a99ffb69f42b27cb988638d169cbcb7dd21d514b719ad53160fc4015071f75daa9fafe7f788f39d4aaf9ded30164a8aee7933bf63846b98a30fe270ca6b2863eb7ae9b6946fcabca979198589777a385cecc501bba809298e6b60d0f59b7af8447e0925331af20cbe4adb6302eb00808de6bd679153ac679eec7b7872fe65292dfe766cd10a6b728c632af3801e86b3e88b870012efcf3281ebc8f2399d8b8a4e7f3d519dcc9b501c1849411ad8b19bd64cd0e5f82da254cbdd0e52adbd49773a864dc1fe7ff837742faefbf8b6d00e55ad9123e79ad1325b4e7eb877482a541c43be44f76746cd3646354fd55af139c63b54b899d9d270103da36d8c005c97f3e4e969cb4debf4d2f8e0ea00c6b91faac66e37c40674eefd302be92373b596619b66a410e4b856225a76d7584da51bc7da87c03d06401848d2d5fbd95e8a972c2db4d0505f0cddc9c61f6b3341ec2e7386ded4f3be628f9f3f6f97241e43071399798100141c2d581106910ba07fc1ecccf7c716dbff96c41355c1544ec91e3fe2f35dc5dbbd38cc576600935ade2a68782cf3e7ab798f3a6582afd2528f88460b5c5cba75100266807a7840fa6eaf22886d60b3170ec228ae253d5a3ad47b7734930d71d68caf7efdb5f5e45bc662c608eccc4ca4632df349aff112fb27ff952f4097b65d1813def053051b0ced53368b063408c908e7cd345026a17755e2416aee1451bf294f6f93a5329f083912a7b68ebf681065fc922f9bc49370f53870e1b042e7c0516b12e0250b7b9300f6b15cf07904ed99546e3ff9b798a1edb9a6555f73bdee02e6877c46420c40bb92bd1eb2b51bee16a968013929ec4853c4243f47b909a0aa68268b85b84234a1dd6d02fd384f60a8c2e9e96f5da0ea54d36327b141ca5c47ec34c1da35a96dcc26eccd0342ace54307854706754157a2df378938eed6d8ef7463ba67db568e3993bbd5ab6c839d50f135eee4bbd95a9cd25d1bb2ee4f3c0405bcecb17ca04192f43a3944e1c189391ee18ee3e01b3b5f0953001c61b762740d047bb5870d26da8614b5a0a19b93e564d247e08e60546a32ba15441a3a31d341095c31499ea13c95b51a8c775a368854a2899860cd59c6def01f2254158175c6782ed7a15984b535a68a63745e1a9dce0db5dbd28b69ca4192b67fe55585f87da70e5965fc50735231f668cf07d64ae9d96bf847078a2c7e1a226e7d5e40be84ae61fbb9331e89bb868208a682b47328a4635524cefa2556658169df1da5f54c812c9f7ef90ee40d8cc20c149c787681cc0355287996789d1b609647dc6bb672677d241752c434eba5ec60769cf66a7bb9df6e4c205774ca1d5ca3f02080843ac0c2ae62d0745f56148c2bb213550e8bef666923b4fb3cd2f60db73949f5ee61bd4de8c9f97102ab3fcc720746f9471baf5ba0bdeeb0efaf9d94099fb0d2ebf4e14ff50bf47cfd4c7bff8f397ffff969b6b81bcbbc55347081616f2b29a899e80c32e62dcc49bf7b93ba8fc132888cf742fb57cc2b6c5d9b3f922fa4647c98793dce12a652acecc3f267bd75ffea4978780e4ea1dc140e2fe42c50dd7b5e1032b30e0baf2e7d8c742f0f0642eba63d9e17df1f0ef71cfd6111db7f7abeba74c3da64e05e2fd65092541ae46913a86948077f5b1439402cd2dd66f7f75a4ced778232fec80f38df40e6bc936fb34dce167b3b72e628504ec2976e63d44269c0a68607a1071bc02c37b7be060e6efbff94dfc02d4ac6b028ed86af3efa3c4ce51ee02c4116b07b3c8ca2279f5ee984e8df31829b33af81cfd5912d98ae5e65b0bbc6aeaf541f1cc1b5f9b0809788279971ab2c7d67a3ba2d7120776b6aba6ac93dc1da7e295d16aec5615d6b05f2fa9ee339d50a0283ca3da00d85f4e6faf8882b7fd78514dde4c53621a44bc7879951ae181ce09370d19169ac251c61a76e3824ec5d516936e16d3056df3bfe7b5a009e97c7da49d64104ad2677397181f5cb43d65eba8876fd9ee0bfbbdac887e88e6fe957238dbf6fb9822a077173c9bb9315822f32141eab9e1e3e89b9dd55ad4928768a42f461d4e6318e22ee76d5765f9e05d3903a1b08bb9a51bd47e2eab54da4190a40a63eafb6dd02ab2db9b73732c6d5dd00f2fc1226db7f744fa2cb8b9e9b382cc8c635a6874d0724dad5530a4fe19a4fc55338632c11cebe8e1ae3a6cffc0dacf3a85e8e1f97305d1b2dca6f491bcbb42ee95e2e76f26f054299a849f42001b906c8dfb5be9c22c0c7bcfe41bb42bb281655ad2e4c50786a72525fd08ffd6d6529ca0f67bee54443bef6375eed503244d02a5c0e5e297575998f2e0d598d5260718c2a8fcb384f51a69da5ab7093e8344efd6976f1e96db11cee9e1d7c642a09adbc7edff4b2529705b4eb7445b593969e5ef6849120753aa7c54140189573ba0a462fb1d5cc08cae0b1e08249b94f600513a303e089b2712b70b900ea80b474788a0e096ebf64c4a4ae036f644c5d39755771d8037a69eecd1dad684e239ed10554a8b87de1c43473a109b3eba377d72f2f8cd7036caab661d76c6fdb4e8ffd1735a4047ad26f1e2452162885f61848041adc750a499b1a201cc89ee57f50daebb709e960cd3889365f6a29b31502cbc111febc490a3b0d8e5f2bab85cfa992aae4f056a5a7cc8c7b53a6dd8ede46cd721c5d817681bd1d57feacd9ccde54287c801c24fa62514be4f4965bfc1ffaa0fa848c5b384e898dfaa9fce4bcbf8f02a081192f78a175d06cde2b821895337e64ca13f1a3b1a57e1a73914463f0dadd59cc03b5133a9cd885b268fd83dfbef33dff016bbd9f665ccb8325ea126e6e1eeaf0f95707d3076c10293442a924c7284be985c70b71843d07b49bdc244958c66a2d04fbcb4959dfa5536a26cfad102d869734086a8028ab59437a16fe9261eda25aba9b8f8a534910d488733e32099330c295ab383f2e814a0b96e39596a69ae0f9d9351eba9be38b577ab79c173ab58242ad335cbf1281e12c973ce0e36339b7d32161a60323355ac3e934026a0c1efced57150e77e69f9a9dd86fcdacdc14a2e7f9606a3b69279741dd3e562ad02faf460ba00577e5d23d466bcd42bf4682428b9e589944c3d43717846ca41933e5468613a7d14068f480b940cae85f4f35d3a678621f688f044d7324f828774b78fb473d36778f014787b9c6850a2970c2e97508b82dec104f3f9092d567fd921dae2c908dfabc107d093f93b43d26ba771c6559cd2b666fa832b92b658720e9e4609cca4fab7abb63e70c6db51b679d37ad14a420878acb53514ed15d5a3178e3c18ff9a3335da021e15c78a26640635ea08630c19e099ac899b5f05e0e8b3ab6e4e084881b967e674a920c921f0685e66cffbe8278f31ec1e632f3e50c3a3dc626ba165535fae0323c97f461130b3cbe0d7d44958686c761c91a49b9820b7e50775e714d8de37db18bef6f0a791476eec8801096c8b3250037be5566b5892050f052ed1e8911f746e73298152d19f7734c08e254b4f711c34d8197809fe00641b06abb031df8280d0cc098a1932571f3ed28deb39a11af1a4a21dbcb3918eb0a7caca23fb21c2010b18675881d47af298ef98504cd0e4ca0940009cb3a176be23d01d64c1de9dc7c1cb524553b2ed38f0e3152b4df67bce7644315c4482428b79d00f0b355117ce186509b0100badb81771ea870b7a1c9eff8b1c6202d75b9effe93eac91f06ee51ac0751cea6724a029363ea6f4460457f2f3c712951da0cfad0c8c35767931568f9912498cf1b212141e62cceba0734ed05f3e40dce33eecb0b1391b6a452f7f7be58f2fc13cac3ff0dd714ce76e7c22155c182c0382014ab6c654ae476192b6d28de5330c6e3fe3f5344f72e5a97bc5a73288efd0edfd5df7925b6a8f82febb08a68c38f50cb30041b2cdcc627ae150362cef64c7c922e46891b4086e520cc3ccfef289a0681c5b66729a6eb3f0cb3e63df57532dce4edaf806c9d1a0ac0d1d41b7d70d955972370164c2930f53a9398a4e5da174befbc3aa79b7972814571b57dfb42a25bbc3908c936a555121018f615e520e393cc9017251a7ada4d71ec89d760b67af5a1e4a5fdda2f28e6324791f1ad66ee34435ab54b933779f2d06ecdb804c38d386ef63365ad8b90eff0ab676ac8ca5091598a6771be721252b160eaa0d7f3b627932b92aee1b653db6f36a29b7f152207fa9e900fdc4bf1b47a6e91a349e2451212212bdf7d41439a49b6ef7209f5398e15ae658f08d906f811501b8a73f9295734ac5de50b6f1d1a3a6862ca6d2b24cb3fdefb30b6c4b3be73ff5d84ea60ffc712f4e1329e3d909c3e205a148b7d8ad45ee0c4afd5a7bcb9c883e7be0d13e95c2877a192261edd6b78f5b680533165fb8b0ad6853255fda785296a4323f7aa0ac6f2b38e00968451060e192f9316de7900af7cf1bafd8eb07d9f89560e2e2b799af97bd2897696222e66aa24bd5b3309260bf399aec1dbaa858b3ca292b4f7a8ab4142fcc47e7cb69da8b6a93309efd58c2e5441439e1e2b221beb7a370877fcedc60d38600663094b09d88a4a453b3c96ffef702a57201879f9725627e884fbc9a07c296bbc1cd3636a87f54dd1ec05a48c397f899ac73f256f252681d8b30a06f8e88587d9e6a8ad0a782b40d5422ed713cdc0f22b14b189d161720c6002c81464ab80d2300a1a08c69b3224ce270b177b5a581711e95bca01b0156bc2b2cfc5630649172d87e4080bc6f48f066470cd04100a22e017647f55e18267e720b470769c0e26be5b5531f22d5eb243935ec5a0400cc8f2b4356f0b1bef7422783fdfc600a0ad74137fc2d0256819123e9e20343555338ebfa3a1e439c4ea4a86c3e9da5913d6a0a1e9a08ff844992f6792fa3386dcc2218c891193420fca7f2646ac54009dc5ebf7ea6031d6addee3266c8416bf256c5828bc098588b83019035f650ad92708afbc7566675d663efcc50e41f8ec3042d0091668e8dc67f4687003a9bf16139a4c9709967fa7fd998da7236f0b65b474bfd36b93ea6b1875faa03f97db5a8695e42d5b3bb44c7d7d81a7cede220898609d6a06247ff1138581f13af276126ee1d5dd1b10baa1d2fd074a029c0e93d3a51f4b037708e2db27dbd561bacb276da59e633c7f21ed0e13f2238dca0e0451fa904c1634ac9f991027ef934793a286a9a1580e6761e960be888279e8090dffcbe2bf9e4052a731254b7a3a2759f9225d33ffbb5d9be58b4ca1fe09cc6e42b03ace677b60a6f1032456a0f4816addef070680346e8a3261d26ecf871896ea457347699bcbe7ee398315f9cceeea248c7fe59e811c550bfeb9a16a31b46590190ec9fab533f88aad60ea7dca2b0a2e948bdefae8a1d79215b224dbec42421582b1053d5cda64a1b983afbcbec8bd403307b5ee57cdd7e0f40462796f3e70bc8d38aad092128c8466e04b5b167000c55bd47b6bf14a2000436730d638aa0c448e615e8d5462d345afb5fe130e4b74b1ba1061be0432db64ae56d88e885c7e5bb41e659095341d70ff70f31ab4402d4bc46d7dca52d150ce07b17f2b97102a88c02d8627a7d1cc40d229b3f21c2c94a4f6715cdb25c1cc12f8506ba25c6c6f5ccfd2abbf6a780fa1a28b1c65a841fcfb56c658c3c6131b6f56efc23be1e90583d0c01da70c4012aa2d2d487f1eb6ea5fec09d3d795255a42895f2750d641bdcb8d2bbd471c779d71a575381cb5db75e6deaff8442f035dfc461526d18fd9fc293587df0346be878adc4792bba468626c7158d176e4b32258d25cc774c2232e02bd37e04dce59a4e82b6c9cea0fc34dda17c4fe3b9be7d7347f22b4bf6408dca5afe07970fc671eb8c212b712ee54aed3d4301d7a85773d3d10edab16fe70c7590b3bdfb5b8604badfcac33e35aeab7ab0eaa26fbd601df330a549bb8334999bde9efc5a7e78a369f7988fea8e50517dbc6e95bdc802aada79d87fca7489dcbad89dcc63b0d9dc444b61b55e6001a5070cbfdd04f21c62fb5c83f50f560d3a821bb69f0f9c98c6568781d137a0aaf81b556ca180f770fd7936ed19dda5b67bc0eb785ecb094af72e6c55cf058de3542e3b58e98a6d511450d8a8b2a838cb09442b94b75aaffbbd2511ccce2af48dde01b3d2444f6d4589980ef38922e1901925c2d749a84aca568e38dcf198e390b4a28a950a3c95d471bb8678a14784fbeb2a2cc1b396837b453540966434fcc163459a9aef5ed46fcc0c93a001fc1c206a49956ed0fe24e5172e2dd30635a754d65191995cf93a413aec70658515d6922a0adc19193aaa79c488fc6988936f514ce48128e871242fe7cb2d8710b5d07efa92442d496b5ed02b84845e2a9c97594cf4643b67af68fcd7e2af151f0853f21357e50033c4a078b8cf0231fe4203c9b4102296f24c82e26e6c3addb5f96114a7a96458cf15a016c8e4d6b35446c40b074aef85d93096fada6fd0349808124f2ce1601d0146b39e430072d5052a0d1ae6f63936e9b6cb1f2f466bcb3d321f57b3d0e965f2623afb9e6a796b7ac65f0b364459a0319069805b7f10201b9e80cc9fa6b75a1e99514a4fa5fd2b1969d2bf6e92661f51e4a1caf7b3b45c9074eab4fd5a31285075af78d9369729aeab7d9dca2fb72114c846e48e8ad96be477da290f099017c91bf8efa83c67dad335be3be7678658c101b19996cbc80f297beba29efd3f0f1513a7e86faf589970cc30456a5e15e4a317a940c3a43e3cb6216c6ea6ce373f66760a1dcc2bbaad3caa677329c624a01fd0e6be4457ac7e271574691437cec9b58d10eabc5ee653b6b83e710e70329c44d7c8722a926ce305e9f00a55ef8bb305de7aa3414ec7b4247c7dd35e77f30dc8487093d7fdd555f0d6cc763424bdb6758a3c40caa0282b5e0579e896ba569ae8d65d52efc931ef3961159e125a2c0fe49864a86c2be6912931499adddc6fd8c0782d3c4f013caaa6919ea39bee6c06e174c77ec831370448b0870fc3908c30b0e1af32b3c920fe3fe171d84fbd30f50c942fb2c3284e0bb88f1ffa1772e3e08dc5ae4d960025b2872f2f82d3fcd45a5a19ac77199418c9ca8a0fd802fdc2b778560f25393d2a9e7c97450f097000505a7c112aad729e93317236257d64338699b8aa56ffef901a80051fb52ebb1374dcf5351e01a4d815ccb3c59636403bf3810ebf945440b0ed33075892de18fec2bbc3b2df6ae0b05dbf493a93d1f24a7652ce6a9644184ebc3b10ab5629b4b7b7310fdd783555615de7e94788c855aeb63d2a028f009a47fd9fc47cde1dabc1487358eac43d3a1eeb755140f7e258c1b0a6bcaf603fd3c1d29610bac0ace17ad00f8925fdf8f4b7413fbb69562caffdfefa2d5513160271a593cd10a73b2b2eb4969811ef6d7c35c3db276d8a17eca4204c0c48167a58b9bf3e8497daabdd0ac5a7250abe37ba293bd706f297f7008727ce30738a63e95a88bcba9666421dccf8b744b4b988f0d27e2ac509f3584522cc5565de1fbad5fa3be4bd259c11a08712632b4712048628c886c33e5ed5183879e6fc7c3ce8068b79dd082f5855712832761eba84a2cc2cfaa10639eb7b2dab8ad349c504e5cd267efec1b8f600bdc2c4677d40405f36ab6fb09a105d2d5fbf574c5d876a93f3498e89b50677246cbbd741714b18686251b2eabbd636e9982c9704d2cd52d226a76ae059dea2796d4f3dec135f0f8bc5bc3f423e2fc7f61c31a888f49c71de7fed9945769f5fcb14f402bdb93198c5839414a964746ff1ca827b44b31b2800e7e670bb5dea8b9a5992c32cb5a2c144c0638d4b16e61e4974104f4af1ab3e855c97732c393b832462bf4be4476ace71764cae2f85e1c165c6b88c66ad5f5cd82633870733526aefd5850abcd03321e335687f34bff21dc142758c34f10b4fc3498438b4e4a1a53294ba125a3d6d8c472a73c427a5aff00142d3d5494ec0269d2937c0766b5d7ed6aff6e10763be229b607abeb0d5496d154177e9c0cfaf970ce6cfc44cd58128265abb8e9d207b2f1cb6d0cc693386fbcd22cba958818f662a0b5bc1d70e8d02a70db12f5c19e51dc54fce26720e8fee99c08ed29593487d10d05567d99c4ac3e024c3c06e4d708e9577411fd49b5a46c52cb33a1aa43ee3f2d4068e75417a9524f149a8ae8023b5349d43aaa557201e8d66094d11b52fb9b9cc23c8f5aeffc23674f39ed88f06fb9bec0ed1189fcbbad3f98d85a4b079de626b91d41c232b70ed9f1804223f9bc9b872fef0ca82731789050e70e5fdcb8209a8063d887d10b0f13aa2fc72cddaf276dfb2365acef0bb8d7f9f18bdfd5abc0ed21f14dd6cfd6acb06c4d7b6b607ca4db035015e2d1ea751df97cda8d58be7b25340671903ab3bc26748a1989dfe6e2de71e2bd1e98f63059202e9ddfa7af02ca875b0164b4833a91d0c59d4937d854b146eeaf34d5a55c23150c29b96953feb02d7389626f04ee17b048e4d09332305bbdeebba94001d941a2ff598adee9d647600df0e417d4a7326ad84f8ed72ec0be8d01ddd8af8960ac42c79d94ed1505e584b4b060c8966b9886b00cfef67318677d6c084858b29598bf985dff7818798503ba4dedde131f3a0273374264c2d2b54ba15f3883fae7f27379c5b263deac950216d20821a1a82221cb003bdb3567b60ce609858a5bbebd29a33639b708c2939c81e90e23b8c8ce4b9421d3d88bd363163abdfd9b115cc07fde7bdffba7f58f8b9c3824268fa9af49641116f12e64d8f5141aac9ceca6bc11f3182c9b007b033d87d6a368934ddd4a1772e165c8f7fda7caa11007fd6ffb3613512598de8628740f12fcb298a0987b31d12b5f929787f996236bffe58a41cc9dda9572c70622ff3293624d802c8af738ff26f91faa9cb0659c5c38865a025bc2301bf1744ed920331aff38235e5969bede6c68271ecb3a212027cc2893a52881174010f1fdf527e6a97df8de6523c0ba9e4c0fc9075e079c6f192b6ba3e54b4e4b394d1324ba2d92a0bb5034f7a20e36042236549fb250cd26fd58f078de544f8b6e3a026e73c1e3ecf1ad5d4ee4f8930da46ec7cf17eb575fb51f47c01f7d1c60c947d11a1ac7f9306a047291e8c126bd45e843dd40d62fbdf23efd4c3686fed403569757547dccaac4530392d483dd472b01704745f2fbda7f452b384fd5815f58c7a9c51e09753a3f784f7da3802042fe45d1eaeea112c0c0fdd9b3eda0d6890f9c2a5f840c9c85ddcf18174dcebff98302a3f970d34af34cf9148f3d32896885710059ef81b292a5c9b2bd4157863c6196531fd94560261264413f01fd116404f02967234dd5a1e0bddda95fc1fe08ec56d8319379c7875852ac39393f8b71533f0c4621796f93153d642a3eb8031b9f978443df1557c143027c44420f8ef430ebc18dfa39636f1bdee55894b25dc60d81b3862e878f636f95909ad695c4c08a53f3b3bbee46214219068ac216b770151fc811779e6bdb92a8c546ccd637bcfbcc7b8a31844a6a47437826fa7a2cb3505f81b22f99980b8ad7f6beec53dc36d027684123716e09c6f159ecae16088538b897f82bba3463796fc7d4c6a5c14115f2a63c52ec87ca652dfff7f423e015094c0137998d671ad54c8b8f77ef15c3b01890c08c198699c6ec39c8a3870ec26d746d3318fcebe04f2153422ac59be345bf1f93a597a3920a01be0c434223c3c70f69c2743bfe11ad4ebe1285f0a38d4473c8dba3630850be1681ed287b72de25b414a45db5922a44a4894cf5e914f1c32e10d305792a42726c9df14c8bc49ed5ebc55272a8c87a0481f4e8491c94c97e3aa37226a41c81cbec8e87f60d9d4fb437b658e6087dedebaff187b0b8c15f24d5ee8769c7b210e6f355220160100e2c6b464836f5c79c805bafa96dc66c92a6bf590e000e116b188631a7b957b66fd10a90c53bf90e306e23e6d261a6e53f2a6ba6c7f3fcf769df7c95b9b7c793d3d9b17c3e01d8c129db47ec0fbe99a3d4a1355cb49ec1a07c76a8a8f2e456fc664f3d6a9603c5881c2ec2343c9cab301a595ac6d75b56dbe81d700f6347e3c22df2f58358b9822f07f3216f4a510137e8278c3e0cd7ba2a55cf50ceea82f1aa5900f8ebc7ddee3d09917a14478c7b5d0fed24d31a9d81d606f2d59487dd4d8259d5c63569898fffa4e723490b32c26a56bd294e8716ab031148d5949f92281a64ac8186c3912bc2ddce6bd173a97517725811c333d1be786604e77de84397db9e67dd32563d25c3be248f682dec4b3614097b693ba5601e1a5b99315ef243ec2444e99053c13176accc6ffc0d53f1b521197b52b4993a1d8535a283cc98026f3a33ab50db521c0678f2ff7ab1a591a1d7b914fd7a0ced647ca40d6c5c1fd29adcd8ddbcf4a5db0a1437bd2138d3123eeaa183c72ae41280f30382ecc871e90afcb14e7685dc6672c14f726f749d2bfefc4175a703d5a0a7e9b286e655ac1ecf27c48fd98ae67cf5c3e1f49049ca7947dc7d0797e0134df610da7dffcd3a710050953bfa8bcbf21b91a78b6a936559ef49a6a4a85bab6f5864b7c93507ff94b5a382fd78715b8aa3d0e8827ddd23c54b93a19dfee4d6e7876ccebfdba19ee6e12939315f45cad9e2c6802338bb61339fc628479bc2febbbd84fdb4d1931fd088bbcfd64e26489ec953585eaf5edf47de1d7e659c6c135d6354076d6b5f321862b28a7242d577547b40ddc1d1824840bee3fc6bca77838ea60349d95c38686dcb4ebbdd82609ad6a8679deecb860d1876f5748c05f505b4e44641003160c3736a6796eb88e451d088c4c38649a21a7595612ddd0ba1428b17eae277ccb12f08a0bdcc318b51634ba8bf88ea64a42395016762e49de089a1653f776d7357d5caa888f0bd854488c672333aee453adf1f57dc3519d4f1e6506ddd156d0bac5600d08780c7cc1d2ec054aaf499d80b3510006a17a2e39cb8cddcdc9d8ade9e088d3d8093586916972974ac25c409d7f51efb10ee49288ba2b32bfc319d0c6c2cbf2f43869dad1e664be249335c17663d072489179d34f037b213b209d6a188506c1d245607f5a7805aead1c22a0481ea42cdfb904ce197d2835fae681a5af6d04dc7e9567ce357facbe88c2870546a59560edaa3c472e7b56f40d7c3773ff07352cf8fda65f1d7928de46534e62ee1f5f88bb0a45829b2c41c0db189f3218a449113867f530bfcf8522c6bb726c21e567c78f90fc78a6726fae158dfa1747868adb7a768c5990c33994363711949bc56aaf8df3818a8d1759788be9ca4eb0be4e79a6b106357ad2261aff8ba060b429d44156b42ff55f465d7a699793a127e33fa5fba6645568e24752b8ad87e57b4c486b630bf80b57060db737da9ff3ee15a8e756e954e2daea6d4875cd65804452cd8917031635b2693246913fa1d91719a6867c6a424b1b35dfd8e7f98242e4827c8a7ddac051e3ccbd912c784339b5175fb814903ba355f8e601b8a7b0d65ed243e2e24d344f76d1ae47ac1804b14ef63d066fb918f38dc9fd7789e9b34f2c9510c605656acfc88bca050875a666e1a8eb193cf1679e584b1e6b34dd992422d787f9f7512dbd42ff8a266dbd6cb390b9cd789170c9e1638eab2b139f0748ef681ff093faaf6b1e88a19106261e128d95f2ff36f93a90607435136cdb028cf5f17675bed67b1862a1047c0d49af8b51b330cc5055e2f710501988e096c3003b75ff33d4fb8193f9605661f1f628745f8e633fe2b95d8d5411911af7970300589cc46a5eeef1b7739117ecb68a8540e5e3bf99769dd63f7da221d1d5ac51605d17d78dd5eb2c63317bbb88f50bbb2bfb3464df41e1bda51692ec2d130fc2ff8235274c6d36c6934322debcc8250da4a362f2d9a2d8009e66c6fe61f0642f13dda758e29875523c929429964d79773640592b374beb8074332569d56157261b9e41e7b715ee75f25edc80ba9db4821b91c4b2d9936e69205c50f2aa78480a8b006016552318695d96cba67c5441c009092cae22576f2f6806e1157d0051f0508064298a5b8472d3c2328d106f1000dcf80fda52b7273fff1b7591ebb8ea2345e9d0c487a09a977016445d37d737aa9bafa6dd849decb9909031cf6896519877f188f48bbd1f7c525d56f075eb8272b54c2854b627711571563a01528b91d769666ece1ade75a11e40b48f47549ca47da5fde47842532096571e04426000798d79015974beba619bb8baa964f2ac0c9b98666f698e471b054c344a715ef30621ba7c2cd48431fdc0d53646765b27e80b841cd38f93e63632f767d033989da22db8ac43b662c5111fd168faa20919ed4b9db69b793c474a5c06fa98162b30f59528850b0b6b4959f488c2089ab3fbb06184c6c927a299a45cd8d4650b85580db0fe7cb3b2943fa3cef9fd4d28cdf28d726085a11b9a904b3ecfb847337eb4c8bf47b6304fbc59805e0df7d64da255c9b36ac52f5fdaa712e71605cff3053725652fd345c29239bf506dabea6b2dd7d412aa44a2022e681f0100d1aa33fe37deee32eebc76255733a95092589781ebcbc364505ac2e86c5206921a4e74a518580a59cb5fa52f4691bb1bfb0ac56b655e312ca10413cbfd380678f3ac3a72b891fc0070bdd2e50ac2832f52bfc398f52887b5ae7bfc6f5876b7078e641fe4cd42897f104dc8f5f77520fe9526aa0a0eb6093daccee4f5bd4ef8ee53399ce2ec6d8e626a20660d9169a0b12fe0038879acaef722e5f9076f002fe5f846514a9a41629834213eb46493da3b6879f9603775e69fc73fe3c17ff4afdaadc90ffeeb28652453d9828e5ccb3a435a72ea88033d9e0eabb0465df9636e9375b8ff99549ba1d85fc83d6feca131d9107193a1617bae8707cfcd070e929bd9a959e84dd4bdb0ced3342617ba6eda59d8f4dce677676e091286cc41f7bc1c4871162c28f0d591a5cd3e31f4c2c24171948ec5fe2be7c17bf05596fffaca7365bd3b4eea941f16d756b00f12e1e031495866f8e3caa749b99a0fbd14ee53cf4b93ddb387da0444eb929c5f439c2f87d5880b4509d1d4b2efd0b4b8faf21ec2dcce23d1e08d5879f2175fedfb7890e269a2c4380b4524932a5f31ce5b29ddcbd5b8505957ef55cb056359f664f1db430e875c48bdb46375830eb8fafe48255ea490c3cb2dd17e931fcce84a7f65810031da504b00214a601f9291aed1c57ddb03ad7a4936b6133939a1850c61a1d689190c595d52aa07c9663a22f6f1b0e96c518bd047804b7e2ea69a6b4ef16696289c2d050b039fd14e46b6ee39f257c75a6696d673337bdf907dd57ca3624c4596fd6ef626cff66493bf57997367458314018a7f5d470561bf5da3a7fe4058101057928df5c475550000c871394d33085257e5329ffafd322754baf97ab4ab792f419b1598e5ce48557bd122fa158c5a3721d386a0dd0170c0603de74f7da0d3200f5b4ec4534535e3511f971f1b6e0fced9640c76314bd5708312165e4266de97531ca715c3c96baf95d88cfdbfdf45e232dde3e5dd38c495f64988cd5b9382d5d20cabb20514b2e9dce716198560c06fb529ca3e4f756f78d6a112673cd10d9fbd76aa6d3b89dbecf5fc94fd6aa792786c7baf5285afef09af0a67564033e7d565a5c95d3a3eb11d99bb39e232d83342f605db04da501ab6921688e501a2a823c57d3157db4a819577434820e91b4a0afff1d7731ea4183833d94f6f207cf867e0abd000f713b515b4f592694233869d80cea47818a7fb4fbed55a783a8c6a161fff1c85bd61957f42a95a87ba7997afa8aa6baedb402c5359c75ec68b0a358865fd76434f098c32be62d3f802ec7857311a1874b657d638777d214e168a3f488fe129131bd29b83156e2a0312c93ce55876b6cb7cc6235b90688d0b2ba5596f8dd25a7628cedb3d992de262f666f89887d180e4226642ada79fdbf4a9e7bb892f2930ebc4da9b2824849015cc7e9baed225a30b443e54f4d56bdbe7b50bd8ca78312089790752fc23f3704823fee53d40d330a6e0ef6fe65832204a6d13472f7497030b45f0e72373467effed85452d5225904072f4f995656966f37212b8f577da6f0bb0b2b9bd1e064705f860a6eebcc30b55177a5b34025b1c92ad57f2628cfe7592af45b4ea835df480cbf16ab48710041558d049d18113afcc13cde549b508930b30c5fd65e24f371c4fa65126e58f2c070daafebc865830ded5e8bf3d5df9e2660ca841ebae891b5d5b7605d9b4d56b2e52c2ba42a1831bb398033805bcb98c24e6cfd4c5169124fce8ea0261533d402ad663253d54142944f0a9540fe26ab0922ab601d351a410f6d653171ed2c911f98fcd43905e82f41445a4b2b9a4cb1a12bf5014fa834d27dc55881de91cce8e8f541405d826dbf1f9b60703cc73b3787bdb3bcaa6b21ea86e7bf165f680a7d6208a3785db01ab73f055a530553d770524e2800b60addb1b67e08dc127fbd444e5d01fe03e9c7a080c38d4b585529d24ee2b01f76be675f8c9446efa03674e97b715f439207ed64a3b725ad788599357d40c01ffda900e9a10eab71d9c68ed75a90ef9bd545a695de228223e628d76a471f55a1ec29bf5d2642b744bf6333da73cadadb7a68139d56d16c8466f2ad95efc137f42563d8ee7a8c2a5b797384dca3f598422d59956a4acef2302d1dad171402991df3ce62b39cdc61da9b0c6b85ba05868b2f44e1e43273089be313c9f2e4ddbb995cad1e0c952be81193d1edbe03908ee4c5c0b92a50c22f1fcb2ab669ff34fb6b51c0daa71f0e1a6ca2d06ac14d98dfc2a3cb8d5d58f781d7b63621d2b694e55bfa58ddd9f1e6fb17f5d0ba710db13da22bc250b5c5163386e8caa7d0db5ab2217825d25bbaf735de233538c85f9a253926c2b0e9d50ce343d9660638443d612a11a2bc9a81c48831f155fa132de0f3a9184b2a150289acf09587465d8f8d8958f2ea056422225e1d5e08d52493cfbdd991a8e41d608033a86edff80c3cf02eca20ecab3e053b3104d927754218ec816b4b63c24ea857a6e992984b99a428cb266cdce11cdca6580d8eaef665db298df922ec085b57d7b6c7b9036631eee7b2abbb40f657c9821d3e04465bbf627766cba58fd2d089df605c981fbf1a0ab3475fb30d172c63461dc0e30b750fdcaa0dfeff7ea6a3a42b4589e624b7cb9dbcd405b959384b9a73212050e124b3844b8b4907877d67e5c240007352666f37317b7394746c6f2025e92d46e89a8243a06e8fcedfbadcd125fb393e08ca535002e6fb02853a4f0df1105eafa872b0aa7eea22e1278e5b60e267b0f5b9b7deeb95a8972fef6c45eee9e50772ad430df4ab4a5d017aa918c6664cc918cb4a3f9fc08cf9670947cfd5899da49e3e496170a843aa1b2ec67c2ac6e0ac53ada28390f9bf964ab25b8f88317d5cdb013fba68e75121e6895dba5567b4d9c80ed200ce85e4a5f1bd34646535826e335c35aa242446b8e6fac9689ecd399739ba00786e11e4fdde4e6480a80f2b37d05049fccab6e410a6959296f0d98c9ebea1ecf63fe253486ee0e2ac012a325439d2a3ee08d736d92fbe73adb9eb5927dda8c15648ff982c49675170172ace5b8ac2c6b5c4663111c55cc8cc76e650ae69d8bcd8e43a60ec89096d3c094ff2eedd09796dc255289a174f598d559a5a35b9d52bc6d7994cb6254d76137f40c79ff96bcb40f677a953eb097acd4b0c48ea9a861994d06e7f267364120a8b3b72c1d5dfd0fbb3e979477560c189c9d0befde747e6b570636ed21de6805f8026ef79561ee7dcb9ea156c2be6720199c3710962024d3118fc6f89d6e3b5eb2d2b914956c08b265d8666aecb7be9c85dbd12ce7d34bcebbafe06ea5d570ae586a037425ead72f043154b045e500d51e15445b044cbbb1fe98b5130a27198c968762ac7deff1e6bf1d4a35870b71b7dc7aed22c72cf8e245fd09fc3dea3ce772ff4d7937733b6167888f016b95157554682558679943ef34c0acc85c4bc31b0d86fe57d2a5ad14b180fcca7d2fe22400b7ff7ad9950bfc13348154fe49898ebe3e46f99016e340a0271349cfa9832c330f722e7aba417d890c8db4be35ac744cedb2515047e6e6add68f8bff37f776cefb087b0ab1f7b844377ca1bdaa9f30c8ff574ee3f1ec35594dd843be597da7be21341121e4874aaa24998943b4a34a4df96258ab8ec2d16cc137e60352d8f59b9ece68817de35d43a68010974594d41517399ac394a6f0c6116c4b3117e82dd48c8e42c02eccda95b2be7d913ce9fd11eefeb60de8b8c3f2d0f5a7a17cb5164691fb6b9a4beb18b08fb94ecbb1236ad66e1415e8aed650ea2857aae2bdaefa5db021422da19d232c7f104a7f28467367304c7f66efd675212947f46a61e2ac119738b9710007da8fcad1b9b23a80c53de842fa850219945d9d35cd4115e76b8e5acd77108d3a3fabec76f7d1db518332a6f7923f0c532d30179e28a7f1a0d1b98a2b78ca55f0c08a2dedf6af8995842eee3793f77ca1612908fb87f1dd27273152c0f75fd4289d5e7d4e75711e7a607ba366f88b3ad11d438903b0139db84ff5d1300c42e36edd22dea5d44b25481ef8ffcc777a6b70dfede7a847aca9254790491d12e5daf7463a2fee5f2e30685f7695c5e7c729a80d04cf3ee2ab7157eee0b5f2769d837eae7ff6a9648f413d2dba74ab0630757972e4e1270909753a3e7897a18242ed88262c4189314b48c997e0ab7ac4621388b55c4fe9526fc62aaa5b8474e6c0fa0319e015241722bfba3a76087355311f56d8d919e064b60994774689612a46b9cad0624c6f7d2e5fce1ed374f5d0f7922652c7c6ce806ea608519a5bce17f9def2b22a2daea4759bd7464d7987d04d081772fc0b84006eb0a63bd9afc569111bb00c5a2120903b290404b4975585dbb67c76907a59fe9ee363ba74a40869a0714da808ee44d96d6b484579688ceb2fb2e5bb2f62c3bcedbdaf77906865828bc949e1116486c10585db69decf41f7f107625a2beb708c0a592617fa0c75fca0d5f5a2ef039ff689a28e609e51bbb059dd57ffcae4fa3f97df8eec05040675c5f3c4a57365ce130dba01e5a1b2331fdbd9d72aab59a3d904b3af3ecee9b6e568df4265fcafb3979b6ee7d818784842c765995da3ae4a40d9d0d5f59e178847dd3c96b7c818c109e7f65b18424a1f25b3e98541ca9a8c51f9c93fc546d0ae1fe457917fcd10bf52226ba506db7045556c3a1ff012d46523e459830d613e0e908678a1a2d4ff07037ac3a46015cc948a31d6c24039edaf048a72e5ef233a4d544077d3ff1a083f762af73a025ab80280386426bf5aea7c85f52515c65f6b6cee93bf97199cb8fd0a89147335ae317e442651d53255831f73852adf2d0a0d1b684224f982183ad3434fd65669266b72510c35274239d0f82553e64a414032ae6496ff3bc441d7b6b2a547350b072e00abed4e9be000c6bcbbfb3d19380b64d658920d49421d2c1e630404841a6a3f0cb14019d0993afdda5fc898ef435bcb0e72dbcd6d28cfd7ba79862a47e74ffe9efc5359a408ce767f1f5c24dd6dba8e68e5b1b2848260d7ff24c88c637f1ac59140635b075ed2093372cb02e7f4421bfb5022235dd250d8ddc9265bd33840a4d7c7eeb6183f76fc7115557de371c062ee0cde042d460532b88f81761317c4646f9451d7af3d9128885b11d4e25bfd95c209a1499bdd8ccc0f540ef9ccfea39f0a5460b52b29e7cdab6b8990f62b4347d1d45ff5f148436fc42db94a80c7a33a4fd7fdb78a71913e094539d1925cf3ecff639fdc222c902c7ae365f4cc979fafd3200e29d2c57fcdbc311eea56ca5aec6b41e87d5416cbdc2dbb83e354639eb75cb2999ac7145d945c1c643af202ab11ed63e0c73b48b6f43e85f643b1460003fea597dfb6b1c25a375d335f7c5539183a1d7e06222531a81bcdf4968706f9865d5042d2daa926958b4a5d1a8e5d700d4784897992625be593d2e31ea0ada8e03d412817d761d185b911fa225caf4b183a9cd42a6f93581f66853741801b370378a35ffecdf3a6743dbb9d9ba8c8afc2c922b49cca76f17362fa77a589c84a9d02b445b85b225daff828e46e62dd7971521ffadf04852379377f188647a89965c5f82f6bd2551c71b1fbba8cd426afbf55b31dfa87d05c428d670c714a7632133d4a3d3f87c6fef6c67783b3e95685580b1de81e4edb059ddbba5b607d2aa3366cf7d6a3f4cb2cae03dbb2f6f528e5ea6e877a3c63fff6ead85bf98fe1894ae9ed5169d0c1590165c4882f35c3753dbaa20c0a314b4fb67df66da10afef09ade608de0ed998034f01d40f29e959c7bb624240c2e29a24a8c7d927547dcf978c19ed1bd5deb9cb9be09da593c9516a06513e7916d2b3f25abcafa9f18b1b42affee4c4dba162a4fe842c2761455cf6e8b1992ce7c70a37e461ca4b5761c9b388ea83835b7fa6183133292b7194d1ad58fb1ebe06d89fb71ea94c54aae4a3d0d7f617499ccfad8fd23820df7065a3bca2f2aef22f10ddbba8dc686f9aa576ca97f99b531922174ba124a8e455df92148b2611601e49531f3049565c426cab3eb049f85556bc3f8ff246506c473782c3cce3d43b603f283440126995d55abf404ecb6c6402c6270c2339a2969579afb03b2da4dae8269cf2956cc05b0336c53a87503e3caf112589c8656355a20283174dc1a8b4ff0e38907ae441e8f72d511210b876e63306731da9bc8037328d6e6a36f0c33888b8b7bba1dcf882907ea68b4aea87115f1f6f74961b878b34462846d8aee4d1f18cf61b09072637d9b7ac4925e39dd7e83744d504cd5f397b07bbf15320b9c75bbcd3f01becfae6e50c0bcd1a83a233d1a979cadfd7ba8d16fa20bd7eb9bbbf18b310d4d32efa07ee1b295930c7f09ba84c9f850c66b06e4145c0e998f7ddf1eb273bf539276420762f8db0544ff17b572ea2919d4d82e4f078b1096a25441edd4af52ba7838e346f86ebf5cbe01c7843468549eb40ed82fae03c94130b6b8294e946dda31a95502cbcfb86b3fed8a70d93c667e11d7b1dc32829ff9a9e1c4ac5bbcf3210954cfc98c1b0ab8981a17fcd121615c8359e374300c9149cd797262bc55966d3d04d807d09bc1fdc6de4a1dcd5c6f443bc870bfa2e5b4481eca847c5cc4306af57546f5aaa322bc9dba4272e3f2e099cff34dc36648261847eca16cae7a0aff8dfa8bc89de5eb00addd074ed87da8fa00792753e5b7a2f048a98309d613a57ad1a241fa8ae2d1624d8a16aa4aa95999c0186dcd12c99840e7d08e9fd61adb18a6e2407aa7594ba7928917a5c31239a4c4a180814597884cfbd76d07e4c384e0c38a18abfa64e76b18e902b36227b9e76d00a56796e0c4fcb884f9504605f0b7a59f3046dd47b535515627823673bcf6b1957f3ceed6c1d4e5d019fe9801fdf5a6ef95b86cc4ca892ca7ebecedf61a322d696e12d7d49b9942636b38981f4b0556a81c45637cc1ee7d56465853726eee49b3b30f2c70c892bdf92de6aca21d16af6e49e0df755049276a1a64bf63902cc633ffd94287da04bb5af74d9359b98c1ac637750c83e91c6f5a54645db75898b98d9c74a551786829951b2e6c7367df3a95aa7e204352c3833772af0ba23a05c5dd287a431330a18e0be5aaa924f234f4c65d1f86c0718f8e4a0a65483e7e13fb7bfe5c1d740cc3672cc851bd530fba8af52def73df2ad4bd837b3616a195b5523d2ea6a7a6f96a88d2b6350603f9aa19a2f883a079eab3e9f071fea41194ea30666b9817ef105777fe572d4a33fabe21ec397fc31886f69132b618aac47975edc6980c141a63ce7b960aef0306e0d5a8b65fd2632d25f4cef3d5dd4fd7e3488b9873918bb0a93cc944aeaf471ce8076a9cf14f7432cf61fc44839c0a1943a8d74bff53ca23360f5c7db4bbd04f26d84483f55fcb7e75e7272c1c3804927c3225859fa605afebc329902943f17d729971445e23846a5d205f3cbc04a743b97962445371368a65dc11924442ff75039252495556d20b48e03aec74240295c03171c266e6e0a359a77df75d7a86d6be8715ff2ab678ea4083734820999fc1de0ea7fe345bd559c71f3f74fd09b99077308effe0099a005848e3ea39461413193f4dfc90866bb692727e56edbb2e22650619ca8ff14008696ccf3ec9b2f47e6188ddce363141682a95d4dec39afd22fb3389847b6e1d68930def0ac1a6facde68127e89256f4c04f5313e9b43d6ea2d7b84d5f94d8906c1f15bfb8b1ac6d008faa49a5bc36a02f3432b070100355e03d2d792d221a6412c2c40ea6f16c7210cb09162119421d343c68df8b36821e8c3d8dd4c223559a45d895eaa3db3e3b219848cd9e2de9d22494c3a444b26bf1187e9da0a240c49f65943249aa0ffebaf10e6f7edc48c3f07f1bfbcc612521b70ca3d6edfc23b710abac0b59cf2c3d8f253a8db321b4ef20359a77f9bf4e4eb9a255bc2ad9eef46435b36a5c5d5c71796d004e1cb1ef96ce6e7c85c88402b4015aff0620de7b8d1e20932cd39c547fd36fab80cff44159638b8ea15b89cf54431f6bb5151ee30ee9a808e7bcb8e8bb9177dbd42b7238b3cec26af394d57ac50c8a27e9c0446139c876a9f774a0c4c36585d97219bf8d7e5bd741a89f51e38549dd9a3d141301d2b35628db1bcb8298885a00ada6dbd1fb279abd5c58fd7fc990dc81f175a3fd039783bdea6f207f2a3d759318014c17b480852eaf868d0cb554acdab3ea30904ebb0705cdf544554779afef399a9fb153a3f5f186ff84e9df60baa3055a604a215442ce6971edd07aff24e2b0ea9b8bb23a7b8ad85901c9911730b94d181f69f29aa551a4725ab95e7590c641aebbf569a031af08770791044c8476ac80a5a4da8c5eeb5285c3c3d29e435f64a40770c9172f35ad954ac035105d7b6748e06430c83b304978edf8eb20f09e4c95dec0cb0f30a64ebbe7da708e2f0f952cac078bba59c44225723220bcc920dfef47fcb10239ab67bfd04cbd354ac4367ad9c6286b8f003ca2f74516818a9bdc3a57464e5eec52a5472ba4c1e22e809017ba25460cf0196e2bae08fa0a6e232600b419c3c8ca9afbda29e5492b4695d127b7013c988218a7c7e2819505ccd18dc695a93e18df72256728db554f7700f5565202095f7c1fa0d0be9f9fbae36380d447e20988f95d05c2253f0772370ae9214094112a63c76345d4c6a217b3650c878a1abf8049eda59bc4de1cd42aec4a5c9eb4432bd79fcfab502100aa93376c5bcb7e2ed92acc15eda6bf00608333ce0bcd8ba7d570e39bbfd59662b327026f72060183c21b8eb871618cd27bb35418a3e9a2852de87ec698c3241b70e64bfea3b29c5dd606c1d82eb4f20edfee881926d33c4e059322d196d624cbd6386849f032c341ddde7552dfb36adc54f96305be91cb487474867587ca4fde0b3a886b5e179d0698ba8cdcf2366809ba95a493561d348565a5ab24fce742d783be86c6b4648f88189ef05b6838e897e33d46d9e91bc05eb4d21055415fd583917e64aa4885411143c7fd23e131753b312c4da3dcb6a30548e3215af19342c23e880eb9bafc667d5b6e6d687b54ffe310b1918d8103cacadd9b482e576de5a2f8eab456619c802b1510b0e000c0c673ff8e6d2f8123b752fbd89bb427dd1fbfe1fe2155369ce313fd92c513ded4fe184ca9f69c44985f8c9e4c98346985511bbe8c1dd8f1563ba7727baa05352a32f682d011cd44d16e148ed8d5c5ce93cab3e275797452f336fd2068626b4ea92eab176609feb3fba2ae28f47a23f450b8178267d19cec5d30763d2388eccf0e78d4d6f7fbe6a349dd585f9b836e3a23ca43867ece0bcbca4ea455ab1571cfa088c2f6abe566d7137baa5cb86b6299cae17438a60a6d520d63f3c1d96862b83ff24003e6ac46f88e21cae54d96e407e28db5e604f6f1bc25698a84a2e03e2b91c0e514807be7b0a96c2cf9718e879d82afda1bbf146301eda3b71bc4f564531753eab5edea56866eb6a6efd0fc2e5fc28828b3a9d28eeb3ecae6eb1e50add4aa9c545f2d9cea8f76c1189e765ea0552cb1c052094cff4236adeff5d455b64cfe611e1116e1348404a66521fb333912d45f16af055b4887b315d0f6ddd3f4dac21cca5e76a8b549bc96f843ff1fb8b0641b04ea1d2a7a9f48c40a6c5230568b8c6b19865d0177b7e3b76a2c95f700bd872430a1b2593690d191aa2f879d1d690f746414f79780c95c7ea0b455a4afdbc21db1e3329c6695fa74f1ef32612c19389be5652eb0066b0d1c757a7e813c7d94096442bcada967bb88e4e248eaa595a1bb04cde1566bcd59a877a88f3ca86461576fb15f569acf80e25c257383d1c84004fb82bf4a5589f0c82e4c8cf09ba93985554fd6ff3199e63b772e7c72ba623aaeb809f0fd7cf75f4059c75a42a2552ff95e6320be787520b019a72f2379d33116437fd631226e6ce4a92a2b1c5f99cd0f344422221a93ebad45d5f6fb8e7e0b097ea10fe049440f29eedb32b9443506b73e14ea808730b68ee88016bc2876c9e57560caa8f7726e76c0dd49549f5c8782c000bbe9fc8b0fac4c7db7c8d80da8993019e51b38f970832c57151717c8fe8d4c48eb36dcc64474bd5a572133a3c1d803f8c7a3f8eb37ff485e9b897940f3009bd711513fa1b2a879d2779f2cdf30ec1cda599dc8de6467d68bceec4bf39c47a821d88de25e2a8485ce9ab299685176f9662f27721436e2868d76fc4eaade23af18c853ad7f48a4bbb606cdff125ffd5018db64afd05a04aea439212806454af4011012a2a7bbda9c0881a3792e61d17e4e84447339a46ed3baf76d7f1dc37e591574611a9bc7716bfa5059dfed08fad515ea960ca20466e87a027483440df34f6a5089b17efd7dd6fcd6afbaf5225262cb91fdbb6312a0517960c7f87f2915c327dc6d76f69bcdd74d77d6ed62ac998a99b5cb64fb1efc42f831f0ea189fd25d0456cdfd9449497f292a2947a83a85236320383fd725396a889ac11ab96bd1ba3e118cd5160c52544c2b8a826757387561f2a7a511d37f18f1442f4d1db8ac4262dc94e4253f4b7f1593c437706ffcd19542941a2d8e66780a4c6e2a01a28bf169403b9b10f92c9206c8a1f13ca7b4cb2b910b623e368a1ab0c408161c043a359311cdd57cd0c49dcb42c2bcb09427273335a1016ad05d207984426a5d9d26ae0996f5e3d0f74101b9d840752ef79cc19b5f19b60a4b6c52b3a99e33d2e98767472035f4233d9f36896d758c68e7ae5fd6710b719f555a44d056e0d78980f61b1eb298a1d2b95c40995340cced676b45baf7f8c328737fcfd05984b7f93b04c67317a0a52d4730254e46a3e76665d702d997a5452032abf6b483a5a3cefeb5426fd7029849e29e356ab6d7e060ec54248eb9603bdfdfaf3debdb91a02c982ae31ca216703630c22365b381ef0cf0b1cf4a2d238e50941423ce4e066e936e928456338064d19e936e5b9de92e9dea9ad526ca3283bd0c0d4359087821ddde9526ad8aa97beaf27bb7a19682510d8980c53f1daaca9eac474ad8221e4d0225b2d7e7dcb49e86d9938f87b669139b1fdcfd34cb23cacd57bc56179da058e4f2ca4efa5da6efbed9591517e803fb1d267430083cde9ca43d1e767d94af11b0ee3ac65eef0b3236de61d288e98c72cfedea79b17fd0767a640b9e996d855b0685e6a4eb0af1c3468b56ec186e1d291349a01db034c9aa44b8f65e438b87ce01f8221aa8b569ea450771382cac987629559569dfd15a262ca5599b97e0e4c64d0d3e7e7a309d0963279bffed18ae0a305dd3225a0e81ca5ab7942377763ddc5aff47274d6e7303bac7299cd32fe21e8438bb318c0940cb8e308930667cdebc06f6a0f45c40e0c15ff2305cdfa1ff832750be8b6400266b5567e3b4511dc794813f2c66f802cdbb4d9896709d45b132851b7fa347c4f8a8bfc2dae8e3cb0160275d0c11b9287730589fa439c2d74edbdd15992cb3c8ed7638a09b62c4b52548acaa2c0a257edfea6b409bdef01cb9249b14eb6348867a464783b2af81809d7d45d5533267347354f096d9f45297ce6119e8df7b9a8bead15ed1133da284000b160e635fd8e6f952d963fca14893b47fa830b9ee3fe02b9474455f834c8485c20a643759cc3fe73596dfa9adc749348f765bfd4f3aeb3310f5e89b8750ca3e98eecb57a57682a41eaef9c871691bf1dff9c17db6b764779b42b4eeec09b5f0d81e893bf7f31df02b02a2b9cc3f6e3f6bec8135f1649f21ceae302aab0a7aae04e154d00cca4cb6dccfd9d117fe3b774214171067d95f1f4a0e1f81affbb67ade2f820e6a8e3aa70c6be9579fe395dd8a0c8aaac8f3c656e58ea521c00e791812f5426ee8e891657ac4a9391a07202f43f5158ccb59d6f1b95ced85f89e0375a04094598f8238c977e638c3239a494a173ee48c5774c1b7f08e7cb3e65c746705def7188e69b0497fbddae5efbee3ee8508e7e3d30175dd594f082305ba3a1c0a20aadb3a506a1fc8d2d2b8a7d0bb9c7d1ced31fa74d218847a8a1033274ede4a5593977a29e3a6fd2e1abaa794ac7bb357640a059cf860aeeeadb3317f644a1fbaa6d8b86945378b3f6a7552c4124443371f01151aa8d4ed9e51f91e3722963bee312b1d8140c067e2cc7304b67d9d9066db95e59d49d6af47c584ad7056c0d278f6695798f5afe564a7814e55048ec62a58c69af6205441302477127018e32f4515210e59abf0a8ae3cf7ba752042e431feaf4cef7733303b14c489a97c487eeb938c7d67d36115536624b8b0c73d90a4bac8f0ac8f32fe09bb18ac5e8a4405d62b7f3abc9dd5fe5cba0a5287804bae4274e5c11612c73f7090bc7b8796fe4319e4da343d5c09eb68aadf5c7a4cb15deb992821cf094314e1bafa69426de9ad4e9a9263a6d5b3b7c87549f8a666120e97fcc0af42dd83f2fe2fdbc1a6d7ecdfb4280e98d5277b0a69a28c3172e8adb01c6450de5c51e75a94cf3997e088e1f50c139bf602fad1108ee91d21a91358e72c154eb981d5eb8823a521a70332840dee152c0afe8abc37c298daa80cf542bfef749f9d8578574c016f24fa740726438319359f84a151cb4acac2539e99794590a3667ad22a9f8e295a3c818024a51d74e37f80eb71429c1c3d8b64a127dbae01c2bb53a704419deae5750eb111dec4cc8e4a9ecb3d7272d42e84c041d752acaf5525da440e8729b281380d87ea303328970950cba9569ffa6a81eff43f1f695256185edda2341b1adbfa04c125d063294659e62af094859bb92e59c6b3ef3eee0550c5f8dd3c274607a0c826a45aa465cf3098b28460eeb54584704a3e5a25a724262e480dd51aa9de8efe47867fffca5f4265e6cee2892b8064100eba6d8c9066b8b8cff902a397bd6901eb7d5be0412ffc03ab47d758eba1f4e25156432d3df1c5e9155eb57321cdc6b1fde6a3633a7a494c5d353af559cd98eb060314afa51a8a85ef2ba8fd20a9718f3363e97d6d054bf1f7f2beedb238dcb1167107cb4f4667d1312a61b216fced673bc225ec94d9f571e896f4fad7eadc4a7af95ca570b18f97f7fffbbe0bec8c87ece1090438a5f29e778fd1d5706b6e51c3a0c57b777c48ac0370623cd5924a512e39359981139247e9dcb7dc12e867965ce58b9ee259f5be9c82828068bdfad2d251f008150c57e7c14b157c165cff91f1180528adf8b40177cf54a70761ea5eb7759c84289ff09bb470e5184bf01300a7c79548f962b0822d3c777e896943e64f9bff632e63ed0d28c08c54a3c893e03c85608b4f7ee0919a114fa53682f834e1f803ae38025ff9c62ea185be46fa26be18d82e80059e9d45b543aed425c90ddca82e76731a6288905ecb14494cee8219d9d2388acfdd5e3be1e17e73c96c998a68744f4169f17031b2039bce73a0542beb9b08408e0e0d365b1dc49b19a97cf578a6e8b4bbaad5e48d42ca0936f892ee5b2efc0330940b6d50974081953c4694c916866b2aecf37c63106f744478587252b0f1598aca0814551bf090c07318df106f25bf1fe450bb2666a01a62302aecf652c088862d45417627c276690bd2883564a1f3cc6162e92954960e0308347dfaa9112e53c1f137bd1dd3aae41f87c7bc71b80815b6b731e71b568453af2225ef9dbd2c81aa78cd745a35875171b747960e073456b1501bb22a58835511ab486c760a0cce4e54ca8fc5bca03d127b25a8d81fe0471e122e8db478b3427a676b06304ae7bfa7dcaa4f24a7a993c30a32238158a71795493b4b465379bd5976b2d20367fab09ca1744e3c54877dba6aca81501e5a2c6c92d0163a4b451ae1c3a0bf60673f11b98417a7949d474c47faa4821122088a3dfbbb6b14acdc7d8c2b86116802199e3ca01a1d8a4e2e5843e27d9f838963ba39cb4fee78ba366781a885619fd23792777109d2b4b73326f5eada5f3ee52011999ad723395ecde593c56e20f38bd87c4c9e33dc7072691e0fb492e0ac921cb0d4189758c2d748b269df4d93e9dce6463532afc89d700d73a3eee2f149cd7cb91a8569aa577cad636b0c5c5df4a38dce8c052435ff2175df3b5baebf534167fd30bdbd82fabf1b4eef53ad4ac5a8d2846b664d94c74afe89d1bb6bcb4dfca859c2e5f532bd764dd7a15bc60470a34e5fa85d13696c68dd0b5b630b5e1e46f112bfae3a34e22cf2721bc03829a8b59824aa8edb8169c2592d2a0c7f37cf44402cd915ce420237bb0c309d20cc8f117515a2ba8619c10b12d20326b704b8c9a83b6bd43d922e70a5279395c114b1a148cc83bb4c77f9964aae3fefdfdbf9f23616e734f9c89350ea0f16d71d8575f5a732bd2d5fb7e60ae6bea3f2becae9f971f8b04a4ed5a5d01f55e274bc28bbf831754dbb39e11e64c97e9cd3eb21aabd6556d516c74323a7232c8d9cfbe8c0529ed264b7a2f5e024da78150766ff42a1d3792f7d27d64c87318143e9a976dbc429ecbde65c344f25669280cd5cf6edd1601c815f9a1a02bdd7143282c51f2907b1978ce48bf780afd39246286741e27b1c41179b0e7b1e2910eb10fdd4b0088c8980ffaaa7b1815a3737622d1cc5dd403ffe8c8442bb3d46f465999b7613047987ea0d9c659da80104ca0b9cf1573fb0ad49e478bc2fac48924719dd74575c82938408cfe36e2f35a219ba7c91492741c281367c31b3947b3b052ceeaf42ece67f18021b9c3afa2fa6e350be977d6fac0bde0463dcaaed9c2a7b3abb3ec5eb1dafc3a95f2e91987801dedfe9f53b3201edbe9eec065c0441ac557c2f7ce555bd85c7554751c5b5abc3e779bba8288036aaea6d4f33eb2a62be7306b069c647796924f74cd0e7b1ea2a6e7b982348aeb908a298a8c7e3d8f51a439b3a8c6cc8ae9df34578bd00327dc1505a269251aa4884e6add11998897e20e5f454473b3368759eecd1691be474bbee3b74cfa72ac9215f34414ac25da7c0721a99ce4e1288ba7c7ce8137e0b555eb1f06281d53b05848acddbcac799ba5256ac112acf076465aef5a7cf9e668b489b1c5b9862513175d063689769586fdff24b17373c6128aac8e5673644f540f165ec303e00e1e9e901d6f3881918717368a0d69c0a27d9b0904a2f1f20b69686d3cf1f130e4aaf4c737e98eb509410088acd75db409f6f09c9a593eff90b35cdbe7bf3d71b16764959924bf63e0eadb372b84bbe1288d7a34da9cd7bdab8204ed1e8a5796973f46cdb8591ef6c9a9947cff66fe94e03d1b852c5a62a516858a3f55cd102c49c65581efbf2d0ec0f3d9dfc43ac8cd091fe482e33fa9f191f07c27cccb7aa0b810ad7679a7bbe66b074d01d1002c6a744aeee9abab7d478c3677b2d7a866bb9e064e6af7b3c50320a11ea3470a4a5a05569312e48d77cacc18e3eec2a7523487d55b2806531214dce09bf5b52355bcde1520ba24120deddfcce2498f430ada40a25b66f15f6f3a5c185defed447827d7bce72d4ec4322c00dcf1c6bb704a363bdab66dbc32f50f714b3f949a1f818c889ba74a1715b2781f167b136ca966fdeba57050767c737c55a8550651f734cb00d79dc27e2fffb33466500a461744fd77351651dc6870d0c58645ece6f653df842f3e7986155c5117051f05dff98204f7177b75428b6b9a03e49bac315287cdeaa3decaac279d44d1728692689731e5ce64ac3965e2b044ed78043289aa397c0816ad6b5cf64752a4d8f2ee2934f98aba157ca1032972d79427d0ca811191a748a9cda174631343c57107195bb34d3aba1333698723e98ffa7dc8c4dc834ab794550eb4c1aaf0f4aaee1268fc99701f2f521f4d44a5eb8734e77a62aff192cccb9ee2f69c798822477ef746e88c6fc12dd6f390002f75e898cae79e25bd6334d8c7e12d0c0e5500d6654bb83ad9868d6e106c0c79b8a4e3972763751272af9ce02aa05be90920dabce0282afbd3cdff2e1bc1da4a2b8926349c8713d0314f6223724abc94927ae0cf7ff7e8ceea46e2a62fc8ee4ea6bbb9ee2e9dcef09b3785dc987acec122868863a037d6bf6e0a3f0cae088a726510bcf189777c58d8fe4d891e54bc7e4f7b589708ade5d39157e8abea1a9ddaca0c7cc466a90d3479678b50141a308c960c8e68cee19930cbc09512fb1c5bb9df43d8505358e4ebf7b8fc373cc6d8bf1732b689749f1e04403dce313ed9d62e893ab1754c0d32bfbdab219d09113c78eb187bd05d306997b44d78ce0f23110afc2280687ce8b5c863f645e99118eee88b4bc36d6902ed866103cbcadff21b3d4ee43c32690dcb269f68fbabba20cae114c9924c4c67b700adabd90b0680b2f9dce4b4322dfa1b4abdd8d214e74c0f0789cf75ffdc4c155826e1e967adc2e0292c8ac462c5a0c862fdbced4020bf1fe4b6e79536cbf7b7af6435539423fc1c9784932a2e6e6156af5b2657ea086d80543d048c9da05ab52a0b5348a69085d8ebb2e1ab836adfd5ea80b345764574dfcf70c9ee7f79ab88ab6cd7f441c1fb514a54d21c9411376d932cab721088b80c789a10602267c01d8004380a23e5d42df61eef07491377d0ded2643b2db8fa45a3c202fe1a136f570ccadb11db3fb9aa2337b55cb92f2144d1104f12a0bd971975d654c25c4eca575b49d64c526f96b6db802484b46c792e10399f8e7b74560a97f689e2b08f9fbc08a2e03966a0aa3b309c6afdf8fe4433e65c8ff3a9586f7bb37ba585f6a3209892337dd3d8c50adaad0ebe2a05936bbec65a59d1354500050fe804eb75d38b8a8ff08ad0be085abe1b1d84ae57dc8cce8fe9636129b851cb98e18828f096d8cdc0dc20232cf58111c144ce52913f9d51d94eab12071712546cdbfebc16f6a0d4619d5cb1c75700020705699bb78833a4149bd45386e5878a1bdaaf6f730844b92af54219f05e349f12cd3236b459c5bcebb421e70992badb191319f2b39b443cdb6ce901b185ab2ea44ae9d1cb004a7ebe5e6fa093b0b55d3d64724702a39074708ca3d47ef296e4a062265d28dcd1e959cba9a332633a637ebc371d2549bd5db44f37dc64dfc996e5e07a796be517d8261034517442ce351dca7e46afae10b8bb6d7ec716a6ee6c4816725e0873d739d5f7e18e8c174c2d6320f54e83f911c4f097b28758e84a74ac3e0ed6abb3e042bd76dda2fdeacc3549ab0c056bfb916809be99ee6125a1131bcc2e3e2307e89ffbded899861053bb3c59b3da088c7159161d71b84008461bfa9b734e5f1a1070fed9b2f7af037f48c8a95b2f3e0eed31bf6422406c0e49b90e698d1eb726f9c54f5db375e1e6a969e38184c39af41005d4a9a9a20f335836c57ed1566dde18ac16139d8e9f1965ca0cf9a4ed76f63882170d2060dd52a82ca856432e76f94c57db2946f15832a1a003f79ab2dd3a78c8f254ddec3ce91fbe263b27050b636f3c333e28ef59ae6219b74f3c6613a3b0b0efc119041f7eb7fd839e88b3d9c1867e932e2e5d57104a7d4c4193e388fa4d7025a60afa0788fd472a49f939f1f93ce3144760fa25aabef96bb4fdcaff955648239a3f989545444d1be86c5dfbf55bbaa20cdb8407ecc35d7604a23623bc52d97f80cbcbf8492dcbe9536020ce3846e58e4274f6cde5d6899361c392a5fd0c77415cd8cae6ec4aa1b556e743a522265e137cd5806ebf557d65d0a0182878a7404bdec25401c41de018e923b6b71e52c23c6edd230f296253e69a7f3d10dbbbf0d789b2584684abf13587fe5eacb80c536226927a25293298b31c44683ab5a9567c6a24219423e8e84e149d95b3445633456c8cfa01292478b60c4e0299ea80fba3433d6dad33d02c5516bcdbbc871aef0df596aa26cff1167c5772055dfa29e5a3e6107836f8d83403d8f10e1b5918d76fe8e464ee78c847c43461eb48817718ad8a11b37a0971f7d07ecb3f2d33b9a76e356e55d9808a1e7854cb6de3690d532ab0db83707374099c677b206299b09583e79c4d9058bc0b7c1447c5c6debb816e05f97f2380811f363b0f2bdeb05df7452c6ad6c2d9ea907754964767fd9dac440e1d8f499f844fe4aa830d51b16ce6e371a15f50d882b1c7c809fdf7f0a085c3652e71369bf4342616f1f50cbc8c0b774e66746203826388cc2eaa6d6d1df8687faff11e2e27c9e59825a26fe51d7b84dfb38a09feddac7eb616f41b4837ef133b867aebd792ca646aaf3d6d4bc0dde799d9f58a4b362ec5dfdce15cbb77a396e782200c912495cf80a4f3fdf5ae7949bc88cd11c5537026e1e6381f4aa9268d4a82ee3c861da27215693103cf683b9c7a62d025def38b5865c9164c9b632ff96d874c6e36caa3e28cf27b8227eefcf7e53675525d40758f2d306ee582013ac0a7687711ed18f5e604f4e9b06361671b498f7879a1af93ad6b9830da8f01321fb672361d3e520a1764ef7e3078cd75ce555dc27f559d5fa741cad8d3ebcab4c2edddfd8d7767b5c76e57f5a364ea5140b4b5eed6ec381c5c1bae8d15fa533fe94f851fb6c0b16e398c998c624a8666a00d614ef934f9669a5f56b53ff8fd8b825aba35bb1bf21e7abd85b4617f59ec931ac250614e5553501737b73a1c971cd8bd76adbf07e485cd92a8cb58bb8c2f273be82a99d6ed7697c11d58905ca8438fe4efd608e5e40e1e86e477edc0b93bd003d51b349dd25a26702e242d8ab9ec72a010f8cc3c4cb3d618914a0a4a591a69ea02e17f2fae8e0d83f873239d0cb095a95ab53f3178fa788141a276eefc6306cacc11126606c9e91117fd9cdc330d61f903e7c00237f9b25bd6b1ca1e50ec9c9050ed0923db1f65e884042881fa88349baa10c9608cc33adcc8937bc229a79ec240434df1311184be1b74fa859522a52020367afcb0300766307fbfea4cd609afd19a9544573c4bac34d925d961c827d1f2d7d12ba4c5514f405e7d6984b0826d5093a551ed1a61d89323babc9c5a2daddc3a96b7fc66dc25d08edaa3fe96b9517127c3278ae8b57e3a4a9407f0ffa69b91e94d143a63425e2e9b4d8381d9b182a9fa8769772e430ae37892b47e32930e5ef23be4ebf53e484d55a4d4e4c89e7be5bde35ae7bcbde9d73fd74476a9b60886d442dbb647a4e18bde5f98b9504ec5346f36135468746f585d39ac5cc9bdf4ea72238cded7059e77d1ee7cd33ea6ccfac32985d0236cc933d542491f3546ae4b8dd83bb56b7157d7361566f6bc0605e587fd1df27c4938be164463724d805ee1c5222f33bad520262104634d6faa1400a19cd30ebb1d6ba0691dee18252276611c5aeba47576fa91734369e7224cc11cc4cc9c4aecfdf9a6ad6f5523f9c403c1060b7bbda6363928164321397971885f5d3b727af97254aa2e315e6db28aa382c5181f3b005d8b7e95c55eebbafad4d10a878e8bf8541f728f6c6aac7ba666cfbdeda4934b633aca9a1d8846b553bbb5d83af5964bd7525fb85ec250645cb8b576b14ba986ef7affb470a04829cbfd818db156750672f6bae5be896daf7d43a92fdd9ed6415a4e31e43e0c0de97e6034e2b404c5bfa0f7762a68e279c158dc0da38d31b45b3e4ff5d518d18a674ea9a7e1af2134ab9420ec05604e66501ea997a40e2e5fe55048237c27d8b93b9563a42ebcc1ab92f9dba0d9d5e8c5b13ca3e589aeab58840389e26323725cec61d865b8722545d692c818765dd678adc828324faf4b7945360ea571df887921b602adf86a45056156b03a925b67e11f129d1dc175606052e5ed9b452fca5220d96a13d5b0c3113431b9912db741e75c74216c55d36228f2b0621b2126dedc873db5e69cb099e8e3af750e60c6a431d03ecb61baa691c76cefe4bfb829eadc51f0aa458b36b5f732346afeb1a89c5c3ccc793690da617fa3223752a1094e06a28af5e4c4da20d28e91c040de4de378958e6494453b6f81ee8dc375f2590b25f46a39ada0af5b3a440c303feac99c28c65e600464ca3ff28ca36b936dd9b247eabcb2d9fb4146c284bf3748bac41ae9a236b0a78a85a847095b9e1551739d2deb2b8abf9157098f5eb929cf830a8bf8178333a87e5c2064651589874098318ea2820a4d08c01cc11e01b24352e1fd29a24ce7dc10c447bf22ea1bf3f503786e0d4f8ad1ffed4cc32aabf05a6c022c633b9e54adab70ad22a8ea1c3e85375db42ad3876b1e31352dcc967a2a4a130541a881540ab730b62cc76ec4893dbfae42ba250c9c558fac10340c3998e069aa9335f959678e9842a0a653c1c8d4aaba682c649309240e06239573d0fa3d953e756c9ba4b550d8ece4c346a1455fd5969d1279619478df5591b18ad0127af9a01068c8ff35eacf96ce7a11e2fc238ad43b13d4038dfa75cd4fc063ebfd85e000f68f37e178953435f650f98d7678e944cc0ad1e759c1af0dc769633c77caf5d0d0113785c10719786bb02358115d311819b640509d0f56f5d85ed2615f1c481f2ff7757e6b6521cf6d97763ca9f94165cfea0f3d37a3ee4f269b4584af6900b13de120976c891fb9e351f9b81fa2d7142821ff1e10fbb8c5ddfc46010208ffc454717d0a0077b692ed99201032bd0a9f89ce09599d01217d0876899ec5b4d0d082e7fdd390aa9fcb5658536af082120a0c3abb34d590c1193476d58d4927ac44be0e954049e74e672d04332f069677ee0f6e472ee6fbdb827a96dc046cd19f72dca467f0017af77eacad2cd92e939ff1b46d6a34f65c793f48ee2b00210229f099a4962446199b648441f534eac1d4db17c2269c7a8d4ce27ece6c0e191efc2cb0c37909872437e467cf8c03a5b181edb484aae84c373339bb44099f0e0ad3dcb5a72c05317d7974217c0c06c1b9fbe0705a5eb92b2dc39e95c47a6ec70bc03c30941c98f7749363c8dac6c1886730b3de4ecccad4da45de0771b091e69d00ba091103c4ecc205fd04b306e70ba0a47d393de3c7ec326ee864e70df664b2e947cb1abcea7e8f84a434d49659b5f4be4ca637ad053ca31901178225b17c9496b9d9ab77c1308bf78a68e18c2aa1eccb41a77ac623259aaf7fe6f30d8dbefdf41dd7501230c72192c23ef54b1a598199dd94c823b89413987a89c95b36f9dc99f2ba7a777512f57666d426edd41b7637f1f3a5047382b2a26db7989a377e03da792222d24fbbbcf70f65e63d69ee75680c7d80ea6492cc8e6d4049f04842ce10230a90bac99058ae038a85ec5460c00c24249ea053163cf18f4b1b92b45fb9041c3b6bcc7110f0b9c05740b355904b590bda05be931574434de538ae97f8147eaa9c8d9a68cc261ad36bec2c0d7f434367848f53058ffa60eab11ac1c683445ae2d1b4b3fa5850b05b03e0d2ca6b53e66ece4ec33a1c637d6db5ba55e4bd27f9e8dd8c1c632a51605df940bf3411e6f8fdb7c727741fc1ff0ab7dfd95fb3623807f9ae767f946e60b979b1a6280d217d355d066f5a1352af83a5557ac85ac019b9abab7e9e1bbd1e14b7add2742fd3f86580d9fdd67a88917e201dc377d331f6a299c6007b5c14a4231cd4507fb80c22764bb9286cebb2ffc8263a0eadcec6701af53cfe3857bf298b73928027650bf56fe335bf5eea5f7c4e9883810ba77112b137a04941195325584beee62e0ed080563d00c534909a95fa6077ed1b003ca43111de72f209c94ca0f75ebae42472f44ab6be451dbbde8bff62c1ff506556a8158a528a89ad2f21cdc707f88edb0dde5c1dfad7fe5194168ad4f49500a2776154335cbb2c9c8bb4d89215e1f5db35da4f609dbc78d54acb6e8219c72125801b36ebe7eb1713b1d1be905e534fb4e69eb57c4576230e5b14bd749b90e571b1dc42c25728ca39e9bbded4bf5d25e2a02a24a2127bb5b89e807fa481b295e05ee27c3bf0e615a9de2e44dd9f36fe4965dc63f95d6127be4c34d5e6a67385344b277a134269c525c40b1f68bb675abea57064429212f81d7fe34babbb06d7cfff93a5d1a40c5fb8d2801fea64032cfa8616b3c3856260116efbe2b39183b52b2620b50ab87738624d132aa1517664c844ea40e8f476c856f319e4b618c25d641987332bb6dd072b78fd4db0aae7b7d970b89849ad04e1afc51ce91c7b7e5cff38d6b04387a0a979eadc954f80c481472e22cf3198f599c215dddf327c8dbe90f47d1623b5736ba8ac5da9d9b764e6b30eba25b4a2c5e02a7b308869c50886cffe342a4058fd1b6a618006bc99d5dd332a9165d2e431fe188bfc2a0cf7edce1c368502f9881503174b230dd4b68114c0772f4e3730d548bae870314a5911e77ff0c823e4aecde1c260ce45611cfa1ba2b88509a8d5b670f48b869b3dee8d6c9e992985cdd76279744064240a46ca6c53c92634b3bf0b890e6ebf8528e9e0732b0d818361f05ef83106f5d511b1bf8488d246f21cd6e48569c7b7ee59892cd9c329d63e6468e3d6113caf70f46bb4121f6b03a83d93682c1a242e51a6af49c0ce2774f38fb4cd65f88a7099949cb44c3014163fb94afcb894eebf937721c69f363b970c439b603abaaa00e20ff70d4ca7d7ce40cd5b30203b76a2aa207b349cc109aceddb9c3115e84dfc8c64482d26c60af1588434f032feaf319b94ed5de72fe11137d8fced63904fae4e98761488eee52f08e6b28e8a1c821c6a7c55e9e1f4c9b74056ed58d39332b56ceaddf4c4ee62f9159aa3ef33ce6e9583d5bcfd541c8966c2c04222f808d9d8d82899b3abc0b6fa05e944c0d7c656c199f537aa6d8de1d94bf64711168f5b25fbe963eeb10f8de7b38c06f74e50461c1d0226d04f4f9273c4c20753960f0fab420854423216a7537ce657d6b17b52561cf2061158a065e29936e7af7cba4aabec58ed6abbbc27720d49d3d68b61aef7dafb7992b180ec9051ebcb934975248531fb9db54b589264ed0499ccd2e7703fc041f6f9cc5bcae77b4a3a94d59259acacbc97514338688e69a13d6266a0660d0205eda435a700b8d7ce474548f5df6edf361ed13e19daea781fe0adc57fc425ba43df6b17d55518919704029dd3b74a7ae3f5e3a58966e392a23e612d67632747424644801f73d628ef94267c626854625e1834416a54a8c87741170dddbde71319f15ea1e7d7d1be74950a5538498f2fea29164d491b99a8ddb6b9e6dd40b3a997fe888e726cf1a72c53d525066bdb534f930f51c747514fcc4d37da21960bafad8d2af9c04c65988aff00ff1dc0461da26832ec1c88500c2763d14507bacf0419b930d622ceff5381bb3daf121bd652945fe96c21ddca506ef6a28a324d2d906322360639ec1238bba19fa1ef24bc9c5ec8ff07377ed2d86c4c5606420e65764eaf4792818ae59f8e09c05f1ffba4c701bd3275b72e25d4f7f4dca1d082e5259aa99a83581731b7a71a476f3ffd84fdddedafe9dca38b7d5dce71f2c28da84a1e29e4eb373f0dcfb41c879906d8deaf1e7c8934e94cf7d16bd7b113c9e224778c744c2f34f3fb1d0ac3496cafe1a4d6931629e1f223073bf602f4c325728103b3f91705e3eb0ad4df8ac44d3c2325791946d04ad29946268ad2f57ed9997c7b7fb3292f850a53d6841ddd43bf314c6d905f9850a2f6bd58f70947e725ff00280a58522fdc7f7c4c9c3a8c69f9194d0f095a0aac94e02a206e3475b65b08a472180f1a7d6e65c0da03c00dd2d56ae262af06bb7f46efe4086dee3f35e59bfa09b7370a60cdb1a4ba582b73902254c187f1a6be6097ef2b519c4e00d6bcdb1dde3d9db49972384ff411e7ee63c6a6fe8d0b7240dddf6e6c25a7bc05904d0dcdcd5ce7a643ad39dcbc252342e8c309744327789a20793f48a53a87d8773238974bfb7d8656c4761c0df0d4ca0ba649aac465d5d87ec59ec3014c9e62eb7ad09eff55c8c97c89b5b06f750ad495ad47d02705c9bd77f89f6c7ac1b6bbab3c4a5ac5637b114883c0f737304ed8e2b54e2bfe2f9137bab5133508c41e53c6c587f15e869379021acc6a3a192006522ec168dbf5e8653414f8ba209016a7f3ba944b2a0ad5c2a267d5de50140463d3add0b998797da3a75338b6b1d5cc4b7e2af3e66c1e7355ec708eb478972464815a26365c8864fe031d1dcc5a452a3aa93ae8549ab20b219afa890f2f528d87f81e1ddb2dd07249b27971132d777bfaacb05959ed2bc01322746ee67cf79489908c492fbceae2b8696685174c103d56852c688b6fbd12be73801c55d1c24c766d6e1ea42108b098032d89e24a5b8536dae33cf19c1edcc9afd5b926ecfc2c1401a5a6ea5282ac4bd1d9abeb9091533dd87bc3ff1889ebdf8308016fc30add04bf726f56c1a21d09279a78e82a26bd981f83f2caca5f4a55e313e55834a9de7845a03f088e44275c356096d6be1ffaec6e8d3ef670a243b834f3a12d07ea1a0853e1f26883e6bbf63177ebd6c049fd2effde2ae051ae1b06e207dc4bb27873355757a5faa1e92eca354229a515a75544739bfb6b92e891507f017a455a1232d88d67f4a5edbd88f7fe1f13ecc5265e5f016c9b8867aae30c4300357cd0dd848df7181811e1e23539b4269d2e7e03a073e0514a1a3cc8ddca59a6112e737e79615ebc05bc11112c54b56b6da5c3799817db7db1c397d06a1649db72bc4069c35ff82e9f3683d1fd838be36054b0280582d53c07735dadf720a8f1aa7539bc1eccd03812185287f14b85dba6cd5ca09fa3e153cff04fe762d659f043a34206ce5147f7fbc7e15169c77bba81b4fe2c851120da97165c483e3f73554888b65d6c2f478453e6f1e061201d2ad8d412bf98e0c98216789d90f3788317c39b56dc22930ba440dd3b60834fad54f49785a83b80327de71b5f383962b26540a2821f64c3b72ed6ece47629f709955663af4ea6266c98629e4d1cc8b6918e1021c658bd310118d073b371b7c9234879d65d706783cb34afebe28aaccef95574f021118079f932c2fe44a6e955cf90101ef281a831c87ddfc70359931d230025101de5252ff072080db3cf32dca933e76c586137ba1549024700d5cd178f0e060ec4c86e20f17fa71f0730207d18a6e3436ec9eff78b8592ed70b7f8ddb33ce85b42be5cc5e05f09075446c37963888c33d2afa6a60a2e4b980ba1c9efe6090aa7bb09b5c8bf9bc6bbbe6b566981a31048014cf8fd8aca7d5f9a95e3dc3f0effae8ba9ccd82d884bfbae14fe0b4d36b6187e4c3d11ee5c536853bb9582c078ad3b6c29b13154c29fca7a26948fedb2a294a5262022a5bd01a96c0645ff8a36013239f447b26956f1cc56ed52707dc0f5db744dc92c2166967e32a4fe3eae11ebfbdadfeb8d9272bcfc2f14039fa5a71ae00349d4dfdc74fa0f7003f52aac5bd714566f2cb29ae700066f4df2e12a35f977165d1886cf18c92f8ddd8b4bd192b48640a0e317ce971ba784a88b513a8a3bd0a59ee6a2226b0f6599a3424212d0cff8cfec3a7c1800bf5b51c49968e449508b34b8d30d5a3ab6573c4f15e3b9d700cc3d837698f2ada05af3826620ec46515d493a5ed8a094343d8a2bdac29821c9e5f66555d0946dcd6da5f9c0b612aa3dcf005a8c5299f2ab3f1a6623f76c5b16ad829e46488c073fa92e0039d7c2c71599ae168c86166d93254140853f4f6b0719d5811c69e786c0d95be15faf3380773de6eb0682874769bb130154a640d37fe1012863ec02aeca72b98b2c18dde2892394e1cd972adfa77cd27483aea1d8fb830a29ce691e5e7e0b2e8e0ed4ff32ffcc7a1231e0abb892bcee426e7fc534ca8e285402615b9f136fabe78278640a13432a1b996529839530da06b29d64889d3176a1840db6383a2975036a0ee324f672bba712e2f56f0fa2f7e0b7173a1b1ac2ab6c3c707131ca5b7aa844d87dd02f08ab581fbe420e9660b96589f9c5fd6b831bdc713a4a227ed78cf5d97b6489fb3e050b09d2e58296bbc9e08947686bba528871ce4e0263442a201f84862976da0322e992d316ee0af98b81654871b8f0e7a1255713f6f047a374f8d47c6ecdc7b322d5f435ad4f4d7da6a6ee365f17e9d0297c6c4c19adbc1900263645db49a24d51f330218815e52677b6063811a1aefe0fce03deb963475b8ba65c7c35f4596bd0ea6f53d35f77d0e2dfb33d3bd3ee2afb0278724dfd08fc0534d0c21fcffe12f64434420c6c0c810a44710ac55abc1e8cd3b42e4e9e73b5e444dcfc312749d8fae110789a0f0f3b52740affd322d45dcba08bc5de4e7f3c8faacc9d2f2498a06f0e61395faa1fc2df338716bc389a64df45e5be6d2f8b179abad3204530b3989c1697ee3140d7528523a5f7aa7c4034f342e9d93ea42c720fed07cc9092f1c8a9a86efa5e02b2f1b148e3f88fa9c4ef3ac164c692074ee106da91df9f1cb8228e402fe2dc8c64ad36842c3f43e65e1682d954fd1e4486cb3a1bf2c09d9e3117bdf75e2f858f13cf38e73f4a52b0f4ea27c6b6a06cc1d6e2a53d84abeb82c403e6a04bc6396e19248be0b5fa09c1e40387c8fdb7f274add8985d5dba40db0482ebf5f7b26365708cae18b40d96bb932e034ae7598747c1c7a72f03ec889626462a86b4f14ed94976718c4185807bca080cf5b10562eea6c24b0ba85797bc9a2116a9782c87cb10828456b30ddb4ed69d5f137232dae83922ed8c0284a484b9fc61bfbd6cada9d3ba125081b07aaa26c4bed0a9c1caca2185d2fa6c8536e981e0f1181579940693be455c86be090c851b41b93ed56385fad265edc2f7c1017d3a6efa6120e0ea4e540696a1ab45bf02f19b11f3e9a44fbefb810f4b87d77f40f2001c16ac683aaa6fccb582a78d39222a9fb39526418fe9a2ed1eb59fb684afb2d79b7afff1cd67d6fcebeb14f6215a88d8d3b5150bc94390d84917a5ac7b2e0da718a3bebd96b3c316c80227d2f8f24d3560cbe4626b047ff4265eaa618eb253f3555c0030690ad0fa0a48b92a49e694eb9a010070ba5fdf24b6ab4ff29966f2d4f0da245001a5c4ecc100d6bc1aed4f2703eed9558dc93d17cb3f60b1d18d362a51b46c780276fc0b21528d010204ed2f015726a851038020312b79ae3ea5edeb271ce90baec942cad5ca31b41d6f7ebd31c5fa1fa0f817043cf1eda695c474a408a6bdd000fde6e14bc88df0825266dd17688fc9d04420e6d87f2dcbaef245f4d4ed324f9fddcd6418ff68471be64d738bc165b79348ed8f084c39abb0ab6c11a62188ca8b456ad483aa2a7d082e2cb2dbd34fcace69921592010e62d24e6eb7451494c7f4f23869fe5cd791557ffdee2c644be0300c8c59e21a7e74cb6212d35349efdab303974915b5128731dd729dd82912e87aeb76031a7b117bd99c2b7d49e9dd5db6d43fda8b9f8f088b3216075f4be54724b5c7076c4ee17f020be106844f581ca8f6de3147b6732113671f1068b009ae42a172941354ac7ede7ad3a4bef454e294c9e50fc7a25841c1cacc109bd1b16b7617e31047fcb74966235afca58355785e227a3c218d7cb066d5531383a4bc7c85f746974de887be95f9c8a85361ca7fca9e4a52fb99ef576529f285ee60567a9ffa735dd5b853f922279383d9916881dc9234381ddc14dbd49f96560218454ad80b8ede8d5ba0cee0a085784125a31c30e8a8b883853ae780a57f0d8a04b457ee316cba99fc2798cba5259c4c70ba4363639ee59d3da583c04148f2f4839b36d52743dcc1236e8ab299505a2a2035a5793cb5233e607a3f6f007db5b831993b0a1b09a421cc1d30d4f3c2f673b1cbb2366d1ce8f15ac0395b6fa4f1f84961117eca04fd2e15aeff6232404d3c67302c37cf2676702c4d4b35a8576c9d2a675c3f18a4c9d5d6b9f1d6782cb2721c5d6bf8d8e9ddca81ed5d97ed3bc174bfebea80c9bc5c80d224931939ad533948f5b35f6ea2cb6d5f9fcbf3a058e9fe557de85e3922504b1760469febcd07a5711053a4b1a33187f3352dd759694d66a273cfdeb9374bf7bdd4a8d6ce26939617056a7a3b2228419d16b88379108483c0147f2a49b194d9e89f6864d0eed274e42d0f635de727f70e2d69f8150467b25cdeee44009cd2a54974f5bb72aaef91263caabf7fe96a423b3ce586c436f96bda4bb2eb2c10b9c4523644790da070f3730207b587584b6785ffd1f32a38d166598b28fb8d94bc462450cad1a7060926ae8ea1b65a97489c0f7677edbf7a6d3cbf2815210c5e96cc3dfbd9b84c6f612140a082b8e93188e7d04eb6bce7828dddb83ed287c1ba548feeb7889d3034f646c81b024e236a4bdb9c3c04111ee3ce506b681517c93ed66a9ba920e1439d996728784a0923933551a3d84b08745ca758e47382b0325b018125cc5d026074588e83874c24312917c39d76d041015d3dcabdb99bf8da5461fc872c3ecf108556d4c34ac0aff58e4c2ca0386859782a55f3fca1ffc0542b3ca2a989bc45abb7cbe167a1ef64dd0e7f77bab9bfd4c31391f5e7571e32a3c9c6af51babeb0f1d27c90646cd44d5231ea1c3ab75bca6ef4fc8d10d89bfc09160ea1e07858cd4494e5fdb1ff41b15a374b7025dabcad179dd43d10bbd190628f72709b035b6dd07c23818ca7f6e1f261486cd0a18b1b9512a0b49b7d345909a0dea804b2c00dc381a3a1d3677df38edfdbf1e965ba850cf992e067a7e918931c67669fea3e28defb2d6ebc9166e2b3dc899ff2a25e4ad771e69449457fac30107f95ce70de7878d6c1cc6e73d031f8523bda98b6accc9f1efc37f09d7c189b077e9e6d54d6a856ee9445274ff1e838b1972d2c8704e3d796ae04b84f1165e145fa09a8310583b7c0825c10a4bb97062acffbc3e66b00de70c79a1956edd22d71248350c35a17a22b04c83b28f789f29807e1940e979f46e81d513b079e29ab3b9541ae15212db716ffcd734debe0e32976b04d216c18a0094b3e27e93cc086ea45665a3c32bf1344c608eb15e14a2ce63eaf98cfc2a4558d4705f66914978bf4fcc40e2fc380b28d1dc2d50b1087b968f0d9a2987da361fe7507be7462c40cd34cbfaff8dd95380ad7c88c5b3dc84a2672aa26709277de973241052bff5237ec83a711252ef2fe5ec9d2f607d23a41cda2d89bd8f6631c58c3da03d381390c9f7d6dd5be892103feff2405bc288a7bc3e2e86afc33d4c391e058e9b9455ce94d15a74fbc7c9a9704d58a36f8a24c29be621aea22b1f707978c0c878881f0533f3ecaeb71e367dac848186adc1460ce9846e0aa7dc19118405197a003f3512801544e8a91f36817270d342413b88b9292c3e5789c1796aa9b380a2a33a3d051543f7602cd6e93079fb877ab245516aa43e529265d605e6754120ccefa8b721b6774cb6a9801bf4518a93636dea405fec3b85f5c486d246d268a77c7cac1bcb3576ca925654f1ce62712a5b980574ea3c723abfe856409f1521fa3de469c21220ea23ec32671aff7e933d2d346f0264605fb9b9b1589a20fc8cee23293e4e725a21c0928c17e09ec139dc0476b0a53bc091266f908c3eb3acabccd197cd85bdbbe161a58c8988d4279cb014b4615648f5c13e5732d2792994aff4969a47166f40eb11179b378b8fb978fbd98e0e548f8ee728a5db3f840cf913f040a440dbe060cc773c8659bac5e34880805b9d666416290154ebce37ba82c095d737d06846a6dd16cca61b348968d04f5cb4407a25a234477b2566849ab8277611b06c55bf6f46cf955bc7b9512aadb01db5c8b00a7cd281ffada47b00a3f114bc464f6db5b26a0ef891c0a53b7c67aae61065c7a9029a05cc936ba6e6d99a68a015376ff260d176cff465ee2ccfa00dff59b641effa5fecef397881ff76fecb95ed2e0764db71af739fd76e27c73213de698d46560d1db15ab1d49a52d58f2534f15f3f1c022b57b2c9d1801f87d4d85e4fef6bfadd4b8c0d71c3bfb3036b9f9933661c6d4ad037bb7aca2adbbb90f3d2d8ed5502aca79f5e8c87af29d3dfc190348bd57c4bee6b2882b5097913a78c17f3846abe94dba218ee28540d90c02a2491c6822be376db3f7a7429bd0a39046c0ae1bf9b11f1e6897584fc79d8e1accaed6620a631ce79b7f5ead4ea0e68611107069c9316173389b73af7b0910cd01e3092765f949c067f2180445bee4a0a2a40976cc3c77d3979c84da468d32393d870b0a29e478891dceae12940daf72bc167111edfd34d3ee15b4295790d77369edb6592de46483647fb7a7e6f8288b5b31a4b1b4b17bcd9c365ee2cc37f9110df340cbc5743e1223b31b14f4f3c12e56719e233d1b385b1e42c78f7e88ab0939c45b4fcb207d1f914fbb0b2d2f0d4c50ec65ef4300f07a4b779fc80607de8ad56a20e20a9676c0b9dbd6384999efad6622de0a1c4eb6204ec147519dbb3ecab28f8d86428d8a10506a7e77607707616fbf8dfac71d66042d3879f0e9239ffa146e2cb7e628063c300612e2c71ff568032248111b6da4692e3264fb246e9a634c8ad003ac4e6a51ca7d1630efcc7fa5a426d608f10ac6703e8e77122bbd526605fdbf74407a6562c3790d75ee52cf4a6e450d19e9d6bfb1806b6584339dbf86d462e5172a537fc22a6c6083b334c3e1b3bcb65e096bd180765a2d53fce3c2d73551c540a17589f597f27f5cd87782774b410559c998775aa3509cee733cece503865c9042c5d1643af6c5c459a1ae3860a4ccde8be880787987a1a6e67827ba5d266185203ef12e8723fc9e9415ccb654674b565877240926ecf01d7122c5a81d45045f2c14af1e5b666d68a421794a83e847da20bb52a1171db0c3909254695e2d89d2efc3d4b774e32ab8d6fa02b584173e29f5f595c99c50a4505c63eecb2ad3c49663053da52e7e35d758049de9f61cff8f2bf637e1b1ecb2fabe3ea54e2f7064c7c301305fb774bd0654d998daeda9aabc74a5bbeedb424fd56503f188401d626f6ef3c7d3722793cfaf7c86b01302e209095bef333d9edc26ac6f380fee894b60bc9c66f44e08c3b3c1d86f5f763400ee8149840f4a6f364a56c8aea4f93eac1f7d0b9d13626b8d96444a2a238f1d04f0eaee462a8a3b654528b6ffba1eec2be905cc5f3716cdebb523352858ef7ad359b64a83308ff17e2b9dce963c2af63ebb7f01603b161e25f67ff555404e25b7767f3a07f9e614a90272167a394ccb08d4d7666f0ccfd5dca8ee60bcd661bc15a35905b9e6c7872261168808e66cf74dcad026d7831b21d0f417b5d59168192fb4d128694139f7e18d456e805a82c35d13ae6b097fc3bd7b1b8806d744a55ce5ea8ad7f9d5814f1028de827a07b6876d9b16769819e83ea5aa8add932b4ca024d13b9f9092b6d58a85dc2694bf95ba2f40e0c5b02d18d8c4225305d22108c81c23e8bccb6c362e2d86b516fe766156c8f4ebadeb13680745fa13fe63afe76da8195187c982fb4fc1b130974aae1682924169a48037e1f0d84f04ca65e3f0bfde87961e255f3675af6688661ea60d9d82a83ebcf809370ca6587fbd0d7a6175857bb1e5b36d28ef815d20822acbc5277a991280b3e05909b58342cd57ebf3d631179c2e23c1b440266336c10b02dfe214fee0f97a7eaa781d5da5a665e0190fa728fcb89110f89a23dc37986a03e82ef99c9164395a81a5861e0bd6090735270e703511c3ca5cddf3621e0a950d8bf9d0e69651b153852adcee1d6950032ca364abd8102b52312f530f8c6336f8b1176d3fd3817149039b872470780a98e1962e291390132591a47a457bebc1f156640f9079d06255e7f559277bfa47b7a6f4bcc481426222803e5e049769359668454e1c432b1e73b8eef3d38885235e94443928cad5d2c33327d4e9b49b15fa0956c1e27d06909af7c5e87c259a4622ea8e99f571e4e395a01bf71a3cd4bde7235bc480fb6c6386c6fbe5cbba9f23c5d681c4895fc067d3ac964235aef03976a077ec696671e0d0cbe32c78f35a87f5256087123cb08b085dea8b235aa3ab7a76e91a7d669ef262e5e0f6d692221457bd8ee53648ba112e6e132b5e4943293e6d6ade020d43297f9cbb0044e3e5c6172091ca3a70a0a59585bf46b4d167c6ffeaf7db42014b8fe7a47e3fbf161f911486b93b4cae979fc3e3c75d08fd2b8a30ac4da13b36fb9b0d882faf885803467b03d940af3b8468d93ddd608b47f34de835ab7605f81ab3c7b28db8f8afb5d86b4d3b1b611e465ac1df11dca2903981508c6396dcc2407ab14f5c3303b5d35cc612a5290e2d7cafa2e019576ebdc98464b7c35300105e0087b93d9f6062a0d871b7bf636955e9d8467c7dca87f56d5c26ec965f03191fee993bee4e88a1922ba0990a080a1cf0fcca9dd8729dd8af4520b867d8300e96666e0a9f3d7636a4db1dfc6591b10611ff7a61f1262bf576c058707eab80c5b591d4dd3271db63998a2568bbf4f0395e8326b175358cd14edea3b72ad681c58d415377c9f9ef2052f87082e7b2b569de9da75cf4a40d82b9656fd0aa9d518bef5e29133443cf5945ff2b5fdb616a76ee59307e5b588a807246a337952d9e6ae9194c888fd457a420fe81ae2288ccfd6d85bcd81db95b2657f1efd81919a1949311edf3f398bbe2ac4576ba866ccb18fcc9bb9f1f1b291f267d33b5b8e7d8bfd2659a71efdb22202bebd0b3caa6128eaa992c71dc87fedb2273cf1d88cc0222cbeeccd76f6c5b7472d639b21f6f44b5dc12b8003896d8e1384b95459c9df7837d48a8036d5b403aacf91987eec7dac65c517f2f25150f3600fe1906c5c08195fc3d03a726092867ca39d5efc62d2e8f22d436e1b7d51c8a0fff8e0cfdb351bd3d864670ab34866b44700ab7bbcfa68d472ffdddada425cfca20651382cdda1b5b86a8f4fafeb9f6108e6950cc7012ef1d703b8827fd3eca1e5c1843d65386e0c524f6a4846d6a07a17c6fab050583b82de4ed04c4f272892c6e2c1fc23c16e2eaec44b79595018f89dab146214402c68b8a254c83a80712ff63178edd1c944531abafedd36a68582c9d47d52dec9e7626a16959b1358ee726578195059046b346751cd2c9b72ec79a5afb32286786375a5fdad0b54356230356b936f8453afd07370750a31e8362f1c973691471069d81f582e4b042c9a2abeb54737182c4d10d7458efcf411da7300091da76371fc13d92ee232ad9bf2119652706df20c7cc1fdfbe9dd9735e836b7bfc50c36c087d75f820ff25d05f4125e40286087c29583e097191e2df504b59d4bd7403eeacce39d7acd96a0d01b2a3bd8257af4b371d766c683e9ce5163811d645715a476e1263ea89b7678f3ab2b1aaa8bbd72d97b359332db15e308e604d207b9b16a227e9d85bc87bd33fc04f21e2b8f0fbf6fa9297f3e5ea6308e8422fde643e9edd49b425a8c05fdccbe04ff2445e09d1824bb1e54f548330479c5ecf428ad6f99a2ac887712f52eb4efd8116fb7b5e67e13cade7203d5a4b9afeed63136729c7cc4f81c8f36041e4cfd6768a8a62c94f547f7c1db9805fa535740b5afa2ef71ec6013bed6a7805a701ebda5f1d07a25eac31ba0f01b0c796980ffd77cf4420dca9e1dbeb467d2f64f6ee4c5e72357963f5047be7316e996720d3b14d110721696b787347ae353df455c019bd04f7cdf2100080a189edcd3b819a085165e69b63b8717b935fc4aa63c01cd1211c414af616aa3fb0531020b80f6d13eee6c90baf03f25613f6787c531741d8e3648a063c0fb3952f3dfbf823a561adee350e20a133d7ebed6e557f16ae9a2ef60d54c844f49707b70f3202f1fa1d0a9dfc1f71278d4dd20305752fc6584ae669a38fce4a2d653a761441bc034b327f93541971d00f2ff3f911cdb03a3023b44bbb42643e870ccc62c58dfb1c791bf708bdae8ea5ffad0fe7711a9f1561e54e38a2c71b0d67e86a8d46fa9ff505ff2a5947e3776d56e77163f4b954b63695568c76589e0ec11e96d7b179ef37f580ef39b9185ec630ea18747662203c685fe7efd2488e2dfcd2ccc952b20555cf42104a5589fbf41b0f566c015c74f9d1f2749d341b2a9daecc13e06dcb06b20758b911b36ff4d4eefc77ddd347e5e41327a3b70e4c8042932e83824d16f3a6bc66082c6a68fe98de0113ae5e162ae07cd2eeea5bc7e76aa7b2a8f9fd59c967a69c17864fcfb94cdb66eb508ca12847aa0add6e4318a39c5b07653184dca550f85d2d7f7aa563b73c6cb5efcd3ea2f7e7a9c588e467acd3beca4d95db639f845eb02eded5b8060b61e548d02cb27e92ba3422abd45887dbfb27bfb728fcb4393d6ba021b5426aaffd3328d0bf601429df3666081a6346d75b42fb913943f8018df3b2e657304fe092d71774a172da430fda078338329ba4178b2b29a6e53c1e2ec0caf33b7b549066d20f46d80c9bec9e606689d08b1037d1a6b7328e0b05a75e8a9cdd4b609db739c7894b2728c8a04a3ef93817af385bd7e3ab5a6c40c3367299532b273c8afbcab3f9938a85a1d393199760bd4d3ff4f5fa5b0b4ad7d8950c0c3a19eae775ced40f0798d1bbc451a2fa3db5295af0a718bca9177677624c175d3cb30d73f45500ef75fbfc8d4e7b3c9af2072464dcca0c1fc56a1b5e132ff619b3b92b0e1fca040f6f06c18971f9fa3cafdcfe46d9c669da3e96654c6b768106a5198c68fce9c3e2332cd01e3f749b553dcd80a0b4bacc35122873e3fa7d67461d67673a0ec29270277a77eddff1edcbfc89ff1e086515d66cc93bfeb08461a9b56d0f20f1112152eb6c14604f82a00963edd081c95b00a8f50d2742c6d5fc59798b5e57aaa913091eccf4fb8a1ebd4cf7e3552ddb8a471158283a9b176245be9bec80170f198def777afdb84c3097550d1f2b33826e1b9d3fd8041fb70a75ccddafa182f4e37bb83755a7ce531498d24fcc25b92320298ee45a55814b9bfdaaf2bc343877a9dd0afafe423c2bbf1cfcf7331481a55aa64772a9f53f6298046bdf2e13c32cc31e1b4f6cdd2bb77acf5be1ed0c78d3a114d0b57b2b8eafd85057b4768ecf1e868e75aa8c2e3c0d30131f17431e742d9512c3caaf33355ec1308d33248de6a0e3285c1a36434a93da3b4f4cb3e236708f67e61d51e3dc8426e23570e792725f3c8517937eba5f970497a91c0a8234da1da573f8c5da6a2c1dba2b755014ddbd48cfcb66fdc1f53b5ade4bd165a739847d8e966c840a38fa6095122c45661b4105418d9326776d14dcb40ae1302899d768cc0faecfa444c30c99bea03362b2c685b48a785f374407999b72bb7439f773449ab9ab3b2b8652891462fd5899c1cc691f60729722cdc2bf0d5287dc433dc75c1f579b33b2aafe0a8091fbbec730988bd0616a653d011df54f00e51c337fb04a4e38b74203739cca7a8919936d1369cb430c2f3d163f8c75f7937977a4740ff2519c7e31b419a64435cc59ed14405c0e6184b722dcfb960b979ba5f79188777b5f3e6502f7c78b2379fcd28b177c030d71beec09ca0778c5b0fac25e52c69e043cc00aac947f88da782f9b8929356fd68e1699bd391bb97caa6259437e608d023f5efa0995a00ce5a9669883dc44e8396279752ca03ea42fccd146f73b3d84d9d68402189cf25f4a9e783eef01e348fab0ac5124af9eafc13390fcfd031772d2d9966e61086b837bb03e5321f17f5caab773d1aa4f6dd2b9d7a2860f7757c598eae0d5b9c184a54cf41e784192aae58175fdf56fed9df537a53763a462891aee51491ebbb9f8374089be0a30b4d15ce2ebf18334bd8afb520c0723c11142a8120d87a80d953a30ad1f3fb88eeb374a87e92bd08cd241da6b52fb30b04d31d52024c4f86a3505dff426dd1d1672468bdeb1d62af16c0f15fb772ee3d0064f1eb3d7c34b66518d8834fdf9618b75b1476dfa047819e780263dbc423845cf0194fe5a66da6f910128a142801b37face7e9185aaf0662431ce98f3f5234fb4950eefc67b796ca43706c6c9edc608a4a5bc64466c4f8d56c9249aaf35835798137158f37f92bb6a155a119561b4b2bc654fbdf7e6538d053399e64a4e295773312741db6b18bbec1a91819c9674b37644007ea344efbc3a9c70ef8e0d714a31e13eb02373d35c28930285117a7e863b8ebf9159161d629fad1399b63e10ee9348613a9f2e3b1a9eb9bcdddb2a36929548862deb51a64f7f634e06f13e186933f792fe6cb1679a1086e2b1ddc81fec77b1325059003f434d6eb40dce4988d9dd7f70dd6f1e479ca512ecae6ed5772bd209928b5fc6909bf0a008c9becf42b306636884bdb2a5d9e69dea06655595ae46db83c708a06a2c9969a26aa5ea8053242fc81e7fc2d89917c3fd86c2768e2f014c41efd908f8fe730c5d6d3efdee268399370652a897fe7d84b1f7839f0896af7cd26e9ebe999a4bf0264f14b8782c2453ebf8e244b69b01d29f2817d723a8286cab9f67ebeaa50c79868bb2ddd9e2f3f1666b13c7b4c46906cf10d54276befa651883d362a89cc96888167e8a1524dcdd2f494dd452edaefcd4579460ebbd67af9eb8a4f5e5a0f347ebdb0a8a8ef858a327a7bff72bb0a3ad49d66215808067743f519d6f4b42a33340c411239aef8789c39f4dacafafc162cdeb67f8c9f2291e07b961cab315756abd9b585a4940b1793a8fb757e4d4bdfe091c0bd85f7c374f8eb0a3b7a92736b604c6ee3f0376021504441d4efff884ec0a0d1e886589e57bcbe9bfadc76eed21cb80a00e75ecba84a8f4bd117e4ada1952e7fcfdbe67ff9a35aa7f73dd89e09849d1d41a4f84c0909cc69002754ebd2c333e28790d88bff64b3be4a63a2491394e029e80943c922f42a722176800e8080ae29b64f3e62d480727a30e892b87f8330e8c00c4f670b468b1271cadbbd5b6ace3a962977559c070815dc975dfedec707b8a64f464983420021d40295a6adcee1160403be5365d51328926273ae6e1433f0a1d93f013ce90214eb792e9cce1e226572f1b49cd0cbd5bf850cd4832b7c1ce2d432d76b9a0e4bcf3955c0d81fafebebb9bdecf35606b6b98443ae80664207e4e1d051893049c79065874adf84cbaed9cb87a1d6e1006455c95ee4727480c428825d8302e5c0e15f181d9a0d14d630306972e23419939b4a28f7544270cabd4e1f6e6f118705d14475d1dc575753f3e111ddc22a7ef17602db6b7c152bcfde190b9b7141814ad59708b951fd977665f1ffda5540dfb137f7636c5fed70bbd729842050580cbabe063c12812ea053e3c6db90e2face36744954eea7214fea82210fc33ea3b7d4b34e14518f5efef36d0c7e369dbeb2e86e8facbc6a647fd6d94aa245f9a0785f53192ebc1565eb09192c5d9a56303e2e091b106fac250865629b70613b83a41796efe0a1e0710f62ade3ef12e5e9be951814fdcf1ab11df2960329f1f788224d42165a34b4ff92f5cbe873c733a6d7d986612d7a3efad537c25ee45a592877e60d2d9eac004aba7f79c4f83320914089a1ca33cfb9efc0927bbf390862635f33ced01f4fb0b7f0babb4de3ad8e88bd5e583f68525ab86b19f1e93ef0e0f63b501d6dec606be2774a0fdf780399d6f2db2ff92228a2d68486aa096ab06974446d35560d64c1ced725dd12927423a26cacfaaefb6b8b3aa5aadb7f1585010fbd5fef537b83f192fc02c111e371e64364752ed6326d46835ed493bb9b480bdc6b9105b93f3349f35dffa19485ab3b3585acc823ed509bcd3a4bcb2224f5e2cf9de17fd5da6df25be53d6c2a397904a9929df8938ac7cb3fc6ea6c0bc9bdbdab5aa1d3b3c4c68d4f6fac4d1a2c2658e881df3fb1f511087d7308bb2d110cf2e8aecdd0bda65aefbb3aa81d658e6242319bb9817beaee844903fe01c9b6e8cf5593874699129e5fd40287bdaf01342d75604cd5e2618f88f01521d0d7af0f2cf3f73de8af6fa8812097c31b9385bb113499b7e3f619f6f46dd4edb1a58cd923056a22c540dd0c5dabe625bab4b298647507f2c3ed1f0e9baf9f1a15ea66c6c015325fa3dbc482a396bcdb67c3af7c765e435175ade955ea4b0fcdc6e6bacebc81f767a7a2abd450a8caed9cb1ddd7d4249311f5f4e8228537d5c6f2ff757c79bcc6935e58a942e74757ed628eb3d50829144a0999ff12a31e9f6e2318ed70212fc873be13ae7b571a4ffc9950f68af9c84e268f657fec604409314021ef54c6bb4337f05723da487af1908d584a64af3b21020c679a1b184dd2cca2d130c72547333ed0c8fc75c35b92d9ec0998be7ea471ccea0d48ce788b9bcd797a8129a2c9a28c2e4ee8563a91db617090789eded054849b1ad2fcd8b0956428c896c08e88a7ab4a9ec4a2612a2b6bf6ea03f3590bf67931c487305453788928c39766daf2c3f0092aca34be5e7ff2ef005e58fa13273796e44e3b4ae455758d64eaf83ac5c9f06117375e0ad28ceb422f521a0670deadccc568a808d0b6d1aab16ee4f05777269251dfc65f2cdeb95b8198fa4bffef84e27c3073f33bb376f2d36f037a86d4b8ee09c6965e4c1643e061433f3dd9523ab3fa42861cd8bf7f49d2d4dd501a5ee5931206a38139840e5589e7795073ea1dce26e574795f1a4f6302d2bef05e1a2cfb6878fdb9e0761f8a08d2bacae49f78cad4fdddae07f48a39b819be7dcbb2c7516ec53a86fb0d5fe7c51918870827803edcfca1483c0ab8e620dc26d766427b2d51b3779e1555cb10c496cd27b6eb25d37e7a9e96add470663f8baacd47dace07cd1fe42bc203604ffdf164f83562bfdb77147b3be1ea8a1d3fedb6bf8beb15c37d70e1c319005b40dca6ae03b92d5334aed87179018c9586a38bc797301256d4e5f9c537dc08b87ea4d0ff475c9cad40262921c3a3b5e7592e66525e522a83bcb6174dca0926f4f490fd1e1c91dd7d5a1e230fe62a6fec82b9fb5920465eafbab397017a53032c94016d603902be7a1c210be82823e3244c340e3170276280cce84cf0fd5954dafdc7bd3da78f17364bd54c72a71bdfbdcb3c23990e58d5fad385e1057f58402f5fd1cc53a89824c3dcba7605e01f23ea43d69909e29444db6d0dce78017706afe083e4f0a166630198ba04a20b3031c4d85b5478a2c496816f72d5874a4c62196ecb274c3d4a8b0fe1cab63499e0109996f8cb88e27fd184fddf88f417c9233e051d90aef282dd597cfbb968ee72770807b9e65ec18613e878ac7450aa6e56a2e03865705b3d8736dc81e54a822620575a7a0a5f39937bc0a52f52aadf4ab9aed0d47b70f5e238bb3d9045f621dfa8e584292fedad89c5e04fa1d0b50e26a657549b523e84e52110c96d5d799cef134b9e99f7cd0eb39569d03a67cd94e078a3365e8faf08d518fcc730836ea329b3704ddeb0609764aeed8eac8428bfc6f4b34cc727d986bab9e7e1c7b38cfdbe5d5bf9dac67c06cffa4b8a93f2d9dc0e36682c7bd107e7c5f5cdf0631e32cb5698079e16f93d25658cca08f0ab2ce8c211c7390c2080473313503f29330b9c5de83af9a99003a344b2c7fe8f9f1bdd3b1d1a89c439f9c587bb13a2aeb6318b76686216201dc3d4092c8099af0438196ee109de570335c8ee99d7fdd361eeb44bf2e7ffd7431a5b0b8944abd33d69885a5e6b827434407d29693175b3da90d98702916093e04a8bb803385f8b8fdca30b4335e44b72434a358143814458ef9d7b8b418089545023ae7eb27a31ad27e20605cacf921fda42b16c64193f8222f521e9f13f3b3e660fb0660584475e1db11335a2f0af3fcaa4fea9969831e7151367a64a3816ee586b2c32ce21fda0de2b7313e70ccc39a6d73b00e43f9a7a37d4eaaee320bfa87488507b958a59e51e88987c4cf88f4783472423bd2ef7b095abb46142f9080fa278780b12a279da60158a0d8e911d64a50b9ac3dd7abd39485e6f870378780ae4c27b3eec45b7bebf16b72dc572ebaad595feb01208bb853bc77c34afa603db5c381f4d85434f2bd2cd7e1baa3cda76ec9c68bd563cbb9eb5137b6c4ea3977432b18fd4c0401e72108b8ff8cb15036459e69781bc5238361c6d371ef32486c28333abaa9fb2fdde07fb08d18cdd9cb0ac97ca603ccd91df60cf1c5e05b6d2359569e762bccb2403011c3045a5cf86173b3a913a14c51dab35c7197e2028a7832520da035e0e426537b96aceeb1920dfc8907da07b499641487cd2b88aae1c028729482d5f13dafc41082cbff136ff70a38af4bc529514a63a40e6a0b959f851996b1a5b220004ee79865cebb3fdc842bac397c9fbb30b6d86e5e6263ed45a6c23f9bd8db9efb0bbe2200fb28cc279cc4b3e6d0b179bc3a7dcf2901f6a9a18f319d950adbfc6cb7f0948171bd716562b79410301be103d0af8da0626c9e63d1b39ed339e8e9c90b9d81e6ce6ae464f8164fcb9a95063e5df7718beaa8953c6294e6ef8202e4f54b5687b1c0e7469a8c8677f2133806712ebd10f4a8a1f1aa85aa17b25d2420094bc7be141bdd4511bb4a01cd0fdb0b101f89e2048188aee166ae6a5c3433df4cf3534bfa56462cfac2af4855cdd74a9f7c10c5864cc27777cefe1d7f4775776274f328c0c195997781a0035ee7e10a205b0754f370b1b5ab60ef8ecb5c7a90e05afa0e21e8564b37625b785520a9fd17b8155ca7f93c103e23a8e2299cc5d502e1a7a11f9a18106811bb3142136407c41306af198c8ed042499293797af23c1500c090f03f46b30edadb93d9b2fefe683f93810c04c7f8018b645e6082c93c66bb62ad4c035b24d080aafe6c0067261a3ad35d3a956f28282cc2c58877b20649d722a28e56fe952a1eaf6152100e62d258a0cfe80d31120056a4a0d03620a09e42054d21784212a3ebcb6a0e4798c39a562ab535992442b0101bd456564d70b8b16a9821a7917d36561047b5fbf91ffacff78c2cec9604b525a72a810952b9e8887838bbc438b7d150537b748a362af687b7a94fac80957cbd08e2b2f61b66dcec5b9a27c3390b1171a18d9dfca9806a2dc76c653c032043a625b88ee7d8c80ceea71769566e4d1675c43de5135807cf6e1dc5f2ed53d9d6962b8044dece0eaeccad14cba4f14c85c45e7f9f5a32b746b569886084aac0f39de338d265e132501ee4d363f62637bb8ddc323e011ae5f1ec5a5121ccf8d7b99225e7e63fefe5f366102f2f8997620e572140824c721e63ec483bfb066130d8f70b8b640a9a22a19221ea05eff13a4eee730538d51b50660c41c719ae69d5288cb54396443d66e733a38646c562325973ea7ad7c111712c1e9d61cb831511f2c05727b02e5177783bb02f99907a1074727f5f10c3b864afb49083d16e745aa976c1d30da9c5816c899c3370c0ab879fc9dabfce10c1c06574a7193d84fe76127ea93bed64fe6b12a85ae82b368f4c144d049b709524096f1ff0a9a4132aa4e37f3b01a78a59a8850a4baf8476a887db011b246e79fa5758f98eae2257966b8ca986164ded84d0ca4f3d10f59ccbcde0e5c2c1b88d48734ce99bb3344dcd3f4e3ca2e40ae130de1469840fb7fa839ca832508968775a4b8d394bed3696085f000aeabeb7cc782475d56ef7be077d86ad4d8fa4943c5e1f555a3efd147871bbca30bc123efe2343cde19962a4f9e3d789f11ae0506802c7c1a4c7ef3c3ffc75f738c116362b36068f3037de258d8c8162f25ca453b751c945ebe65800ba1901c039cbae12b304892dbf52f04022b62a7595844b5d1f550a8cb3543d3d1965927b1ef8b83ccb7d47f1aa28d38aaf226cf37287c1fbc0ef68247646f8e33dece12d3c29febabcbc771e298626ba4151dbf98e15a6ef6040b9f1c738b88c0974216afca7de846f8e736e3ffd745392ca8ae9ee8753b99f5011064ea72ac8519f65a8d26f2cb88bb317d7d657509ce385cc867b94a6cf325e41d81177a10ab064c6ef6a7d1a1a8f7424e0ad94f49ddb01fc79d92c221ad01d3984804dcbb5746d886212719fd3397b0e206e29bf1f5500c8212e163fb04d70c0b1a1e7ea515fe2dec85ed8858a3406f3d100b2994be27f10145b0be96091add4e426bd576cf35bf035f5632ff2766f9bcc1b572a3a55a4439d6174508e8bb14cbd47e3f2e48d1f9505b86f36cba3366878784076603be3d271bc4784bb28db0f959a46a2739141ea719fda00e389a8e9cd59a0ea601f331b8d390ec7532eada9e4bd0bcb0890ba809c7358031aadf149789283ee6333840abdb242254e38ad260c16f235ba2237bf9c40045b0aa5a7ef84252b7c78208d6dce48953ef949dda1243156b911420a2d7821109167e524b525d70095e427d8eaad071f48064f9ec4bbd925eac113a56a2ea8f1df142a73e4bec46807486fb0d37ae60e28b6d3d3273d664e5be5e0c616f23c63c652ccd6117af756d4347ef4c7f71a7387b61e5f0d3e0169dc76b677238ebd4221e8bea607e4d4cf37d6a3ebc4910163ae596c6dd224baa57fd7dfffb23ba336b83b5e867dd47e7653591a383cff72b285826c69350927c9724a2e9ad2ea70d42f07863263657220d909b953d74afe86622a22050fa8d073ff0c4069ea0a65a13009923890a52260b3d38349a47d3b9abed5d29d644605eeda64a4abea2fb56023030f42cd161691574fafa46a64023791084a2a4f50860d2a5f5dc205889a5b69fe3968b42c98d09618700c680368a3a12f1ad220866ab8fe084b98b874881bdd5f430523b84ed1d7425c3e03ee2ee741f0544bd2950e82a409fb445cd3ea194505b05bbeb474318e82978d543f9a585345acf4cf34361cd4f8affd1ba116632090648e149ba408c487df73992c96704e3c5ca3444a6391e1b1c2224e86f0024d5457a8f2a29fa14b5a6f50b246294a7ecf5d594f3c9d5f84b62a802851866bb7fbb23df26e3629155bcb83905a2a1bf2e92faabcaf296fe3d858f3c94a1f362831204d0fc1e9092b5cb47df52639f97665af63d16d193a2d78bdb9e244952f1589a38cff6c5af9d0b85b2890e4f45a3cf8d1c382b2569e03595526bfbd30bd4683aec611cff1a9ccc2db36f5271fd5633bb9e1e6eb864b6338e633132c3a72e44218a412b5c57a419d1d176ace0bbb17e6f29c1377346a72d616aea49db70a7dd4cab4b5b25f73f18b681169d21a4bf8037b886eacf44433283d10f7ab1a2087752556e7fa6787f9bd23d49fe23d561af708868cac8e27e8bff975615a2d898723ccde4ea5f30f1636dabe201e41d2d5949fff062e13fe863f934d84c28c08ed265430ed850fa3f010aec53c995c0f224bc175761a51ec7c976142869bda7a2e45f55bc9f9f4525d46dfee5fe55e1891db334acaa047f89b97d9b31b82e43f4fff6238badfe4cdbab6c5dca57cd5f03af74d73a2f6577f478c0e089bec663a83880a79fc4f003060f2d58b25eec443ba2e1e3823ed446522452b4e0f7480d097d32840d111559943dc1d20ef54352650d9ab4f6ff32f96b4f53cc23369e492f068208d06d43c03e9759f60458a8c76f1dd5cd0428310ba728ae11e2133ec4953bce2f23b3297369a07a2ef476261117b3c2c6de53f4584ae67700069155044db9400e066ef0531db9fe9d35db78179cd4082d7e876e40111904209ed9826e2a05bddbecd409f5910950001cea1df2e9e3b40a4c02afe91c81c6ebb1983bfdc76f47172304faeb9b571eb601fc94b17dec9362d1b0dad0cfca979d0ab60172942fb3badbb28380c026a0cbee48c98c1ffc1bff429f67d949fa1c3586c1941c0e49c7bcfbbb6544bf60eb2fcba08ea4375832cd9c47e9030e1d0105f520c594d55c34d8a6d3516cab5227f8efe952106e21c23a5445df12a12490cc0ee635154ccf961c15d55df377bafcbd838aad89d1383934ad29b5178a89adcc2fcaecb3373f163199554f3076ec2877bef0592a7feb617f73715af8ef3499c2c4e64373cf06742cc803b0780fc5041b118c40a52e8d136d79ed3811817b37b09ed78267828b51ccf9765a1d11a749e1cf2ddbec8279d6469369986c96a0abe5dbb8b76848e5f57312c0ee5bb2f22bf456e4e863e634713f360f06e68c3affa73eb51c11d96ef7bcb75708bae3f273550089100ad51527c8a44ee251be7b5d6ae244fff7822efcc429817ce1a83cf7507372ca9dd6078fba9e40254390d651dd9cff42b534d1bc7a3b8ed5a361e80fddf2bc94f11a3d3ae573d878a098d46270eb2660c42a543e0b7c83cc41e90c95727dc25df5d196652e6a553f30a6ce0983b268628a264d02afe3bc1d2007e803b289212ba70caacc8cd55a6e2d6e237e0de9dbe69faf08ec2c6171c7a344b53403ef61c68fbce08a8a009c5f4deb59edf1f3210a452a5425e00234e552d6feef4193aea1d50c810b5284f62dd38e8e0d4df14e0ea435d1d17f6db62610a9567d8953e413e7871bfa1597923c917d44d91edc1b1a0008a2cbcdcba435304a3fc229ac5ed0b82b4f7a6d50cfaf506a128e1913f605f6db2363145fc70b3d13500622d9d1731349c7d9467fda4c039e1b2a23e5e682745d014b346b448f529cd4b6b794df530cb755064e75c47d452a68b1401ea9b81980fae866b657d02fdfeff22317bad34cbdb4bcc42953d6dfee8f0aabf2426ae7f012ab624c768356ebe18dde2a7031fd610003107eaa26545eb1fc90d826cce691c8bf3ecd335d031d05d82aba94dbf1db8864c6c9acf3e67fbaf56af58cd25450b89ce3238fb7ac28a91433ba5a1767224be63919e856661d1a52cbe13a2f096812e2ac443fae482c7f7e53e2705844c0cc9476b75e3be10c9809114c550d227a53c2aee13aeaa55e04b9cad582f8de86ef27915cdf470a2280b2894c282b0669ec03a369cb2bb7ad1d63383c2a06f45dbb4c7f2be5ba187e4c2fa234521a037efdc3395582f225a8b469e1ddee4e48c860c3439a03e713db2a22c0db23b57791dfa481fd80ecc41d76771859177cdc66c8219c303e492d99b8c570ec8016154155aaa032cda17198205605b72bcca284573c25a184abac2c803d0d79f9d9daa92cd59f395a2736dabb0adcea745124feb263cde4fb08707afe4830d4ea567664ea4e35d9cda4249d13e7c43028c27be14d66ce21fadb91aacbfe80d7b52d7e7ce81ae6dee32e772e470ae753b7d5006d44e6652c27804c0bd672db2d16881f044d55e094223af1004aeccfe63418073e639922c67123d3da6ccafa3a895b0bd92d79e54ecf9b73d041e432a7c3fcb57a42d512f5007bc9ac0669b578b83a665f9b3915e178b6fe8a825e3231afd6b162f3d480ab227eae4036b3202f6fff31a704b9436ea1994fc021489615abeb77c96e9d78c05ec20f96ed31a7f3b6580dd49d76b9173371e24a7788d359c59eabc441c8b7f39f1f4415300e18ae0612f1252c2bad63c034c51ecf170db6be3c6b2fbac3a3265036f817e9866afe444237fe415aadb5035599eb631dd5db723f4dd99f54638049beba9b58fd1eb76c9b82c4cf60131d3111e18be834e86bfa6973bbfbdf523caf4f09dbf1f46dde61b10483b15d1ec5ba80773cff2b0e29e4b884e158e1931f33fce8f1deb20a9984bdb5c195708ee1fd439fd92c719c5f724ed7c9de68a65d06fa802db050057808492b3d9ca433b141b8b13805bcd642432a20eaa743b7013d26f434b0221b436122524a9ece424aff17e2d0b9655610d5bc4be423429d6ff00d2d93796c2fd5d462969160856d3eefb8cdc8482da8b1ccc147b63dc071e25247d716a00a48da65c0f32f3ead7f66ce4de322a3bf1a8df28ec82b8e46239179f6a089c34b41dee9b02b52b2669e525134dbde0b849a6edd1b8dd4f10a6fee246aed51bbedaa9c92e896bf20de58bd5b8346ef28993508600dba531eb502aa7f619cb92c2eba264f7112a135d9e354337f63fa455577628f3acf35ca292f9621ea5225224e5e1390b8b05a453a07b706b901bed11bb29d437e22a35ffcbcd34c7e597edc8bcea39a42ff24ac6cc2152d7bb21f2e35a3210a8f1eb24670511e75b86116c9bcb6717b3f60a964b56fb2d99150034d3ce02d81057001348ed6375d281f1b5d453fc222b178878b82ecb8d96b0a75fbbd2471c543873d4d29ebe7729ea133d8c40fecf3a5ffea9969b30c3753e0c58c19963fb9c153fe70b3a843c62673e71d9a8fbfaf8232fde6144852c520ca3a79a7030ab6ed634df60fc2e6dfe95145e49b481ef16d88aecf9606822712747f76776cc90d32376ccb5ce71b392f522c326cdb9a03d63a15ae624b9af3afa2ea78b8b2a24f31ef71e780e74331009a8d9a911dc572ffa8792519c6a78a840b8c227c4f3848c9cfccc59873e631d714d2e71d646a95245c7731b46964e0980d4e7d81cc20bcac1429f7ddb0bea9e6523bed4568a3b599f8fce5b3e86729ff628c9f703ad5ab6a25b38145779a0ad62650ba6e21ec62462fe3ee692118bd4484ba7eff6851cf0b3399e03068966a900f2bdc54c1baa946fc51460c901134012d0c4498babb2e8e9ba8c7da09051f93e60860093c90cbad07f904fbd277a7b6de2f20a6d30ae5bcfb5e584b6918dc46363f3d7f3dd3f86bcc51bc0e39fdd27d811551f2b4ca403505bbd0c1417be5555edc7130c8cf88cd67aaf1550675c199c4765c3eaeb3337125c319cad15196e50e84c72b2da89681c25adec08dc66ecd371f8efb92ef7b04da3cffa52b986cf208ec7c9ec241a6729a51718f28f7ee2308b6133baafbe7e7f34df033add59c2e25d82db8d3643a9cf297585f86287cfe15a46407096d7b829b4acda6e3468e35845fda9d82332a7eb2d272b3a1eca0133495eec95f45c57d0c4f112b074a107da713b3d765c2eda46863be7c59692b43c9a5a7f011780281591bdfe8cee338749a94b02c65f42ea46f9ea5ea48906019918d6d8ee95375a1ddf3fd9ff99de1b9a98149ea3c5312987591120f909ef2e5a8d524718f270126c3ef5f05b05f7bae7acbdcc8cb9270215e36516f46ff7e4a5797ffbeb7b0bd98e6acacace61478cfc6ef38b6ab62989087c7673516145a6b34ee16bca3198750721abab86cc0f38f5f394d130800aa24a502b7ff1db05aa67e8e34a0de51a6bbf5e4df982a8e86cffa52f0b00bd462b3c31e6ee51f68e1a07a21a30ee41b845b99fe99c9c5df390cf9c99926dcc33c4d7982ea5d50c06549ecb1ece35e60b99e98a6a73ea2abd073757e58a7b9c1cc7f8fafc62e0a2f0740cd31502495a314f3a380391c89105cd05cea287c6e96ec8ebe95f8b549d5d88fa97065c3be0739537751c0074e28df3700520d2c1b716903d36a8e1c5ae83f6a2145d52c56c15e8cfcc812812427417dea845216f985eae77eb15ddde6a92304924984051229a8b8465c3ddc81965f5bf6221d2948ba89fff8df7ff0f980265080fc5e433d5e7d8c112912d15c35c14c1b407db11b122312ba13afb8651b6e1b5762812382dafe5d8df33475e39c001f8208044b31d0bdc9ea6d326a4906d9215d1a33e900968cd36f11e7e752744923d0c8bad17278711aa969b2c38c9a0ef90c6a4d6240e645e3960c1115426b05af461e4ca41e6f7cd774cd0769f528a1f0784d29997b71ee341d83190b3fdfcbc3ea1c560086ea77bff43b7c0bc5d683c9553d989ecf5e599fc9e95f4a668fb80ab593be915732ffea32d28821c46920adf8ebf82f39fc6f99951b2b006b7dc69590f208b9c41b62b87f0c82c067ab6329bab15c711479e12f8d9d8b6404ff1aef3fe4350b29b545034c44589ff22dedb23c6885c941e78cc735c23479e7c35b0c569a30b400638d341bfa4c124cd6968f11358ad5f4b921311e74761f9a6a85a22f1d18ede28300b760a4eddba02ca461c2ec951e742c0066f6eed440c8e523ed02a71ecf2404d7cc33dc6972f4e13a974d9e6e56fd081ea1e69d2a5905d181dcac375218ce4b2bbd09ad9fdd2af4faf33ca90c26ac3dac44ed9867ae9af7b68ca9506a26996dee8acc76656362c3881a40168b73579e7fbbe0456bec6a472574c42c566edc12122907d00b9864fad2acbfa3992396589cad64520a206369776e71bc7bf81147403b77914d683da903d0ec3b64a0d316ca477a678495ad87625b9192a0e0588ac328aed3c3ca6058588bd0c19a80d22bec0194684b82d565658deaebf5cba0e28fe2f6ecafb74a5d412bcf8c5eda69358669f358c5091506fa71ddf8dfb317b264a3c12898430aa0c9b63a1aa6813d53093de53d0706ab7baf585c51fe66a5fdb3b8bb2e8369bcd375f6ffbecae2c0496e73222c2837e31e6979e39d2856c9d71bd754e714105ab79e58b5ce73fb87e99cffe9936a99364245096024a4ffdb95b0a5bce4c8e8a6b9e23a8ca18e77d1dee3fb6cd8e968d1144b56812cd22d2e79b8b5b985f4a26e3a13245bb05706568687c1915b0fef77df08e80f62457b60b4b662b52f42fc3ea2c04cddcaa43ebe86be407ac97d67cb9e9726a764e9e781ba6bb1c5b60c64b00eb35ce1c8b44792a9b6dde9a931cd94d492f719b2e826eb6b7519259a87cf11cad4c27e4e467185b6013fa57bdf6e99ae39477888652073e88944c2dcef0341b3532867545b18a05245452e0e1d9782f68833a5a145de2de59847de4cce05276467b90f8db777d10a892cddaeb9d744da6d803b5afad18dba55d5f44f461f37c4ee3972465d88e02074148171987552fb69e21a29303b4d9665a3979c0bd25546fa94d5b771a1c0213332d1a7cc64fcb65a8e15665205ea10cea20fd2a98c7fdd40b6cd96d45402f3553b507f820c986c19fd43e536ceab0cd86a8952c7c62d1142eb0cd74683d85d926621f10b1d11da9d271799c6586fc985f1b51d9c7f7ab38ca8be6f7ca6ac27eb3a1f8584fdb73732ba0625ab9856a67f93b3e8ff59d11de8839d3b74c6fa37953a1a679247d59f47d252e80322f40e18af55fc0bb42c2a9a60db52c69b42a907af502ea560f0f71ea86df4d88412a59b2c7e996ef84e15e9b211778fd1567d5b457f7e6f27c9e471b6dbab89be2ed703e764a3726784866bb8fcdfe39aa277e61872888c0a70191f4348e444e83d2b880e8a5123692837f06aa8eb957ef08b6642e4788e140e92e71de210beff140e97f2ba7508c35d749b64fb3283e0a88f9169d4b552af38972fde42c2e50256b5362543d2de1fd2f4c8ab66b8d339cb67bca2dbc410bcb242dd2b977782928f6c0c8927ccfce4932c10938b6a97a325f7cd719be743dcdf5d0b1711248eef3ee4a47fd29c1d7ed541d5d7c61da329d9bd56199d365e512f14ac26c816567339472098b6353e1cd72e260640b9d4c8d2fbfe1e7ba027b606aef9c426dda153208d2c9c8dcde5609b344b487282a971e6901f77396faa9b2899207a3d623c68ecbeb2595dd9d48c1741b452067ba84cff358036785b110a2e5b8f965eaab221931bf54a502f80b2a0da2d1f967d60bd6c9952f18f8b02096bcce39c2630b225f0c2eb3e6eece007f59ae756512c4d82a32e874f25ebccabc9682197dfb3afc6346950ea900a901452720e8e4f27164329b9c50f0e5c841317d42c367b455c45221322aa7b9e1c7632c324544e1a31170e96f46cad440e4ccfaded98e962859fbe96f566455813476e757d0eef5ed12b1d5e962175f5dddfa789b0a2b3bd500210ecbf72314bf3bdc0d655cbb8857174eed70835e5bb8d45ffcd6a449562e55d42a283d53a7b6a50d9a4c4afc91e4435ff1ad6313f116fac12829e3ef4bc62c2f9b79cafd2480ade8d7a5edd9e23f449e7196ec7d18e19d032302eacc435c30710c5ef8843bf9e9042ed3621493509d4c000c1825004b5785098f91cf295e02f993574dd80e1543b0a1022e9125992a50b70f9c50fc3695266b3b8a207c2a8f085a8d017e9aee468652e30f105573c3674884d309f81e89b69d1c53b9f2202486cb95a87d26a0c17b3982adae6a381b3105d6071d7bb58af6fff128ac29aa5813c1581896b7488b6051945cf2623de8464aea847decfede7b7136c7fd08fa77f2b8cb333dc5285d5a7eb92d556e3afd205fda70d416b25c78543994017fbcd491af4c3fa6f25de51e69ac06519ea950ac908fbe5a94c84f72afa82c5fb5afe3c078437716543f3b1bb966ec0f7d5c6db9ffd348f64001aa0018706663060b4dd53b3b7d9525bfe78351cc6e3ba8c642efd4ed3dd47498badac9c40bf151a167698f5e1b88f8f404ff066bfa111b73ac1f6beb510d1d3edefe322b805ed6cc4285f620b5c89a9bc36829496327f1180269770774b8677aacb9b1aba06395804134f5d697c55ebb8ff77aa3c08a50f867d7487e5cb6004da28b68aa689be70acc3ede2cb18a00b1f386a2b4de6095e1f8a63a98eb2e1c29a18204d272d3473c23f5f56aaa6e8b1ca4723296194a6100124639fae12ca50691b92378879d97944234c2a2f0b5d8f0a0e630f6e855bdfdc5060c4008ab9a8a2f7173ce3f602b6dda28337186a8175eb71772707ff7292c87f212aab6a82b083e288095b2700c2ec1feda00f101fe17885cf68339cae484746336488ae72a0c7a2482045b75ae9ac4ef270f2c81dc38eeeb978d276bb036d59b44180370cb3bdaab29c52caf07774879fb1eb3862391c78e94bf05fc74b8a4be1b3dc46dd857e52b53f40ed20784ba0aa3cbb2d0869087510cd6c56f61f1e0a91b0446d92ad10fe3cedbf9e896f57e285ee4c753c11861100d51183adeda7c7ade9f884d5ae27d1ab38877529e1f0356007860628566dbdcfbb10e27816e935141d3cc782b8bface32879ba9cadcd5b87003c07504f047f8edf940a247c3112d7e38101dc24313c784f56c27ef30efafd94b63e831362d06dd4ae5b9e9381617f9c3a359b854d3c56e3c85ec7453b5c0627a4ecad60a597eebbfb1a062401e70a8b07716c98cccdc33244ff7d7de2feb22d880cd1ff18c433e2fc4684306948688488b35b6c9127f541fedc645c4b84084508d2127d10bf5ba541e8a1f7c41a472de66b370bb635b4242131458266394e3acff962f4ccd34f9db0232dd0662f9b87e53e165480cf9d085afcd6bace6e171a35189a4a108ea3fb72561a2e012936d56f7471efa3e02ebace491c01633d0f641cd3ef712716532b9bad8d986f2a6fb6b164316737c3c4fba9056762621bd7c590dace78c4ef9d717a26d3d46d375257a0b1123bdacc3f44a5ff3282fa13aacfdc23075505bae353389ab7703583c8888b9d13dee0b0e0bcbfb5a6df65a4ccdc18020c8197a7971a3e23b0d0557615f12adfd7abcbecf86990054d0590f0d83c9e1da7da83859f8b34aef6a8acf53d429f945cbc2538a1da6d3f4663ef5828f80dcf1e02e8bb24517289627683a213e102d1e7e9e1896c3153c64e8d5f016f9fab458576c398df9803615d010a6f13dcdcfbaeb5e5be59b13c81ace666a1b2af4ed585ba45665c73c975ca2268c420c89def66000f15fafc9d7462d78687aa07f52e391f3941a21a538120a25ebb61d849c239913005ac3f93497094899eb0a96a3edc75769c76b7f5a9a1eef870a3b4e0a30d475b8573d14911b0387ce52faa325d76907e3e44e23524bcb5c5f5af42d18d2e00fadef587f2e9ea100ba303afb495c5f4e71849289e62ae483061fd069434443b081dcfb346e351555f8cd7365a23981659f9b1d9397a7a1db98207054f0eb709cbe59b18d7023653d0d267b5dde214acc74a0805a150f775a6c56cb49a492c20dd087f78027ab7ffac54b6e80478fc17af536850279658279acd27442703262cb79dfefb70a3781b67dd79328ec0c0d76c040ce4d44c19e2b834065c571a956c13c9e59611ab15385ee665720251c76d286910a5a1eaf14cbedc33ce4744ef6d4f9ebe5ed4320ebc6f85086500414e9ff65c120822ad9c2df6c997908c676d84fbcdfca655321b0758fd838e1b8541a7e2e67564f29185def5c9f64f8832b1fbfdf1ea8008882c43a718a129446ab431f0803408bcc7b0ba98ca59a2eb694aebd091f88cfb253bbc54af82cfdeb26ad7c2705d34485bc535b3fbfe4eeeff8f62b5d3d47443895ae7f636060a4272416964ccbbe497439759237e39d691ecbe62ba61ac262d92ae3198625002a2a6c6ea016599b199c1a7a0ea1f94009663e3f804d0f31f01556a8c5084347e3a14306221b920582624d2e4de4d76fc87e72c0dd86c3fa36fef289fd22d5ca8f11563a123512351aaac8baa727e71404916225725740c443ef83243829f838990e064f49f5102fa9b1d98725d9d8a880f6552021501d41fcdd1a6daa642bc85a8e13151f82a8b7f164d197376d918ce33036fe5591ca2b535ef266ed7155b589810f47de7b95c813f900908535c413c3640a8c4320e670c8021a5e2b7dce170d4f6982f6944b331af8c1217f6881b54b0b5c4ba7854a1732ad57fe7add854dc6b4b3b04ce8176816d118f983ec72f2f480cd6b00d429b17e294d1d11bbb9ceda27313fcc0a79fe1a900a07512909dcd95fde69bd325d5be3a7ecef9dd6c28e586f6b975eb2e6d55ab6aff1d8e9893d58c06d488af613dd52f3e57aa0187605b571eb73e45ef0943230f3eb783dfcf589713cc8187edccc002dcc5d9c6a5190813377d6d2d48d45fea0546dcaab17a17aae83a31fa8209d23d6bb0b48a706cd4a023f280cc40849db2456d1da1076832594484ec09ac443ec7a87cfffca7b0b281f2000af6f9d9822f601c19a5975c1fb9507b60c49cab1edd1e11d840b33228719c260ba55297ab6cfb4a2304519f690ca602ed718c78a270f2a7785d86c2df83d847250bf897a5201a75de1cbe987e3db935e53f67d0d620ae4445409c6bc5556f7a600574b0929b3cac718598806e051f43532cd54829dc17eae165e9dcd96fe0aca6ba63f0626d0cefac4044e0618a9dd7b9879cc49b8e037ae1987edd912a23a813b9c7f1d3bf622592568efc3e8112a18743d44b85914a3a96b595d1cf39dd34b56df1bf8b08a805a139c68383c3f0f338ca6e08051355158bab4bb50d4a07bf051bf57bac8e9b14bdc70780ffd53297e9ea351f85ae1b5f60d04b94322be87e35e1409b8cbd8bf6be550002c16e32add9569eaed45836d8ddf3f7e3d6457a4d8ea7e7a0aaceecf6794b26c64f3a5c8e8de115dd4f29726c9afc0ec134beab9b5f258b30d057cdf44abb57a52254962da8b5cc663d2453f4c94592529cbac01aabcdc6cde6fbec86868486baefa0f6e68c23bc314c896a391fb2b5309b60e10ed2758fe5c1600a925420c82f35032fba06329625aeac6d9ce8c2e2b418f3f8c0792894c079f64ddb702b553dfc7b37ce2e02717504eca2fdde5ab204c3727c5bb03492d3db2fbb81695cbaf1fbd33fa260ced3ba70a5c47a4986622def262c285cdab246fee09efb2d1b37e3b861bafe21aaafd18e658feac87f8f5b94253077593577edefa17d98285d4b4f3cf6453127617585a73b6743c6a0518fa2c65a09e6c8609b877f139063fb76af563840dfebda66d02d63b076b4ba36fe6a59cfaaedd09bf30c7cc942b50cdf9064ab9ad777721c3e6c9ceadbb2a0f6320e83a572a1a3333eb3c771dd68f7ffa723b7a0f7ea3184685da58c9f4d03ef7cf112be6283dc936b9ccc2f16e5802c096bbf5378e0d1188ba169e62cd3ffb7296043c0e3706b797d9d0ce8a6bf3999f1b00cfd92e19b8a0b5f0e1e806c97a454ecd9e98554fce3ac28c1973ceb8a1a36dbf0e237dff9c7342e6e5761f165456a92cdfcfdb670b3d894680fc0fcdc270910ffa03d833f1aa3a083c0b26be95b3652b6900245883b8687f7df07e35d46623c068adffc7bc2a480e8ec0747ff33b713c86e82ea982c3930c9d962f8d2b2aaa0e239866e650d56694fbc145f507eeee97f244f88c38fd9463fe11d349471a485c90727035e582d7d880f8af9ce640e607ff7b732b5fe2e98a1ea04156ca0822a68a5a56c7fb04d32abcfe3b94821573f937bb3d0a3524b736a2d4458599a4534f2c5806733825e6f48626ccf451c5dd911e4d8db2ff8f74118d5d74bcc0a64f87439ae154f8753cb7512bf8a421e75eff296b12680449b00d827270b85fb88e5cb9578375cec2175e11ceb59ca8dbef3ecde59fa426ccf0aa146d955d004123d23f9ecad4b8337a627c4ca197b33805719da1f59bf134aa907507822e2308b0dfe056d9a94deb2289912837bb50a711a821eff091e08830872fa94111c870b20e5f364ea3864243048d96f0f0a3a6fd2bed2a3c2f7c447d2725c59924bebede04c4b50a12a4be7f9eccef5750e4a74c3df928c304c99223adcca9de7dcaacd780c004046659fb8fbfe406ebadb28a003d5d9064a7a590b77e96bf501041fc9e3392df2725c0a69fee760bafff1ad20e15fbe2ff12e104f2c7f90e5128da39cd9d36f659e186c57457b0536fa9d0e97ff740580047d13ccb0b0e54f568f33050c3a4b5ce6de13dd7f2f87c873ef088bdecc95a2e08a43455d8246650eb72b098fbe9b3c6f562cc60f6c683079a9262880bc97ee56d1092149a14381aef0135ce231fc006a74519a6d87cd3c14b30a42c1ff3d1bd39032d5871e780d03287a7906a81d7e042386a4217da13ecba2b59498917e38b40958ff037f8e026141d438e40a61cecb2057e952ca396b4ec5edce89ea50e033d379d2f77bee2681cd25de9e34d3d74e349c31763dd5f3afee5716738a76408dc1e1ae0ad087ca3bbc9ef609b00d69750f48b29f31adc0a429c7cbb694d54137719f972f95dfce46f3a9e19fde6ab36d93594f990d461a6fb34bcef8d067d2b0cf9a249b9c948f1fd4a4f7fa3acf3fbfa9f48cfe633a392d3bdeab7edffcdf8af581bb444a212aaf055434bd78f76ce82e30fb35061a67219bf4074047fbbbfcab6826308ed160f9446b839b70c95077e5dcff901fca3ba453a2b6331a6348862b66d9a136230549047e31d36b79525755cb8f5b78ac0decfd7a0c814b76ae4c9479fc0cf10f20be18a60204e27c97402c37dfbd425b918410d2dbb65a7713bdc673d333bd0d6fd962eee768112cb9f1d820638921ca5353e1fac155e17dddd389ac63097a2c6f25f820fc77ba4a95722a75df389186be253bb6bff266095f7b275cdf15b0a3b079fb5261b602ed283694dc2178b8ae5ba38199e0a6b45e4288c70e8b6719c6e65f06db9c0df81abc8c8c58ca921b615d271c13a73302b738f753dfedf81469d7d23142d9c143a6ff8378bd68ca6e650d265315a17117ffcbf0074c348c0844df549544cdc793cd6a079ae43526663edb3cc7625a438c7819326db581f0b1c235473eebb77880c9a4ac6c30ee651fc4d5ea569f3e6914d1f797445ebe4cf7f89bbb42a1b3cf5820ee9ec6e0ef72445959a1778aa9d1d6e07398bf1ef805d814991fd2b5db1fb64b1386b8883d096967c6f969c1e0dcfc59033ca920e0365ddad6a415ddd46003a9ef641287bf426c3641b03c9c1eb372dae57965a5dde523d4262473700903b2a72454872811af6142e7a4588024ef1533dc9ee37c573d33ebb290a9f0916a72ee9ce4f5d794c21f27a6dd423421b6a357f30cecd3648559572be67a04f659538b5876ab8a387a1925975dde4351709ce1c1f5797b84944da26f60cb3485e2369f705676619821e6e12817c3aad81a66bd59c59806508736c37c857c10eed4bd14a43c4efe47305d29d7447d45122ce5fcf402be531cd63794b1350e5c74655c43d91507b9a2e62fb2c0890d55ca5675c8235e5873add105d29fa7d31efa74b02836e1462361854e6dabbd94ddcbc2a4e549d8520bba06d86570a90d3bb43900845db0e5b3538e1b1ddc7b0035cda868869ace180aa062f7709a3ed06fc9873ffd93fdb204cac5065e51a1364f8d47b5283d20b601b6c31f0b14ad459e9339f32003d3b444afec6930e698fb4371b1e8f58e20db32aff8a420e25dd53506315447065e2637b85ddab0e4246ee3ab7572d55d239b454adc7d8aeb4bc60219f35fff7618ae7c41296db6becd58eaa6b3011804aad38f284d9aae32e1fff4e8fabfae005c79513e1f14cd07e43ebcb730d73e6f68bacff24849bad3a98fe29c283db7936a2675f54276200b2a495714961675d8d51ad8f19f0e6ccc1ead3e8a763165a1e96c10fa9bae820e2babb909aa57668e15e9bd9ca2476aacb5560f8a2a51435ac3ccfaf9ae83ae74661590f006509a21d0c326ceffe0058dbf5e57cdbbfe0b60ab1ad08c3b5193a76d3d88b8b0cdc078ef0df43dd92db7f3e1579287c6a540c9f393095a93c9e7df77387f4ae9e67d27f6f640a0488f50508a911b90caaf9993988907eea605a03004d1fe3d686b478707d12e7593d0f0d8cf518dc19ac3529a8e928b7a2947a779e1e7988f59467f2b7468cca22aaeff1957628b48961eeba6ff57a58597547afae73ccbf47c9e33b73f0493d1fa0a5d9384818b8e6d118d95e5f790a35b3979610f1d4d32744e6ff1cf996c040e09efd4fdfc39fc74c48e8cca35cfa149d7d0eb4a02eb7237e6b5d5ebbb795bc2940d5d01adce8a4815c2a196b48c584af60ea89b458ec6e6717083543bdd8646d45cc5b10f4807ecd11fce29ff8e0909c52493f541e33fc8882e8ca1cf635e61287cdced2e2d7ff45dc0a2571bc47d4c695c8eac4ed00978770e27368b268ebef550cf57ebffc6f2c6126a251c567dcef7acc1df4a317fd4d5eec021cc7b5073ec31e5a63be34fecc7a287abbf9d8e28dc53d4413b6b73a6ee56ae6eda8bfd4a567222cf686c926339c81dbc07079b09babb00e21fd8635fa5e95fe902d70fad1917060da3cc7e8326fe0e6677475dac4d2dda3c72e4b6cdde7a4f629a254117b8381aabf5c49424612697b66e2be8e7014a8c43602460ac209937607b56da7074b681654abdf8a83cd100aba77450ba0c4da0094de18e8c8fd2799f33aa82daa3f50e01eaaad6a1ec0e6bcdff80edd2505236cafdc35f1686ef621e781ec4e9ef97396cca1afdf1bbc5138188dac0bdcad3152e6a53e42bab470179b4f45fb3283f8166cd1ebdb37d86ac0e8da039f3e6ab6d697b2fd43973d0b9a78112dfa100851a8502850a961f095ea832e7155e541ce7cfaf193d92bc3c54fd784c6fd18ea29739a8101324860d18a7298239127e87d4bb7e9852a0ce8234d650b6bc171ba998148339cdc15fa898ebfde44a5441b65b22687cae2f655bbe438f4cb39d413c908f94f2324309b611dbcc38bd4e07b802621e5f47b5ee8165551d290579c1fa85f0c11d1dc9b71ecfa3200f1b8f8faa53a5d4641e253b2066d456df02b51a7df1cf61f0610482aca2f0c17e5370a73afe35a83dc865d213e2da1aaeb162a0f9f549b01be6f03a29fecb86ce1ff4c33cac20332d8dfffd6650cb11a2fd8b0325e4822b6461a3f89239e73154c44a66502a332504c908f62f9298dcff52bd673d084b4cbaf520e9c349e7ba06b261bc4d67ce1b6830fbb4feb5d41122d90db7c0a1360a93c208a697b2411959ec446263b0a8d76ab19a9075bc4aa7694613327e5e57d7f053a7b0dbd44ad0305be11e533f8a33b65029a74ef1e1279caafb4e85967001de10f5ef92a407a25dd56793e1a9d71bf6b1d60970f293530a2dfe3ddeaaa18db24ea708be9e59299aff664031d16dbd15d446226664342aa92172d14560992825a5014c8dc4c46f63a98bdea7b7da2712145885d7061994a98c1bf64345bda56acc5d272d40a00436bb7b6a28cc3bd89e941a29ae77954cfadb67a3cd80e55a220a0798e464277336f0ec3ca9cbe8534a1862850c0f76e9081fe309b48df52154d20288506f9c93cfc9837468d4617db7431cfba441fba99757634adbc46007bb50bd601c5d9e74930ba163fa8ab7cd587fb8c114dca3196a1d6bdd059600a9cc38240f4f7c3c83cb656a5c34458e72c8a2248c63bac35fcc61a9404eb7341387d9055563fd3bfa9e462ebd43da2529ba861b00f33f593f977ee64ee8108ccc39bc61f09c3f09d345b6eb893e476d8c499a2177cdd229633321bd519e57edc6ec5ed15ba69cbeeb4402923d44768c24b700242e09aef23fb0fdd200edaa2209e627db08c2e8fc7c6f6c5708d2813a634e1b89ee6c6ced8c2aa2997d50bd825fcdb3e9b03dfe8d2b95f82fd12c1c7c41aefbf274117e2a7113f491e8aa5b0f7f0a99b3cddc37566e9972a408f14be2dd4699c94d8f990b80a9368b685f95d39afaa60f338d3ebb01e59716f34fe8e27db0feda7a5051699d6ef0e4135a30a7047aeb5bf9691009e497269f9a880f73e23d9660056f9b662ad334fd4cf9321ab63486ec1d22ea597c4e032f8d588f5220ac60118140e07b4d2aa0425cce737100c26dd40586239af377fd173bf32319080d76ba5ab21620ec00332cb8ac5fd974c73a1ac4ce46363acf04a62ef0c826b9a3102934d4579add2113824b3bb4812d96fc6bdc51e2700847e23c988dcf662251fc4f6dc3037f3e5fb0a725813ba92ed069aa0b11afb39ecf5402b94bbfd2c4f7f559a402d03aa060e1063cc81768ffea0d213b220ba8c423999297a5d010ca1120eeec8ba25c0e463915e772a9a6cd6270d1d8417a0cfc5c4406a32ecc4d3422a467c3ea1357c6d0d04953c888b6fd0b5742d8f85221899ece423645cf60368f45a869020fcf4a327cb991078fd880269706ed7957a885b97923a248d0c8569de1f1c84070105e03daaaefaa864000ee5b2eebd40d22c55691e47dacbb2a1a8bcafeccf9b85bd865380e5f6724bdb5a7d63d5e73e68bc4fc2e052c9804ebc27897462c60a78829242507ce8e7da80163f453a13aa8f92dc01c55d6b7757c528a6dcf47cb4780624bee62cb1592fde4b0a707af3351561cf74e21c30837dc3b089d4ccf8bd2786b393b0410fa9cc272266376244247e49bc204546b9e85e18fc910aac5ca96552f94051306a5cbcdde736fac0622b68132addf2db23a48fbfb2717e1c8b1ab6b95034e35b4b0258478035f46a87e673c2fcc19d4c2a5712d2c321bb70afbe3c38212f0059b0d738d8627e3c71cab279080ae3fb5a2092d0cec01e8ff483c20a1ad789ff564d566309d9b9e8e2014828b9a75e263a80b79d34cf3188d5f52b9f5e469b3f8c6c42c6df5c38fb3c3af3df814007901062239cce48a3ec0c4d778e9867d9af681009397f359273f841a94503469c1887dbc9a5035a42610c10c7b1fcfa3b6a8de2ea1a9294de82276619e261f82d26873072dcee20bcf3803053130b5ee3e6e0a464864da1fe3e626e2cd5782d955be4d7e903aa2eb421e583b483fa8bd1c0b1cc565436379f2762e2fa9e1a837cb607d736f052121cb6180ce473b5a1c8ff9109befec4db8ec29b6a281bebf471eb235614e61e214fe8dbb82e54fd8bfa6d79e5e209ce1f369599612f961f2f5f09b75d20c98ff252c5cd48725ccb9a941366e3d928178148f79df674ce5695f06ab14f2b8d3a1f20c9d2e69b3866a1d72e4eb5819922b7a4bf36688eff0778de627246da8c151a370f8f0245d2e1a24db9194b128b896af68c26783d5393d564d85836b336365c759202ecdb62862df50d58cdf32479852ce1e335466b8c359c6c1ea51ea28d700c8a795b6dbea199477703c1ed8af4cfef4b54796cc0e76be535cb62cd0d091af7e460363b46107ae9587607904a8d0535b511413c902cc196c4f6cef318f06ef36b95d0ad401d1ad82c569d9573a357bbef4089b98c87c188a0036fecb3274e1db1737c82a260fa809400340f96b09a2ef8c25d0747dccd41564317f59409d4e1791e914ff1c2921fcff2bdb55198d02e7a047cd9781b5fff739f42fccd60e523900c1f36d5ca5116d0d8ee812102609707ddfd8776a8fc82e7554f1410587f210dbe796cc6bed7ec26646e75428daaa18eaabbf193488d9691e4f2d1a0f6761372d9ef16c633908309c79bc5e956d93bb63462b6c9e3b8dbcf534bf2b2322d2cca12c8f95c39d4fecb1c56d6464490853f9685c941015d36583c4c4b368e5336aa3d5797eb49dcf17795b462633da4bc7a1b769ad9a2074073137e6c8dccf65fdab3a21d1e09f3ea9a4181613ac69c8212d4bbddf1e112a5cd3eb9641a8fd10019d4f8243f9ae1b7615bfd2fe73e0cb1f6083d10f22d8bc0877f2ddfebcae7dedefa6ee3dd0e9f16348bf2f5b419c953c25e8da7dec6c911322f8ee9b135db76e008049c9cd50bb37b4daa198a00ec3470d42b66d55f60fbc7d6f8439297047c08f614fccc6edfdf1eccb3f3e5f82922da24775697686392598b0eb5cc12ab311f0faafbff8c8ac4d2ded85b98f7281c9730eb02c00aecbfe9c42305fdd68fea806247e510a13c478e307b4330ddb3cf56de0cfc8c4f5fab4d335283b95b2dcc581730b58056302e437d736cb8ce523d4e98860d90b30ecb2eaafa8e58460d1023fe046a8ea7c2ee6629cce675f7abfc1cdb39326e61060c0a74cfb925df4e9135b113bcec83c20dd472fc882ce474b766ed2c9d6438e65120a3f5e9cd83915a446e970957c53833eafcd20ac669a634a053138dc6cfb3c112666a004df05af13851626f39072e5e562927da09ae41177fbc469b5c5e55610ff127a5449dab789b220b20823fcaf430145f6890491e2be81e822172a20b1bbc0c2864572e617191e6eae9e096853a480d45088e6e6027f557ca05872f39b1fa04946473126dfbc3fb21e652d458f0dd5204e9a81c0026df0930f66814addcb5f43911849447dfdd2611ac6aef4da8b92861072a68555176920904587f526398db63e29ffdeb8d6333abc163e9b5a72ee01748998911b7bda9586c8477f24b5acbc57730bcfc48194c70ab7721fd7fef787b1ef32ee6d734aec7897bd988a23927cda2c5e59d9927ad4f6d689dc85d46b5c8d1d8796215685fbeb140f9c9f5d1d2a99bb7d059a9bff20af3bf66937e2291be03f6bb0b7e5ae148c5db44614a5705dca0269546e116104125328ae3e051d3d51c47a342ba4ed6e032b7a6b5e49da7a325b76d2cb300052984a4e0accb020aea0f679c18aecbbd48cee264c6a554688702c7320f426de4d52310ad14bbae061f1f6e89df3465267833281fb18a93fa635b8c7abc4692fa852f6c104e996a237d43aa440e002cbc86acd042da53d131134e0528bd01852733c9607d414a0195d50ae6e2e3c5b0e08b596e3fbdf0c839f74062923ebaaf42563c498ab6e35c8cbdb8a7e6fbc078c1ec89c8d461a533f10832474e16068450199aa5a969e263bf82fadc349a1f59f1ca6e8f5d99443cab602abab89d4ea678d74c133e5507ef7719903e1f3cc2447f7364cc379a2cf316503e78e2fba4b591e4459672ac63434617e7b611207ad9bb76e3d8f0eb2db8a51d7ba0c6fe14c1ee10160d058f4bdcd5b0633fb5cc930b02e427f43ebe84226adaabb7284de489c215995806907b720b94ba1ab41cecebdf51f4a4fc91b0774c133461a9e4b00ff947284707532d05957bf2f9a1f3c3babada42bc932628a73228eaaf76fdefcd9ebffe626fddd7c762790779fd3eebaf0121379902b9ae61a45e5c85fc1f0bb9f557f25bb32169a4e3ddc7499b197b205fbcccc938fd4d573b68f92df3ecc934ddd89935bae530ae3b2665db2bbdd8bb204423ccebf94e181f1c5b2c02edea7ec9b85d19f5f9863b86e46b77c48075660b8890ba900c62ee0ac804d36051dca52cb6fbbdf3e66479720b3de3b470d241920250c82e93c6eaa873c52c6389e695b56b0e48b8b838ff8061a1d983d6010ca70e1b45ee1de4075e8b97d1eda0842a679a91020176c1ed39963d0e49f70f5ad064b0fac3d097a6be1ea0fe8bca316666919f547a46be2c7eb23759d8161cc5d308fa9f53a051c7e54b5cc6aeae509478abbfc6e07a738fcf8dd66b233f1cda332dc70b0cc480fb8c47904aa712ff2a4864b7ba63c41a6405569a819e7baeab12b62dbbf8fa20087cac287bff1e80e24c29a0d0230e5f48b5b090210d68a0c40a65c631203bddb3a9898d1bf682e6e737b7407826683c98a3d90394e0ac693e411082f44495a8f79dc76993036120ea8365056df7e936509b92e7a69972275c9797490c326584df58d5d9944719d1ad44bffc32d6990fca12ba0d3ed28f2031a91a09ee23022aa3d0551f1e2ac8cfabcda268205e30c77a1faf7f73c99e4fe60ffaf2a9764566c56c987aa2c6532ae77681f23e1ab83939754e35cbbca472189ca0b1ef7e8a4bbf35a87c88af23e3d4f451924e4ec82aa49938d840a6688f27333e10cc875e9b3838c799f5eff8ccb29f0fa2f3096955ef2510bda20407497b8383f1dba64d729c6a6acdbc5590844ea7f5fe7fd667ebcab98f4d9703d1abfd61261a689ea3df7d000ffcee10b6813749367bb4076e2b96a33fb84cb77a16fd363c157bf731917bf63676cc4180516cbdb9b377a00c823527a0eade2de3f2754e9d92b60babe20cca9554720e2bac51b6c39d11c69be2bcf28ee062b628257ea320d232c3d5baf8146c103c16c92cfa9b988283053b36225e11617f2fef48739fd81ca9ea2999771a472ec46a6b27a2fa0672d4a38633332808a514f87d80febd9ec0a47e7076da321989750cc8a75adb0895d2b2f2b722a8357a7815d961c7e2bcdccb3ffcdc23bfd2e9dc974785af96d9f60e418ead553e83480251e53fb4b159a90218fc1182b63eae74738561aeb7875f456182d887970e093a44bb69da3422a1602024eabb2d36615567fd6aeb12406bc40414338064a02f63b1f8602657dff2d2d6217888293625abc16495dfc90411729b7b1c2395477f87f2042e9e08f4191c236b7269fb2836a2d6a31f292a54bc9493b5041355b8b64d3e4cedf82100899202c6048e37520d9c4cbc03b6dd320f394b6ddeed216ebf8df340ac4803958b31f194783f6f782dc7b98b42234624225e0d09eeb7fc6117b346e72f559362142056f006cdce5c3cce33b0d753c93719ac43611eaf4a002818cf63e0150bf32979ac507d6fa6ae22c408b8cd9f211eb84c5b321943f7357c6209eef4a2dd4fe8cabf493a849722c26603698d3ab1c2813617fa325b2fd70690e8e351cf8e7bd58b0111ab3a845bfed84d9771b672f6b28155433c7ec1d5d211fa451a668ccf313a68c07c345f0a947faf096c585718244481097f933fefff50de3d367d4f4a19fa313ee47a527e51ee7db60e5303d93f1397503c53dd9c1060204d715aa29993fa5c5509c4bab8b20d64cca728232c932e3f1316cca33c993cda8c1a55a4f5628232bf36239c2b57ccd37a6b7b4211baf2b70a291191306a4fd2e39d1da9cd4d0d2a72e890b12444889ddf60b19b4b21430515acf2a01346bc9bf6c205dc0dd81d974414db41d48f2712f6a7cc7593814f183d662196ef6e3fa8352c21512ee34ea0e940d51acb508a9c8f8426f68a311d6d629bff800f136628a783116b7d8538c14108122e1ce04b108b1ea562f3712faf30b9a39d87e362f70e9b8cc266202a9fae745c1c2ee00e538b44ea6c07ee28aaecf90b87a6d667c884427f6f1d36249d27bee544d3b5664c8a8f3be96c3568625085627129cb465d115c626fb699b2b914677eee92727e11d861bb771dbee75fb09715dfa917d48d15cf3430538848c12b5230446e66575f68697deecf0bc478e759d1fb46536dbbae281a8d83da6c947ce338df39d85f18b5ed111db1a7d19de199ac354285dc0ca14828d3b55d5ab9c4d321583823b97774a0c2074fb2f72879c54bac0bf73979432466f944c34464e6dd53b2221bd4ec9dbd4d08cce5cd5cc80c63774d8f3e59acb660575435c64afc4eb27e81746d5f9e66ac76704e94fdde2bdc4257c55a9ce3fdc63d45c257edeea4dbe2d0fb66577954700893c5ba2b13df89626e4d0eb11a6443ef4920cf87abe129bf87cba09540e370e2b55fc16d50e7388f50ca0ca24d1828318401744263755880e7e74a517033de6f92c413beb1aecc21f48ee8307d8e74f2aa3a1f7773cb3651057244457a413b604e8c291ddd2c8791667d2d4503ef6afe14d65d03e91208acfa608abb5816fd42b1b718f719b5589cf50f79751011897b100f3cafbb7f272a7ebc0933e90c9808ccff73dcf8f74306d4486cd15d696a5940c54653969d1fcaa585b7911865b835549c2b208f19c45f7cf3f5f98c3c02cf66089431e82f31ba258cd8b7165e3ab0cb14926c0541a765746a34c24a744dd1814fd8ea9427424cc0bb5e790348df83f82e3147732c74946f578ffc8ff3901557209d70bc969117684a32c422c54cec42203d433790657d71cb484c3d690c8a86bf66df9533f44c0f29516661184ce1507ca38b7dc2d5ed0dfd17165df8034710f62f7f85ec519888110f9f96d87c558f7702f2ae57391801da525d02a8f5fa120f70a247b46ab8ca48b9e9d5502cb7fda167b1667c65687fcbc632a64b3016e3e471a7bd1e3038998b21826dccf71b9e6d5e18c2a3bfb0198ed6beb2f6efb135b3ca18711c5d46e4f2ac34c05b017c9a19edd03655e225b972ae4c3a792d234e92bc3a3af5fa671febbb28fc21e0ea57f2832ccb9568525f8c6ac18c158f705c6808a852564979424cf23437abc90483d83fc3e84f79d5fae353ac6aed70f64865ae15e15f092144d41dd8811b9af9c593917e479c78eb39add8b9d9cad89129cf4e03807d8239f20ebb49d3e7e4f71109dc77ae671a36b4abd35b2241284721c0a2aa2eff4e36cdaab2b2ed2e14759a3204c09ff904b14539de27c16a9de65d6b571dd946b141e3eea1bbbaf23ff59fabc6b53e6d264382cd726d75d0afc84b6e9cc995daae3c833228553617572b1bb0f25d176a4dbbd1c3291ce07351591ab93d9bc7533f562263ae84b21f0496449474e88e2326c408babf8ac87bf874106f0b9153a6ab46029104d16e0e028400a73084df2aa0ca7cb5f976e5f2366a946df047a2703d03a151bd8d8bffd67f79b40472ad6bf820b7122a7179eda827e9cf3ee48291ea3b718e2773911b039c4ff4abc2e2205e388ab3f70632983e4bf5ee4e43a6bb2277de1a6ac9995461a08a990afd40c8ca74515363becd0341c2552eb7e8830454cd9ceb8413d69928204a00da044e7b03d935335879578574cb72e54928c725eb26fe1deb6515dba888d527e6c30ac0e9ade3bae4e06622db4712ac1789560efecb53cb2235effdd79f71193efe3bf34150495a1751577049e63acaacf546e34bbfb4df912e1c3d606da7fa2887b9f023f4187ca8232c38aca741fb5613c102f43301c6331a95a54e3953c535d06ed8aa68314b7b3d6e8627e65fca2eb9ecd18333ffce7f7c7185d496cc8412f2e75df3599955c27b99c6400642f5a575c02d0aca6e9c366cf2e10113504a646d51973ea203949279c75c0ce0990f37133e7cf5ba6692f67b299b34067d85e0df18915d069472e54cb67da07d1370b3c3e06522acbebdb67c4bfa75eb3d69e419b54f1a807d238e0228eb4caa1825e3ea0d81104c2ac4ce425534b4c9c0d82298348ab6fffe8a73fc58f6361252bf29db507725c72fd526abc7ddc646251b44acbc8f5d55d6b18f80db9f98d8e28d4b893bb50391104e961d833aaaf63dc75921ef8fd6d100e23f9b73ea9f3048f342d4322e54d17ac551699848e889e79a5d4d7abb70a8e8a650fe57c871d27f6633f7648a8b21310d5b9deb8650127caed6641af355bebcf5c6fb46f4270a22e3003acc11c2a4f439c25d35afe540e7a915e9e3d8c3cfcee3dc3d8ce721fffb5e570d7eb8a1ef3474abbd824cfe5c2648001d6600ec95cc9d1dbf66667c185969ec3d7a2c3bc79ae34909768a5dfcce9e783b2a65799b5a533919e8041dd8446acc5cfc636d19ffafd0b53cb4b9e4f7345deb7a39b63c5aa5fac0db3699c8e506568415fbd6fb606bee90816fe9a1e893146f3b06c862e8a7658bd320d2b418edac596d6b5d090e9efdac22d583610e924767c407c54d95b23f0de4bcfd168609056eff8f65013e17f21655e0f00a9ae1b4bbfe72ff5a77dabc20791ad0aff2c29f6783ba2a67e42bced4e7fec0dfb55699d5528e528f65e5feb36418d544a8f97b5ecba311c7a06b70132e219e5f871dcba1fde020692a65ab8ba27729ce1024bc1a226a28bf05202ae4f5752b4eca0a8484162c38cf37d085738dcd11850fe52a2e4777046ba3f781ed98c072cc6c28465b756abb3647af49313184879a3e9f27a73e8ca4ae32eb452df165a4f44bb2dd66ee8007d7f2fab7e22b4132f3620ba3a1b19e5b635e02c760f6f83f18ae948664e977021f3f31031a61461416bec22e10a9cef9b94f476b72052d0dd7f19ed1694cc15ef190c43c4024c3876cbb536a89beeb252773fb74eaefa34806b3df8c5d19d97aa8cbe94eb95d84e6ef309df76ffbc2b55d9e9a7b49754589ca2056f40dec501ef244e53877f4861b4b4303f4842868912ed6f183db90162bb2d2a00ea34cb535160c09ce27aa71493a037a2ea4ae00293e455cd9f2bf36de50f70458ad96279acbb828859d1e37200cabfa098fb51f8e46534cae75c8adea3de44a11be8803401696d746ff0f62bbdb2c9fb8030340457021444dbd63825767a6e9328b02ebe506e8b33264ca8acc2abb027dacbccab96a814fc3748faed0e97f90360cc1b90283c75295492518915869947d0a1b042d196c73879d81ae7151b4fbb0b0620ed2a96b6d034c6feb58b8e50340917e12bd59be7ebfd025396bed81c0d7f8b9f791fbeaf7c620eac8821329b07b236e71e754d1cb374391fca09e546f73530884f9b04ee8d20b00624a7c531df9387d85b5773f13312b51412a2c1d2011d368aec2c37e8ca263829ea9a89c21bc87cdf501b0ebd19302dca279cce7f61f7ad8327ce59833db500b39ff896d16b950176df4a0361e8239358adcb2b8f89c2c8b94278da6fedc46194d1a0a1d229b1587dcdb8b4dac5e8777ea71bd97044b82a833eddf699c68f75578677f13e17629854f7ae4d53a1467fd46b14b2aa88c34cba2b360ace61c37f6bd906f5f6c858de8511dcdd7768d37bcce62f2d90e821ac2669d6e79dfb568b53a2d13529a801c7cebe083de7d68b22e1a384b0add9290bf586b45c56f4d76bab2826dd418a82323f342e244895b13146466da77c66bcd4807da1906bbfd424240083a530a85b2f112f5f71a06be29aa8adce16be392522518ed6573b992848c549795f0a203805f29e6c6117d6f0488bffa9ab26d194a87c036b1760c665c01c0349568a74e8fa2e26b8fb0d42cf1fc996bfc60fa24493b4c32f9d9e408aa2f646acca64d587bca17af9260b35a29c92669ed5562794cb5ba1b03288e97a136cb87301a3efdd608a0813438d8a9aea84ac307f69d7a58db388cf22b27626b2692d508fe62a153d60faecabf4f36624309382f0604ce13e7248410b741e28d568bce7c5fe317c01ae7a045eac7dc9e1f14957ca08e4522f7d4aaa9c53dcc5f55d9ab9c5f45afe15ddba8a7ffdd584943abfe6c0c164e85fb26575e24eced1046ec4d819b89ed574396a6e57571f32eb0d7fe67a9e66830ec9ed0632ecb9ba32249f86d66c32127089639682573ccfe2a32c4530fd756df04704863006ad79ec5ae6a87ed296877f60ea5639a26bf961ccc9314c8f07df5e9a114ebf864a69e33ab6de6aa166d996d6460518628a774c121dc1ab950cd2cde1547a15d5d0c8c6fd70ef3150600b0e5b340f0cbfaea207bd76092bd6051abbe779d376fd5b1e98402c56f7475681182a1120017257610c3cdfbdcfc78b0d949e022edbd8ed9a54a302da37b6d1f33253e4b27438f2d2a1f6252bcc59524cecbde3672632dc4a08cfa9b3774301314196e5d4c9772ca6ba0a004eb5040fa706ee2aa197182c05780684bb32ba29817bd50ab26b7e427d5b40633369a9648062fe121c4c5c548e22720eeeabccf4031bd83e6acf77c001ff4d759f122642f669011568591f2d3ed991bc0e7491c11ee2f2db4e484c22b722834839644ba060a27c1e0df178a3482320760b0bd0868d6790548ef87849b68f201e85ba2d7d8597130272d32c36893197c6cd70285a52e2f9edac10a6c7cbc9a450600ba9071c46180eb4d0f70dd859d255a8ae908551d1cc85d4b5b94109b88f924c3a35db4e58140655d026a8126231411e9e7b9cfa96ea1a581b93ee36d6a85b61b47b62f6fcc5678b96fa65d0397408f4d9993788cb24dfaacd4aa2a6c9e018a92bb72d32a9509e053210378f3dcd81d60a9c27ab7b194be5fb45f73b6f5a72c1d679a1b8e14253f1ffe767b6896c2b9a9d6562766e6f3a7c373ab17467635c03b3883228ffb85988d7a97d49a93e4483cae07638b034457cc7cd664531c61f8ac55aa3a05c86fbe0d5cc2f174de2e2b50dad203ac825ad8895afab3a349379bb7bec1d83604304c22b6f364956728db3ab203c80747219b08bce31fddc3f896c2849004e682e5d78ce93da22201c66016167760b4f3cd5f48d3943d76ebb21c80cfea830155225976947a856db954fc34ef18abc6b42cc8b95942042c76df6f6688a43e7187560cfd17ec46c29020d7c2ada54615bf92339363062c965a300648ec5a51bdef6e7d6a8d61796e14b6dd048c98ff317958b1a63f9b5f194e41e4a3a9c8e9ab0a44aaa512780d1997e107d40cd2e0d6a725309eb25f8b46156e380358019426fdd60c0d2bc4a23265dce8d685564b98bd91c7af5978ea317c0679fcc1989e72c7f844519586e4a2afaaa44ca4ad723ba1f7c7cd3c79e5000b4b93aefd16c19973d5b27599b610a6d742d70f15817ceb2325e4037ab36b06bd6670efd4fbef61ae737d323332e5e7afe8c054555ba4cda1625d9c7e624dfb2ad8c4065bb061f383b2e83a4e292980e9b872f12172de5eed7059dc180dc07fcdcff404aa8337130525e18ce954fb3ff00d5d63271ae3b858978981f3d31dfe09f46d8f1bda0351a3f15cbd0d42aa326a4f3ba7d0b349165f4150aaba75ebaa345fd808359a114c128ceeb057676f386b97915533003d68677c2dea264307eda0c0da952b181bfe2a469418190f5de40299852db3f231721a02bc32c5af587638c83ce6b299e1cd122e78f9286dca71c9542fe1a4d255fd9de2bc108ac620e54e2de10894c51feeb8d34eb0a4543de2407dbaa311c15b8d5dd74ca98decd4d4d35fad7fe5449092e3d52f93197d24a81867a66e22fc3c4e133292a6fc3151cd4962c9b55a56a264252250a21abaff78395830cb2f47bd171429c9e72e880f99525a5075b608f8bd9eb797a73504e704ccad7fbe5b5d6977b6d9229036cb42c6c81ba8f5d9d61cb3ed26ba5e0b70f8df66a3425a013a91615a3a80f5df61cbf8434ec217eddb88cf238d4f48870256bc032f78658bc6ab7856de674b9380d0c4c82ea070e1b46d47673625bd234a5672f9a650da625f19b86928ee06b389f048d3216a1186dc723f6394923b22fdf486cebe2c0d9dec0d2cc98fa87bb9bab8e6d29376b8d41fd4294788b545d8f0df9bd1104e8d208b8ff882c2ebe490b660a486ae3f9292b6118037fad59695c530b48962c6808933c4099f43e711276d1cb8c4ec086413cbfee7409e955f6457ab2b739b02258ec31d412ed6414f5c1928dab42c100d42e9a56fa4670a23d8c477277a44ce0109f65f17f202fe166f18ade8f1efe9a2ecb557f0ecb92409514a22bef3433d92777b642c94e28c39cca69cb05acd192c169134398a9760ac3c2726d047187026a612c5971dfd231f10c5f28798f706e66d1e45dae71c9bb51aae391fbc69f961aa102de61f7bbeb8180e2a4f508f6a95a735ed464fb773d25d4a8e0e1f025e3ad29b4af57f89ee810870cb46a615eeded19e646897dd1ed5fac681cd52e207fa10d60a8d6e864a465537053f285e79c28d70ed821ea4bcde3e0e7475dd5438851c9ce5bb97842e862ffbbe6647eb3b441a332d31d6946d13f03aca5ff47c1b9dd8eef29b2b1bbab58ceffc88d15a224d2caba3d54c375a9d1cf404d0d4b189721c79e078861ce205acd41d0f1af0d227e2888143ebc03a9023b536d5bdd16c8f42f2d08a144e6e06c7943d5b2c2e398b774686cde5a48b42a6c932d5bcf089eb7d6f37c8d09a42e52c592c5e40aeb781d02195fb873ef13855a1484b2cf68675b631c33ce6ea4156482a3cfcf64369e71bd972bfa66720930c7fca4c297e95ce321628d90bf51de4242ba8211bc218f82388f13c7f9024db470708341781eb6cff2ca2c7587a0a00769eacf6a39ae9a658a659bbf7ee7c7e6b11cb6d7351ed81891d743455aa6317ba8b42ec586f29ead679424898fb4eeeaae330e7111207a9c0cc6b2473227315120a531ea256d6b3d2988a56e46974abd9aa28cbd3a7968822d4b19b61bc66d5c4dc29a018cbe0f451ca66b64c0e0cc1db6bc3029566521c66ea926ebcc4b025e8bf00721dfd3eba292c57b4acaf900e19fce72f3d97a8fb37fb2eec169ce02e68d48898c04c48f4930017666b7326c0cf1c6d6a703cbc547a655ef78e09ae9acf7dbd40f74db22642b4b21a82d9b13fba7eea1e033d5de3782a5349d50c6eff0cd038548722b3d30d384b7fff1be958a2f5a4f02d5db5b467ab6789569e6943baa9e08bf99c3ad648dfee4e280490a98ce3fa955613bb1b4f3c5cb2e131c299a559f0dda9e1fe22a690ae24603022c592fe4659abfd60b20f109882c8cc9efbf681c2756feef8cf4ff6b0a1e650441ed79efba8b0d5e85199f676e7625b817719414b53d83b1d48d650958ef5f1c063907df2832f5dd3230a552b452842eb799bbc7e2af4dd2140e66568128746dfe5e288bd18d0723fd6254ba30cdf00459d64d7e963646eeb92c036d9e3bb3c6133088c1a7695b29b2820fa24ca9c6e665b953cb1a99dc036c2e1eb852dea0b84a84501e6d83df7c138807ce89aa5d16bb0dca36b52fc7b7765ea2a46093f9110405f987dc5c00cd5446144e778414772493f56337d4e58971b689967120f5785108cf30ab726d5db48db7358cb3d25deb35e1058fc7ccc05247ec157e59fe16f466a0eddec2a3ba7f241ca1b7cc73abd5f3505e105297cfc5c099f427f0275e83f5f479ee2884f71311150eeaf0292d0df7044a8322854bacfd73c0d15c82b5d93ae54d91fc071f328f530066defedc2e1f70993857b9d621cc514bb6841380ee1813ee5b72c42aa17e5a999ec27785838b6dd6d42593cda4b75ce7ca2d8ffb1d877bee9a3168503e6a80b91005ec74665f6eda89f6845c8719fd337736e9448c43c407d277e7253facf349903d7185f02166c81c964df389ff49ae0830f93709d08b3c00a3ecd17a7ed0424f01789c0372ad39eac48b8850533ca93822726a58600a328681bd944160c0ce3b4e2b1b74a0b2c9bfbc1513eb9e9a11e31c874eb2e9c8913199a725e82291697213f687474f10b05cc8948e71d8e3cbb91a4be5407ff4ef39354e61d880db83bff15032cca2221d999c723aa107b5f3f8276f6b745622174c16baa03c878f1232b11eb5e07a00e432248dc4b3ee4e9aea80c4eccc26a7b21e13c762343e98388b2dc7883c1c11a08ee4ff35435b257a8c76c9146b653ce1a0844ada8083332951b8374f113c5e6b4b77a087e87fe454ba9088496e04ac42aace5a36c5767298dd6d4d3c2a5a2ff300b08e263f37aef210dfde6008b238d3deee08f9d0b06c0735ea8b32c6efac3513f462b8492518629c096419b691048d4a8285b7d8bebfe952e9f92e9aa5d657b333c8f6de1fec0792a4a44ff56943affabd0b01387126fbdfbd925d41c4e95f61a6d9bb20bbb2bc0c113671ed5076ad2f542fbbe5d6f58a47328613a56ae476e1a2d19a61f4334350c3d1e5681cf675bddd8becf85f94a60b8372ffcdd2454368f877e3996edad796d92c073f52eb97c6194ab436b5217d09761194d5baa926b47a985637b146f48bbf122a2aa01dd3cb583fa327d893b78b609453dd0c58285399ff69c02b4172aec0ad216a03d792bfd35ab6f80406994bd552b897ae3219ba3062fe027912ab4b9018d7eb370761439b5401f60cd56816ea6f0b9e3a15e4fa0ebe6dd2a36a98d170090f674fb1dd11d9ea888f50915d401dc4a0c33bef30a39bf885bb874cd1bbe3beb70cd87f0b6e93274b3a546e2a41beab00baca88cb15f02a6f4e3bb64b7e8d5763cd251a47820fb4c4d967d70fa9594db6464160232b7cb3969df0bca145c0b6af191e71bb97096495a3f9b77301d014122dc8477bbf82894c07c9c27f4d135a2235a0afe8feab7f1ac46272b3d3ab953ba2689546c468207f19057fd781eaee22c611ff704aaffc771e2a7e660e972514c32b255079c1cecf47bcb922cd2b4020dbbeca0985425f012bf542170bfe4002c87d7c24f96005ee60a9851887cd7b0c213d60d6c76bef8ce4e874241818585a5592590ffbb2512462424719c6994eed7a580d0f4783d97e20f298c6db3c696676fb8d2fd4ade89715335d1182d050e69254812864e5aabce289745002b6e16c5f44a3f12dacf558e348f96aa61809b3cb88b76d89014f4433de8cc264a5d03873600ab78aecd753225bf8dd808b8b7cdeeba4852f1bf526a00b0434b2948f8552c6654f4a1e59b99cb1bfc83fec8fa880e0cf3667e4cac12ee264c4d48812d67a32399ad069cc22071aa7ea8b4fa0e6483a0ecfc472f1db08e85438282a27ccb6d99358aa98d2083ffbb4c92a83140b0a10336dd4df0e8d06e05d4d102d385972d4f65ac93f00234ef8f3c14e7a863e1127848af41f54461d1b0dbfa28d4770e32437a41415d57053a7d6c18e5f5be510cc2a09d3722f3723a99d12db6980ff4d7cd8fad084c5d234af08aad5b2645023e6290f49b354379b6fc69a967d08f4b31390ad8ee4503ca2e1c86ca6fafe5eb6242b31219e2572b08f2fd89a229837f75e6bee5892d292be30ea74c5d9cc7a1f3c5ba49267759f811ef37beadd0c5135ba33121a519726492aad263223ab0a643f7ea30b2ef79f119e1f37c86fb5bd5d2d031a87b4696e0c529e9b478e905beae143902cf4a839a8247a7ecc1cb7f6fda8cd59ad846c32b0438f013d64ade680a6ff94c278a7f1f14be028ac556fa1bc16a20d81e1d13acdb6cc1e3936f873ac0858069f3285d6f56fb62125c69c004eaae54fbd8aef0811ce3b2dd1bb28c60a258ae67662e353c14588f100fb89e5bbe1c714011783e2cbc502c41c8a42897dc504f1cba76f32e0a3d93c41c881c56cfac4af9df7ff1408091f231f0dc4903700b8ee84758c33beb54c473df3005145a464247a2f7ad8a4a1ac45ee50750befad78d37df370c54396c95ed10aff679b41a966e9b2057ffdb6b1a400390e770b7e52ae15db60ab532e0599536933fb93640529fa2a36aacec012fd65ef379f4a6e5fd208d5328185b04ce08bc997aa81d2255c49f683567dbdb857dd759017e16f401bc4fdcb8076736e153d0be7baa41aa6c79ccba3c70759db2cbcc227f2ce71036c015498c4bc6d9fd71ea9506e80efd8bcab29d7082f77bafa2a7d89d1b263ff1914d11ecb62967a9c046552d89709e9294efb0f75b5332167eb03c285b44e6c556265f7588f7bb79c587de34ce6af80d4670c25289d4149708fe711ac3d4c2ef14094eda53f55b7109460b7e110269c7c7abcb433b6f174e03c64b5e5fce7bc3980480a638cacdfe5400ece0edb18c95c686d4bf12bef315d6ed239018edfa50a1f8925a472c4dbf1dc5ab2bfdd72ae3e3075f0f6e07e8f78a732bbc90387182d4865472d1ea69679419de1918ec80f91c5501dc4a799556782d2545d575f3ee0fed5dd06efa5cbd3bfeff5f5597ccfe5684b19ada1d38f4c3e01057ed0b9a12a3931c2a8005b34fe402dbe67124fecb8f47b835d15b672601d90bf1f34f239b4879c82c98ed3512e17bed75df29d504a4b4ef146c9431201ae6962f6a51fc49e7bd3ba716c53914b8c3acbac6c17863db9923ffa127f2e4134eba1cf1e2d1298c1c715c6c15c06a9c21300059dfb8d5c610357d8598796b4cd294aa7af2c79833c3936bc95b41c66ab7652ec83dcf1895ce3383ed5aa859043f756ab83b3cb8af5a20fe311d4a93ebb426b6e8fd3b35babaa5e734ec44302f9f6c3570c1c89fa9ae9c0ef775f3976be81ecc6c50a08b4e183a03f71e0a47efcb9c0411cc29bc8773b1b26eab30479fcb5703df1ab9e400c9eab978060ea8eacdbea0c52ecf30cdbf24ce070bd7dbb2f96de5cfdb7da4bb9233d67daf0fb42e428ac24b2659eafc8adbd8a8f86b6c98330c4cdb7f37029ccac1fc00ef0a602919210570ee3abf3cd91281f3af8d75b05ab33bce06a87c05e7949ba2d408cdce5b1ac897c1fcc7fabad664965345558d6544a16e0b399cdb4f94c9260b66030b28cf9153582af6a2cee80ff204594e370710bd39c75baf7f1f3d9a77a39c5f32e301b6a30742440deafc1abfd7a133be2f776e2c08913f3795ba43bc9136a665a1ed3070396393c21c00f807161773d7dd0f7748f5e64f0e6f654b88c1d4cd49dfaef26053f864a1ac91d3c6098e31997e0200d5c8b0e2383918ff3140633edf1b7045f608f43d7987c6dc1072002bcf1750d25c046b76447cae26fa4d573c06379213affdfe9a96e6bfbd0c2dd8ba649df8ba1a401ec5ce1cc1fbc38f87c0c44c8910ecebe7fe18f5174a69c0d2cff5aa4f0cfa4f76ef98f95acf2d4e6ec525d3ee019e2a447387228388d007fa58637e4b7c6a3c8421f2599a7ae378220998257abb1397a13c695f44d6827d440d5b4a95b9f31d6e59854fe543424c4415b54976fce2faac52a77a3a79b83a2e21a91c63e342f057a771e788258495c1d97a58720e507493c41aeb812d8a411569748761a66e9144062e05c4d5219b55190e1b77b11e805174750dc7691c047050fc307109644db925bd7599726fd534ea128797d40a13cc8a36ed74edabd7bba10b56697e5538bdfcaa1444ba19a1ac3395b297539589ba25c2eab8cb67ef081cb0b26d055e0ba8c3ed27ba065c18ce2388c87448867a8c8b1cb4766f0aca6a207a227a7b1d9e1a876c5d328751e6c3d139ad25dbca27249dce993a548315ec769471632bc25760a1d964cd4001c5b10947c602ba38160c700fee6acd772b955878c06d8400a23fd0ef78a4bb6b9070535ca0a890b1172bacb75e03d7172c491fa9e0e2140e03c39653a7a796027f4b296917086a7f464da90c8952db8527616dac1075a14255d1ef23ea680f4a32b398685ef6af57f882d56edefd82b24f09fd949e1a4c7498f3ac48e8aba030e29ffba17de400144bb1fc574142e2aa4a7e5c89fa0da594b64e3be18c3e7be4f53d5d4a30de3f9834ef8b6fd85f0e3566b9026450c8eb2bdfe21dadf6907eee747a0dcec854ac8ff36250c375941575a7e6e10dc73f94735071e56bbd9c71153e4e5f663cdbd57f5c91fe7a1762e20c511c0dac60cfadec81b2e3be4d2964b4b4e93ebf434b9549c930d9e28d24cad25e45d8bd305baff6f250fa6c9d7ad707b04c74f8fa01a765122cd102fcebe93e161791b94d9cc9f312a519e6945909ed60e6a269f20d637005b7c4af6421d46e166266d4ea249bbd5ffa01b803831df58e50675498ff5bcb4d5c9604b48cf671d49e2fa092ce09beb6dcc620e972b25a439f81a74881960c92acc310d89f8ae95b4594e4a47c6288c6cdec76de281646c83969a25a8cf96e18c69b61046c47361c6e6b9a0142217921ac7ac7fb88e1f295750ce5e1c7ca9780bb3f7efb083637d10054d31edb170c2d467e685ae2923bb7fc026299ad518ff9f898151ec5f90fe642afa875b5531fd1ad52108e212f1a86bdda158f708537346aae150afd509245a4c19029eb226e6c6cd112b9f49c6bbeada5f2b20da7c3007981b915ea0c766d4772342900121bbcac6f532ba99551f578401fdfe791835e9b4c6d2d44ef7a40bab21d412d9f1d939def1d5b76c1d7460edb247b9b5b1caea9dcde3dda4561e81a440e9f3f70f55f938c5f2e4220e50d1f5c5ce257fa969723f261addf5f0bf0ec761c9157f986abcbc91296181e524d0cc80f43116458f1d208bb2536a349814cbd16686dd0d9d7db93453d6930abdb04b07af155d63bf8ae7659a77d81cc1c33a6aec6bede8083bb853cd1a7b18734d4740b9cc04355a4588e3e80b854475869902de8ee793b35437ad13915dfba13ceacf4317500534e8d851d5ff82baf2404b85d6f9ba2b8adc24e4df256813662c856b21847206896c543ca7382c450cbcffd1b494038ac68aac470ac37d51b6943d10ae92900b8941afd98e793ca7d2d26fcb2ec26026ea915bbf53abc1b51f1397b9d3700f53abe17c389f69671f639ef229db18a6f670719d71d8040281adc6e9c2ad6f2c83b5355c70ef18b1b4d65676b4a613402e3f6a97ab68e93b42e34017443d16dc9757999be39bb64dee9fef38bac5235b9c12d5e0a7548608398680c2d0b11701b7060c40526b552610695827b853e83225ac66f5c13af058d70b436f822d59f87a17a90fc4d93402b0dcaa0eae2a3e735c2c55f993984b32f6c7fb43a7e9951cab6797b40a7dfce9d9be45f4e6f71db24f77da78324d26979cb38d4273c22b9cecf9fedf1d499f4e58ae6b956b9fedd8ff7f9a3d0679a2b9420e613aebb852c29c43655d1abcc8d734c6646eca9a9d61242366d0a8dafbb30bb3817754f70da1148e35b1850b98e3815a807c86fc13f6b3e87b27f833c9f620fe33dc377d726c055c52069df68089ab400f9ca762b45b6e6ce16d8b3cac833c22559dd99756a3806dbf401147b8f73dabc481eb194ddd852f365bf17cc6064df7363135cde1f85f8913c592677121fc8d88c161af804d538c9cbdf9791ea183b4ac760d4095dabc167284509bbfc4776e6e2158115b15efd3ba589d863a40b679add46977500ed43d14720a445304c6ec6f0a21221b1bcef3a118c2d763eace296d4c6324cc9216af5916bc9a0c7e6d7f8a436208eed2c285317255ad111027d0c836131c8255cb13eb49e52adae22c9be1edfbdcf40a9d31131f3b33722562857a7c84bfc3f58e89a28814427cbfcf94d32c9990678832e38e5da0dfa7e858dd29ce92624a3587ec5901b4c98843e9d224d99594a9ad825531b2fe8cb4c0fdea4f152934984b2bb5d5291134d4b44281544ac203ae15c0d75ff466117afe0de5ef2951b804a55a071ff99eb6ab143afda32fb4da2501561651bc61ddb0d0ce509c5451abe979dc7005f7f57298d66e145e5f2206822fc5046c6b26d052a14df924232c68f3bdb79b7acc650a666c8dd7c2c8af76f5cb18b30b7a8339bcb46bb5456211b668b3db10be1202ccd15d7313d48f5e434185195e21b814c6a6eadfd2eb45a6aceed1bbea9be091754165875d5426b444fd662d32bbbd575224766e8656a75b8b3ea7db82e02fea2be978f1b931a62930fd8d39a5cfde33ac9763f09f27a873d7e43147a3a08284a93fd2634a292185831aa5d6e96436342e0c4ce78eb5aa0bb8775bcc6cd93643a731637125b4e599c53fb51c7594c1131b60361cf9fb2dd9fd0917d7f9087d20c5115efe17b65a2eaa0abb15f0c794a1381f96131027eb0dbba805d3bf8805a36a93ba9cde42bf358e2478e4e24cc03a3d823135214fcea46c7d1c6b54444828c8c9106edfd23929644e17a7ebf8295d5dd4e009612966f140636a5a9a1ab9e3edee4a2922d14cb22a2cde30af8b46fed7312aa64b8a5b220616c2f0ed310ceead1b8df057d0b168874c8bee0602c20594e0f2a82953c2ce9cbd72e3e56e5e632ecc2a578491612be6832b1c6c4244a90767c3b84c64415a2597abfeab26fa91bddd9e9f35b4422b313da559b27d899b2323309dfa012ed75e4a2ccb89c2a6a8b6ac746871236330f947e9b9b1c4ca727f9f00bf94e66e6fc15ca0923ee7f949b728ad418f1f603b7b35638d647a1fc52d2e43484103cb518dc1e5fbd2bbe071ecec07d96238a3c9cf53ba04f282dcd2be0409789c5613c8493a7a2a823a8d9e1d01f7f5ba3fb415f3eea6d1ce3a9d9b5f416daee86d9b64f85b2bf02bb95abfa456f4ff4e59581348eb6f3f93820d18db135aa744533bc49f150f7a99702a67e6f6aa8d036acd2bd37f8b702a2bf44f62a32aaf4f1edfc73b33d0cada924618904669157e5672a6aae1088632fb71ed8a7902112dfe67d8766f6050cb8c120e023659f83089fd8b919c720c5248a36c1500c43b3de94ce0a5105f96a2191d5dc18d6782146fef8d69758647f2e09ac0425c887864d5a690a25c006882118923bcfd81f3c2fcb83a830514b79a6863d3242509e6fc2e9b32df8028b20c5b72a67b52595fe57b7f8b0747c072c316cf48a2c6be37f07d18146250df322b04fa47af27690f8143b6351b6d1a22aec744609c4283dd80e6c6a290ebd7299799a7f7004eb0c8daa137c8a7908d97b352feba34955465bbd1eb07847dcf428789099363a3c18840dae2544c16c888c80ef1841777192e468ebe89033b389b4db14142a0eafeed47715f79c02173a5095c4d5302e814c22cd406c8ecfe236a17dae647fe01a7d1293e4fba369baceb015418c4908bf06e9ff7f6f9c1639ac9ed2904d0fe75bd2764dad814ee6504a4770104ceb1cc67eab9d7ac1c7e06f57558fa832f5be10ba55581e7bdb9a9ef8be03d9e86148e1dd825362c38f56a47ea1aa01b513d342666e3a602405f5ad403a5dbf16a45f590538a6663453688c43fe1120ced9afa04474e19b57be0b06559a9ac765c2d23140c9eda18d7ac34ec1bd32c716cc4636a84a2ad81e3ea26708209697af7553431e5778eed8b030f8b6498dc017093856e06a8a530dfc71c11f5a504be9b6685872f5c20c843171e6d624c6238b04048060a194c4bef2e2d0dc05a5b974d7739320481048c4cf006b5b42f2dd8d17f4eee53e3b454fdd4ba6fd79af0e28c078698ec2f8c0d68b680102933609a2edf9a61333485e12c5c85521575fb8d5b5006aec6084df3bbeaa3adbcb76c133e3dc0541f4bf3680a334d43b06abd25ecb1e27e67202a3363550c44c81e204faa9f5fbb9041c3fa38e7f286216a0b8acad6aec4b67a25669ce5c08df44b1612e8dcb64a1cb11eb4ff9849e53be96a77ddefaabf4296195b47400ed81df78c74e1af814caea0c2a9c56055e72c2a8eb987980eaf3d73d69c0e026c86c10b5d88009b99d3abccdccb750f5a341d6dcce5abdfaaec5995220359335654a164de48e105a92243efd678f3e970dda01381fb0a696366c0630fa717e9bd0e4a0965842cbd768024b8a94645a4cfc50a2241357ea87256a6c334cd89660c6b7c450a982ed3df1667fea37c7d4535f5912a6d7b2e9468d85baea8485185eaac6cc7efe42c1e1c31b81f202fdc6d701cbf999a66b4454e4db8c0feaa6b3c5703b45e72a465de9d2228943cfa6b17629f302a40cb9a0d3abeb354381f231725613d81172a22f99f452e559898bda43c64bab0b7aa78d6e5aeee396ccc770c8ee84788ec88217d5172800e2e188d73ef74c90e447d3bb2e4b9597b6804e08118f4a650b29c49eaaf9b93f4984f110fa2489d53482fc40e19e70e1cddeaa72780cb137a3478e0cf6a2e767985ea9f0d0455f0828d7907521207cc1d7b0b37605e28622c2635789e16daf2cb2bb9f9c2ebb0f7aa2dc1f6b436a64d94d8eb5a573f8216032f2dd24f01da4800358f49f503feac845dab7769dadb53ec7d9d136eb2136554008346ecd7fadcfbd222a5d429f07f127816da8ef9a5eab85ad7c9f9bc3a46b8ebee574774b61027751f8a654b75c8d7e710e5990c0cd60b8fdccb89425667f124caf5087c392e514466bd32ffc246f55546ef05db0675be0e9796d9e73b7d89a409b9a2fdd11f59a9fd5be036ec5ebe5b4df70c930468d09cdd7baac30ded9c5513f005804573afafda5725fc93fa106389527ebd333168c07e75931881e1440ebb32a49a2c08c3785ea43490c29d2ae45a458925e79656a7e405e1806e2708d2995349ac52d7d3307d7faedebc8f25b32af6b85428e36d0210f46880f0efbdb52f97a5437adc437000d209c7dfcd7017ae45a5690730642112a66584223787050fbda956800885a55557da442f2f3063e0ceefe3385d71061a72a25ae40510a02da6ccf8ad3728765c975c341cb860108568c5dfbff2d51160a157e63a8cb6c533f5a75feb099d56e7ba2a388bc10170dbb87ab387a3f40ca699b80a6d4692c3218ea8560c4844f52464cb337628fd31c7a23551800badff9d2a999b7870d5cd3c714971098cbfc534a369f7406357a65272f99fd26cb201c3b4757b0506921395d06cca6a32499fb646a1d046dec847f53c5840a581af3d2492f3db05211e5cae6e75355042f0f24fc05db0d64097b92112a75f616c7df1f151c97d66e0f0e01f0488f71ab935970e96d3c8305267fe4d43c3aa6f43e507a377fbded2066ec45d43a760823e6a0eb1d6d7b51335917d4e809b86f2269d8364cbe085b548ae3e794a1dfaf3ba891490ef22ce2e5195125e60c11ab53a9f8f0171ab37ce93f9cf33ba1559fd66cb57a49829c15fe01ee433cad13a46d85a80ae977b06b79d4f15e08e7d581abe2ecace45536fb52119a1a42bcee87b94dd77bc12f2034154501f8db40583ef9a53412d0e95bd755a1069484c3167fc559b4185961b2adf560faa49973f1acca4c143bdb0bc7807f658b424f4b92fabc85c7bb5ed4cdb112199880cd58a9102eb6721fdfceb149e2392bad43cf50bc44a167284523698d88c1ea4741bbaab0c995437dfc4a936e208575dac436d3ce4fb0f71413f724e3eb88267c192bfb1f7855a0dba773e78c40988b16f460a973ede725e3caa140f77534ae5f672f84cc513b6f50dbef649968ab24993c1cc997f26181e021cb0c243ad2a2f5980f813147d4ef36b6736fa6c87054c6d05a6c6a5dca4d91d127531f876c15f6d09e8d5dda48f6d44247a26b52519fa8f47b5992d489124ae4b8b955060dc1b983bac7d0e54f6d67a9dd2e7b50406ddb9289683174e989b8ecd82d5bd744ca486030234bd8bce584b0944ff4002c171e73cc41a825be4340dd40c322052493a8083ffb0631e6c2ed335d84b30c3ddeca7797cb698580a1beb92e98379a34434e552ed122535ac9acb6cde259372545e7f9130b58e1043f0d96f69c1cdd34d6cddfb29f6d42b768ff2a83e067f13a31ebbc313cfa7829e7ec9467836684ad72ca41c95c8ae9123741d3e7a6a32ae821817defa840365fb5e993a4fbffed35df73244d6eb6a6cbef9effe366da77b61f1bae274e9b4d0831477b610e2a3a3702c2383916723fa8372d10f21ad7476319aec846986f3d3e8e2d543c382684ccf20fadd4610121f3ba262f92b2fb3c63d57000c2f467ea740d3acbe01a87cb11ce963ef8fb24a5e24d92385dbb47af3d2c136e4373d6251f638672014dabf63381cb25608e176f59cb5d43cc414c1360a5500c85211e95069c1549e8cc9e36002b1cc1b4b86d6b31d58ebdf49ad1720c107e81ad26e8160c99337a016a6ac0c22029e92c222a6012fdf30a9927b97e09511de545f93bdf191ac35f876e16841dc823f045748fb3e5ef6b840e135470ccc10bd7f2a5822ad7bf4ec40b538deb0a3d5c1fbafcf183b0a445715978762a7133e6cac7e24e24bcdb9fa62d2e11679d4db2136ebea26ee842dfb54cc9785541be5728e57c832e21e5b7c9759eb1f6bfcbd7ebd05a49e6086228095111f53a731ebbaa5a612eb7956738043f566fe446a4454fff3bcf3825048766eb2e1ccbf955d05833fb8d0a6e6ceb444b8af7b8f9a3f44fab0af51a19c972038d8749ae79256a19b00c52327cc7f5b4058a77f8d03253dc632d2cf5ca3d2b995a6a766e1a23e966a6bcbced95f628f896a34d3183f601428f5afccf5c4fe7c0fd7d4c821c67cbedfe06e7b57135aba34a17af89e5f5f7972342a9ccf6ce83999116624f802852de8585b8b589343f7f2d95b1aa957198ed1100c26bb387bb3e490de52cd22655a2e7f626acf585873f6c24bc3a338d78d69e5985333849f27ed67296c1b941f8265c59435688192e2bd41416b5e004f57c91c5995860f11b18dea181e5dcff25171aa08dd7b2282becd0dae0cd5c4e0dc4a2525a11c57366600033aee59b04d61aa9f68c005e58f5480bb13afe6a6d4c114aaf8a4f5f88663fccfb9bb1fdfca7296b1be8fc22e6991b90c6daf97ceb934ba82ff6662335288ac484e19d7ae3c5716cfa5d5c832804f5c52b5964e73089032cf4efbd7ae247ec83dfda75081af146517b0050d887d05285544e3eaf25a7a9c257ffdf98e363c444d6f3854038be4eb96362940300609a4017ad4c9b4ff66d4fa8cb5fc0c3b0567d40df2cf568c906e66a73cea79fef7ac687477f3d927ae0a6490f8ee92f32dd90458728548172c948989aa9259d92e77e9fd9c131b6af2cb4ba84f1be28f236eda24df7da4b69304c9abc8be706f5769f12a63cbfd0df03855cb372a90d5e98d14b904f48d1a3f9b95967c3f57f60ad78bd1ad6387e98b2f5cc70d473821892d7fe12cdbd677d7ac36c926603ea811e93765d60ebdb4df36c21f8311d3bb0662390114ad6bd1b32f222560d2e41e3c108e07d5c75c7594b2f31c5feaa38e80bdfbc4596eabafdbf4ba029646da419015a3b89360225636d76a16fedc65016cfb4340bc751a8fb94e587f421da0b7d1d82b11efca896e0dede6af418864ed72d220393a29fba44338de5a4127052a6e98ed61f4adc75a1f16ef8d0f42d3d22bc19ed082d0240b1c34313037abd5bd946f2e6f225c820b1d69aaf0a719f1c1c1080f8ecc31778c62b57cff61b2f8eac5a8336c1cc025003ed2e4d2b163ec4bef151037f3a9534617604e5f853fbf1a94495ae31ff366ed7aa0caca7fbcb686e02004a7e8379ac078b46915baaa46293f952b4bf292c0f8b4ed85a1196bae8ef2d6057bb31b46cb86e485bf2c1edb62d3435f181feedadce7bb3f1e58c0505bf40369f172b4e9506805f418a7fc23c9fdece469fbc0a28b4a8b0dbece4ad5de254edee9f2fd1bd52c4781c1d79af336bee139b78b9979d0392bd8bc06c72e41bf0a1c20e9ea7a99f27dcd9d6fa0f25cc023beb339c2a3739b9dae1f4c68d07714e54881b1003e823e8539a27535942c305808db2b910867739ddfd25473545ad66127ac3943d4659ff71c2a39b5b10f37aece23453e2213d8db375c22c6bc060616691fdc99a884a432cbd15f45de98955685684ed56deacb481eafe0eda0b772fdc406b20306742d4955b209ea0c2f879ea02475f1f59ccfe4f2032495568a28fdbb17ce4efe858e944d87ccbe1715343f108dfa49e786a4d1dd9ed70329e73bee83e7231ef407878ad29fc230fc8dae25ab261aab8980698fe1cedc1109f18acaa4595c2a9f4119a6e7da7c1b6d7f8b280d17900790d4ab4196e618161cdccd24720d65729915ce29fef6de53c50952cf0a53d251fb29b3ce01e320ec2bdbeeb7deb51c70b8f5b1b62e69021d8d0408a51d41740c82c50764297752b409d613c52c94213aeedbdb03091e52fc1bc085364bf88bd49efe8fa3089581771ab7f8bf3790d251adc7866421cdd83ee5631c25a78d2d9b39ceaa005597f7c3992e1ad73bdc22fd2f2c659a32e2c6514c282325051ed09ce4fe25f5f74c079695865832a3b299e40f4ece8f91bbacc7b78a72c552c5fd358340e2fcefd97f23f28cda1fbfe0137363354e074743b73f7d30bc5318cdf46599f8b3bac036f1669bdc8022db8bb45bc32b4b1410948a3d2b06bd0a1bd4b9ad5324486f88882001857f21352d0a5e1aec46b6bd42d094231ae20bc261551147ea040289e424dd6bb4cd54e317079f12fd5411451af2356e6e6e3af633c0dcd9aa70652a3c41bc4123bae52e6c4532dda0ebccfb4194f7c8e9e3eb89a1eb05922784958cbbb4b9712744a7e460c122744826aac4817d04f2123669e7e47015f697124a7250993e7fa842390badd352ead8e8a5ae49c071253652dc92efe61b41702e6f331ba99f9d3917d14827755401a99587725cef1cf51132abff775865ee8dfe42ac4232df595ffb20de0e794e091d88c098e3594431dd91d6c6ad310aefc363d0fe09175b60bb29217f236b2635d313b0587921cf060c6c2e7eeb3f7df4c794fcd5272e8c89252778086b84c711df4eb4e2851403eb59f682df7798ca266bf728cf87a60e736e868d0826a340608b2b8c3f3f659b5a95615379ae670a8aa25083c08db335b046646f3d6db2577dd6cb76a25883a82aea343d5605b70a7c88f64e117d41ac5728109e6073e5205de68d3541951d738e396fec0b2d989024a0d6109b5cef4a09690a3dd88c56477368b398a4b942ef3811e22538c59ace86d29948163e1c3cca276b1bc5c4eb98c144b0c56e50c35814dc4cd1d88928b47aeb4ea476746fbf2a2a5f102545828c01b3145c503363b382bbc083c7fd6d6ed1a500454a3032be188c6cde15f22be006a6b5e58a9a96aea035037fbc3ea059ca0d2b5d351f978a99519b2aaba8e609629b311ad5c9f91b0001299ce0f5b9a16aff6fdd73ccafd5eaa1333dc6b2b0bd6f4f5d20436f928d83ac69806c6bdf7b99e17ee422c23478a19d59a014aba52e15141835922128233cee519b711fe6bceb3e73e4353d344f949d09498fc95b308d6e6b8769df167e1da259095715aeb4e278c2b07ed26403c858b4e97b157b54be3a917199a778a6a36d02ff9fcb3d1c586fcd12baf227fe6538c61fe624dd7269b3ab645d58ff7b03fbf973305213b8ad6e4d1e0bd818986908ed3382f903ef98b2d411409b165392c41a2ce0b8a0361accded3137c6a4a1556ca54dc81bdb55da043f4ae7f07c8608517cd4fe8cf4703615bc6cb511a8a4af9121b28b1c42fa3d0c7e3b9bfb9cb85d0fc729bd04803fdc28dd176ac1feb7b4cc29f1ded2e512c969904e7833307743696ddb98094c59f0f536626e252396e9d85e7d08fd04616eb9a8aeb5ec55bbb95c7810c888ea2eca1d2d6801ced4b2b77e5c6e9c0f4438a668dc537f9745e4f3045fdf43170174b6084ec3c407c6adce427d91536dbe44775da8cfa8dda68624185fafbdd17bbe5b2f6d0964846bbf983b90868e027c0c13777b55097c06a2214f83066f048268c70908f730cdc00177d4ed806b721bb8c1e83cde38ea91ac9731a2734422738e30600294e0155bd36c5ab6603ba50c1d8675dfd2707e6b0c71af6e573e5d7274cc69d92d2e3bde547ddfaf71318f712adc84d5c3f1dee6c7c2bb67043ed083052fdcfebb896ac06c9badbc8d4a4f591f1dc230a5f252a9c90064a976e103113dd96cdf1919d625da2684464a0e891a1dd018d94af172e64a90451c852be8fd0ade31e451450ffbc21af5a712b06673ecb6b3074f94b0f3a4e5ff9e19a754c2436295e4858755ef8b6d7ea42295b142258ce61a87a3b1b3681da42b04cff19711b8f09e3427ba0c1e8c535af0d84e101a00c5d213662f3366beedff6c44890068082020e5ba0ee350bd1597c250fe7962fdce8194d1e1a003dd5cbd5ce00647940507d472fda656a82e2450cf73f336a7a7e8aa872006cf7086d8ec485d5c8ed73c9af2a678667909672166dbf582a01260aceedbb88815f02d30f50fdb2cb0a1e7d8cd894643ec14e9ca99a422e4f8e4b9314dfa0bf30a1c283102910d4af161ecfeac166bc03ab6f67adf136c1642529c132776a2d0db0fc9373b9ae155cb2675a3ea5746315dd6ab6de12029f37b5fdebfe7b672a3065d63c27bad1ebdadb15657bce61422d6917d602e41541dbd6d0787ac34830b1372dac339747747fb6e96a359b37ae563b9d1c7c69ced33f7a74637b2b7f7a165080d3f0b9f813df244adf3bca77fee7a58c75889644bfe19ecf70f44ede833c6047674c28e5ddae3dc81c7d44b7c71070be8777984857b3a62300bce38effb1a33861e41220f4e0cb978fda6c7ef50e96be1c6f9a11ee999a1d3f9243aa1c4e6b0c04bec9870f25a89103f9daf0efe176fadbeda344a71e4f7fe6a8a00d8eeee82f73d370e805f6d248e06928253314d1d4aa64877e9c4dad99ca680bcb65517de410139ae135ad5608f426173ef49062b29b33c037694ac9baf47ebec926dfa7f0b3e6628ea791e366b0bdeeac8337e6c4378acab8b9ee4f99fff2308dcbea00762fef11e84b96d44197da04d3847e3ba86e7b8fe0cdee8a6a2a089bff1522d5a74e0c79d5e3de45382bad0eaa57d2e1ee88697f59f64f3922d5a4c264770d2f36b85264f1253b14512d103c1cc5a93f56846d7053d90c582d44626ffaf418e2b623d2b69657208c5a243173215b326e145699a9313aa30e8302ca3df045f255516b697cdc29b3b8b72fcb045cf8f8c227123ac0f48c924241dabc9ef445c926006caed0086fed9be4577e2b21721c3866e6e6d980cb88d42de770dc736c38e8dc4be66e75d72888fa0a1e56e494ac14c8623940b14d501e00ce7184400c88c31004e6cadb0d80f5131675b4e0ef62a4299457cf400951e5e3a23c5c0eb823d0adf907426fb76bf83881f3cabd9e9dccf718fc8717870e7556a4b2370bfa3810de08a9edbb3be7aa90d439b8cf6aeb406a867f4424bab50c90ecbec57628c736bda81caef46e0cec13ea8bdde3d80375266cc2c11d92409efc7f3e1430265ea6f95b36d25a9ca8b59f52e8e90e5d540c58dcc6c2c51c88dc5acb8804bb0a5180bc5ca7d3baf2102c337d45663f9a79e20e2c08d12fe6555dbb4dc1435104d2d390d05a857362e0bc3b1c07192d597f9d19d79c2c1156d9ce49a170f9b270c5b520de6dbd8817c0853b000217a67eba2467e72eeaaa63701b1ab5fb34c4fe032a245a72fad3935ccf377ad9b8358be3fda030d7688c5e24ad6b38334a1f0842b6ea653695a76e3f0d369991675ff532d2de226f02eb9c8419de2605e49a5a1d3d2d3385209b5519c0750d1ebaf7c452f62fcb77e4f1f1e1da9306a071ddd2f728f82fa1a01634b26bf95a1f0ff56d12f20ee3a8f0794915e7b511a464a25ada385c2244e8d5e8058776e4c2d7c668e98d434052afb01bd132face65c9c0b0b4019ffdc39accf585e6992f4a5028f4a4f9e71857f3f607dcc89ccf59ce76252b9383b7655634f2819258fcde2b3f97a78c06cb54881ae592522b8dd50a73f5ec255c8df9c635145aee51de2ce6473ef915d951d1c123a3c9cfb589ed72aafd9241faba96161e109e8308688d00e059b58e3a6c8bb890a0466175fb1d24dc8ab702890082dc51351c43a71b8791ee804f68aaa7a9ba539495d447c1cdf62667b02928efbaf0e382e787568db68eaca802519af8899b4c628a9773b879af52bd7b065e8c8cea535a061a223ea6b4c96f75fb79427e0d57b9c836e50a1d51c2af377c19e0b7d5d21d98352bde7ca9e4428e3602f1277f96c234884d7a97ed51058ab5a79b7f0cdd8774a66aed3fb80f39e1f5130672a1fdd2712b99b2344226b547e141a3ead9b07147aa9c7c86e92fe3ba5cb50f68c9bf2ca10df1ee900ab35ca834dfba6e741220cee1ec0d7872ab0432e141ac8953d04a8bb3e68149510ffe3b3086594edbcf76d6bd9185677fe756b7e3e90f65e1eac7254a93c86e2da1fc1d77602670ef1bf37252611f599dd847386a0460c0ac7ca8ccd70433bc38331c5f95bce0b0b0cfbeaf6f7b17812b77414db49ea76d5a392da95d79a33a88e6c24f08f97ee1116565c94de3d83f96fd660ea0b897cb4638b3135cd5a267107da58ad27eb9661f54975fdeae9c30c68a32b87a8204c64e406a762e29de191c3519e6af7e74f4441e9379c261e33077fb1a6d6d6aeb500124d6ff7ff912e10a28d3ade2cd219aa3e4afd3f460d407c74f232b3cdba7ba4f1f781759cbfa0862dee752e986992701b5f4a989f184ba7eba6e6639fbf290ed042fe7667e7f3f6d0a66e6e8c083e0e517fddbcff46321bad4720b49adb03b88ee7c42f5aa72a9fb8cadee7e6e9fdf688d9911b10d1fd2cc7dd9f16316fa9643854935204ab96fb1bf6ba4efe4cd0b73c2f617c035de10733eb3c3287d0b796c1e079ad91d8523cdcca2cb73ff7f58b8af688cdc9ed6390ee87508f109b4d5a8bd5a83995db3606e1ffbb14519a6c9e938a193e3fc2b672ffead4d80d841c2776a967038a3a5680034a6c294f0feb67e132157524a56e2e1fd8230f0c35aacbd124b3cbac82c1f8a953b2dcfa07d5dc3a7338d45d1447f7524891493e2818e126fbe50f5302dff973cf48b4b50b2b09ee7242811133a8f28dbad6471a35f660252d223bfebe22dbfef978b28d4c37c77f25392914786d45155fc3591ece5b6d37e5e272a54f2b1ac16db83c392886de4bd2f7177354da7fbeb954a4af8f170fbedc6d1cb1c07dcb229052b7e5a856573d67fcdc629f2f4aff3c7b799a1bf20daec66351d8332cc2469d105e226d603cc7c31a5436c30e75930dcddc780555998981f7b76e559179288a9f4ce677eb9c9d39301f44ccba112041b17cc576c026619bc78a4b83f1a83deef88928ed9731f3c4f05942b166b57e6cc0c2916d69284cb46a771e95397e9c839b445e40751ea35803bc8a49dfbf22d9a3cab000bd08b53341cbed96d80556c50f4f344437b1dc16fe5ab065ced575e63de2ff2c5f80124014ac7ec4977c1e80b7ce30e72cd28ec993be72a933c04b3e8d474453e1012867a02c8a127f9ebcf3009f2b48555faebc66a55a7507b2fb5864691f69fbb843d59d2c027c914602899e531063bf36db7334e2b1825500315e34d8cc8ff28b9e65283fc0a67c1add740a6d7ffd2c2136f25e1eb1300fb59e2d665925c5e74305fc965c5779c7e146b87411eded3f50cdd06fe940d0d8bb1fa0d35a9ed09261304555ebd977f653c445fe92fe52f9af2f5bf5d89f9e15b18ef7b145f32ae3996527a97f98ad7113ad9fd9e313b73ebd712bc27c1196f279b49216b1934eadc6fa69e0168367ed146df1834dfb5cd93302f89aa2a23cc56056172c2f7d38a227e0b5b9a1128ae125945444a06c3800a8dc6f3eed4aca3ba397ecc0e2f5782180f04c350e9c95d1c62503e4364df6b7152c26d2531f2365d1df1456474835553a201bf4a24a6d03689c7bdfe959e17058357d3eb4a305d2cbb31ab945c7c920dcade035fcede974225478dbccb9463adcb0882b1a7c58378ced3c96f2d9288e0358c93415c0056c789177ce331c8031c6d7c614d99145102b6a1a9100965add392b970f1f8df5ce7e43b4c5d590e4bef0f9c474a9e954aab8f9a1bcb83c4d65f92025fa49a4f0c1a323aa1ec6768317d0183e5b78c1556296582d6152a9c596ae1ea30d1908bd1d972626bd17115521fa5224786398193a1f14bd26dbb2c6b495bf2e5d03bd299f22f59a95235a05728fe165a3a91c78331280c98c39bbb86ca842f43b0d46c20f0a4ddea7fb8bb06e1968f6a75d16db54bb5a4267fa6df46aa2176a52f6c65cb02f7a58b35a590f0a29525519fae2638ee58742e8f01a9bd6d25537171fc663b42d1d722096f5e8e74aa5b45901b2ced8aa9423423f35fa7b59720d7fc547a1b41468c2f0db0eaf6bc19e865d7383f0683ee605e9d77d243f85247eb2381b60f247c1b3f4840f258114a0228b4204c3b55bf61cb88ef7698ec8b0396bdfb601fe7d0a0f9e3169a5a74e0826ff6ac5579b9439b30f1d81a089c8c6ae53e16e434ff930a26f85b12d90f713ee095b8a7a5b79cc418ffb8848f5da78d773d994a7f8864683a1c25c8cdd828194c7542faec0fb6c4e2d1bfa208ced29f818d4439d91499bf9ab146dc632907c39e4c959d7261a816e7e8d1d47049bcb46eada732efa29ce2dedc681f53af91fcae63d949cff56d7f9c1ef2d297fbb83baeba03c0256b7176e90483e46984452548439a8bd4ecf253a4516fe19b38e24795c904dbe82cbaea50db2964443753a21b3e7d4741303da64d37718387e5af5f42dfcddcb93c6431204b672dd08ff515fd2ed570c3cc117447ea254f4678ed6de22d0d3ed4e6f5cd70f2172cfc1f12d73ad732e452b3ca32de9d5508e653d340a92616a4d078249fab8bada88aeacec5a565e69359166b223e9c06cc5b3a4c7836a6eb8c99b3a33acd9799718e49ad07ad3858e21e4b0407fab52b7fd6692b18328f3e63efca6435712feddc46725e93f6de7d12c3de19765b42eb5b97afce4cefe6797868ae282938b3a457cfae7f81a841421a2e7da878b7f6e65e7a314f8f7dc81dfd99514f6a18a952634eca3aed7f7236d85e441c440298c260ff6ccac9ddfab56c5ca469a97216aeb434804a0e52a51c9c97be3f3772f2c63dd61ff5520b12b9e5fb47dd66b5a7e8d6d03bb6f969d3c1024d6964d6141eab1c97524e1e4983f9d4d4b15dd89a28005339d5e56e9cdc7292ad9c1566073c518212bc2930d203d0b5a44cef8db244230868f8457c127db6887fcc078105632cc8cee11b707d5ad1c6031b8644d733f842667213b99dbfdcd7631b0e9adf139fa0c19e8074489892476464439ba5fd3097cdf1867dd0694bceaca796c1059aaa05499b76dddc196e831ffe90bc94504cd605297e760a18b8754ef3b210406c59a831924d98f65aa12e4615612b39ba05ce61fec55d862c38dfd20db77015de43a831bc29b7ea29730fe07476140242ef8d00daf6c52112ecc690b104197908c2e5ff92942c18e3b5d0fed15d72f758e1b7c1ee248f469261821bdf89c0797e0cc03f3e186995399d4869fcf1b7b0187b240c2bbb32a98db183658fd0fb463b0e3a1ba38312e5357de75a747687e7c0aa076917be3efde57c2a95b4cd67f938ddc19f983a3cbd7864b08d6623c2791ef42ca378550ba06192c0ccc2aeacf568c5e9de681ac8e7ed3d7ff98a381352d5827696d379db0230e168804e1057ebc5e3e6ce7d18b5405dead31b48bea3071ddedcbfdef8c547193f1a812d44ae9a824b77c7a8b06985e0f6abf8a3f7d04cbe99e86a90169b9ecfba68f9210d141fca7bf251c42f616ba2503d84cdb4ffb0ce8af4e998dbe4b01cc8b5fc5bbcf5d8dc53345a0fcee5ece5d5e930eee24fc4d6a9f084fd84a3b0967549a6468e78143cdbe06faca9a45ba746654a0a104c136bfe729f853aac5a0b98273e270968863f681a637627d7a78301c2441842a5f4462913ab5d89ddc0e004a03e8d8611eaf210a6901e7e3d81776adbe81bb39093604ff659784c1dee2e0505136a213c404e532f5a1c2f7ca7450856c54ea9156869608bd2366acead36d11c93381146b70904d5180cc0afbc09a599ab9aeb9dd04223cd6c1bc774e5a828cbe9b4bf6ec0a12ca191216060d718ac8603ced34affe85b945c03af46d3e7a4ace0a2b5ffb779f9d6fcca9121407c600044f236f5b49cf5e6179642bac5ca282670d8701069f60563c53a8c71affaf6778393ea34382e244cb432691ce5abca9e6fed23be22bf2fcd425b8b526f6a5f1fc17bcc190bc890b202706e22d63ff1e304755ff6f6d144712dbf312022120eed0fc8377d0acf45b4f9a110be458d316d4c5e6fcca92d8f0ae8d48626415dbfa868dd771703b269f8ac17035f6c1d9fc6bc760e525a1a801b08a2b910c2d5683be1343f44ba0ea49debba8bbd100f50d9d2a9ee4f0f37adc5e8fb3557ab99ceb79ef65cd83e2fbac10a3d586d81d2468d94df38da023e064af71f9a70b226d5cd9f58441ae759da66c8be06660239389138e2599a14df688c4b52bde87d76327774dfe6fea37819db8cb4eee1ff1608b2c343796242ac720226e7fa23ec1ab1e94b9b4d6f043d53f139f4205d65b849c6cd7508b3a8c5061b17811d98b14d41759d81975bb52e65ce333fe4e0d56467df5c450913c9c19b9cd8ef4869265e927dcb4297950805de2013d18e83ddfd0445a5a636b90b0101e89226575b3da7e268e1dd3ac4aeb0d2e10dadf42af1e7db0ac8f9bb9de7a580eda01c20c5e8d6ba77c027375d981365365ee7f9d6cc45752e042a6038e555fe4e06a0dddd263bd771089a750d6d498ea6182b17c25c38b9ebf211520a47db1ccf78d2e2a30255ac79f21bc78e4f2c9ad0dd9c548c5c7c3ca5dcad0facae09f60d846abbe6d00e88c1a5d7398cf0d502388cf665637d415b2b39b7c4da5449532ea8c3906a8eeb0c998bc0c6d89b291c261b99e4c5961f23dcda5b55e9649048d7a11ca0e59450c4eaaab060f2045dd51b28a5151f01e8de2a37380dcb1972dadb638b7e501a213ab1390bbec9d1a0a91fcd26efcb9a8fc43429b1d773867f560411b83deed7de5c622e435ea02f594de39a2b7dacfb3332767fa68a3b7804b926c830f1134c5139dd12c30e50ba2a69c15511db8e01f222a937881d1532e7b5b6df90b717bb3497413eec2e39f89e944e32360ca4069cab48213287fa78d01fe3ae542e6c8b7e615c13eaca6911657cce4ff84e540c820ffd0ce132cb51ad1b4a148b0a69937ff9674da8355c673fdc4908fc0552bb23e3d89cb6fc90768973bed6aae8db6f279b6fa20e1d55e93c922f9b2a8e397ce3590911de41395148186ed2d85b74d2d1a87b842e035e026c0c75717967201a6193307e52110b3f64298e8c472bc54269052488c0f66882c5740d12b436de028c00b5b9d68f1bde447df92868aa4353b82c33781f97f342a3459a4340d74ff44dd4a1d033b73239f1625d1f65f9f16bbc599858e7c3ceeef4d808569d91beabc0617dca76765046978efec04eb67fce087a5a53d9632012ec3fe8e0cc610fba7d9604a531605d9f5529ddbde447cb3828634419c79d6bcbda30dec05f0927bbc6e9709f25a1a5891d1038b6b1094d2b4abe50db58370e93c37b619f86330cdbad942f26cebefa212dd4b6089c4ccad0f81c773121236e998c1d0ac919f4aa9d70753a1ad0012f4e69f7a264fe5e84d777d37cdd8f9186b0649ac790265381f5980ec3be46eab5f24f1d34947e8c71852a7a429edc6d0d2c986c3b30c039f509a427a750a27c108c8cee7650930b194a493b1623044eec515ad309fc69051c485ef93b555dda0e3b11995abf85d5f8bdded16d38dfa5b303ccd855c22d6736c3cebb8fd0dc51eb87615e2d678f62d1abe0a3a2a1cabf38dac3463d640dfc4336ce6e5d25cd212018e43df369f92c485def6b52ae38e9f4c218bd0cb9a61f4d791ac7ebebc98d83526a79bb73c93fefeed8744700b4493c5017f455c78d00d9ccc4fbcbe31abf9ddb8f9aaed733b1c299f6330d729866bb97e84735a3eb575ad18105cff5f1c02cb3acc87d809280d1cb9b3f9765a4ff857a9a5563638222c5f16aa8ab66d8c16e44f91365d604887cc9ee4a746cc51817bf848be7303e052392bd2f7acfa040cc25a35d83f0d4ebe79060fb1bdb9757a18d6c1e6cbb85293981001363164d57fa2b7651b26cd4aad404e3cbaf96bbd7407184a914d7d4d5cd353bcf32cf3863640cd6cce8e0fe75adb158f9df27e8e1f4898cc0b2dc27a10ebcb1dde40cfe059cf78e93fd28bec2ad8f57686339386f587ddc23e5ec7dc3bb4f99f67820faca63ef042f738299fe957b4a118a791e576590c2712f2d5ac2a46eb50d788fffb2d51a592dd0fa41eac20573d26586720ec67c471d8f95bed55af8002f3371d75ef2d75935c57a49674d9b804a38c776a849dd4f44c2dac6e4a16563c8b7d060a232719b00ce0436ebd0efe0dd668daac2e086636a63b870e69316c428b4b0f618aeb0ee1ed24dcc218072763a69810bb2dfca22afafc0f969dd557d5804a627658d3212645bd6769ce25865990446b00456f839d61dc05f8e7a344319ae27b8cfd41cbd5a2d7a05a03e105244324234c0d343243d6e84f982df4ee4694311b30df6fbdfdfdf55bfbe924b2270e8437e899ad00cee918a69d4ca53868f4370b59b73b50a0b753d9f8991c54dc64f93052008a94c2dbc1636c99a2ae82d8f7f6a06e52fbccefa27420d3c35f14e2178ac657b02a68cb36f0f3aae5a61dd275ce305575a7339cfb6eee59abf29834f10e63cd5a9c873b1fcd1639b3f6edd57c06e8ed69a0e2e9f16aef7b621f6a1759e6d39b69e0913a838438f075d979265445ee1f830b841980f42620f0bfd1fe647f751884924fc95ecf3f196f9f67835d0768664d6a3081893f2df03f6bb171cf883bb6a83af49d4be108bcb1275f259b9ed3107f45c8403ad81a632adcf54ddee408eb33b2d2abe96f4bea76ba3e6326b384bcdc68b05a241f54194b63aa6617b5fdd300c39d64a7b4566dfdd4072a4648ee13cd2b5854e5c6fe9868b698614d30a99d0e5010fccf50d0e2509a79e7c570fc86e305eb3a297afde9f1c6819e524604c82b78c15fbe9e59628b03b06f8ac7da82a96248a289b259e2f8c9b98762a4ac7ad19467bf4a8d0fa2678b89c908af027f26d344c959c01baf3641311c796141797eb24b60159952026dd9ad0a774db1a05e4099c47ec20662d86b7837539143a43d1d48e6e0c9325fab2a12f43554ba854d90fed19535dcfdddee8c530e3b62b8c181846e7cd9f07982dc409bbafc6d5db2e7907ef02f1c1f04935d6c55552bade3408f2b28712a46981922d00e627b46078805512b635a613bd1c0bca3fdf6a42a9e751dd796464802dbbedcb09719e7fd7fb5f88fc474ef10613bc7b77f46f6eb9d5de15424f182435bd530678341bc09e6221725ad4ad6db45305663d855361ac64ccb1670b76b880c968d4f1a80a0c82a8f7b83d9dec26b28d56816eaa00a9a025e423a4582d593dc1b2e1132f5fd3e505d6083f8f87af7c8ac20a14286e6fcfe88c468885e60631ac8b4f2b434aded027484d6e04baf1a110d4a266b390cbca05518df48d73b5b7dbdda6c80bb50d62cd77e342947f6446fbe85215fe6c97c95b8a65a33f8d46dc91543b81390d8ec20aff68b60c978af515e8a6358b50a29ccaec5ddd9cfe71ca6c28cc132792011a13c9c918f65ae62d57591a433297892fe77bc23127b71f01fe0d88f42be6371a0da21f8ec7fbe7a1b2fad62e1dc739a293945cac29dabf94934577d15a4f150fa22bc13557baf71b3b9429dbff5ac6a1433a21abb1a1f1be5ab21530ade03f63eb839511a94593f25c1096c2eaf916ffbe607fcde57364360a73230b1f00dca1062059283514d0975e0e63bc745efcca947a501d9b6f43871a08f92a7cd8fe00546204987fa2c0402d725d0daeb6db96afdbc9ef2745c2db1bafe13cb1258e76599318111258dc172e0ef089645f2a210dff62a51f5b22b05e00c5f88b5f2aeb1fc6c23fc227d2f7855205aa34069a736c35a8d66e844fe440894f236f6e7f6b2451d6ee6f1e909a3bb970df6797ff58cdfcea38eeeb43f2cd35917bf1413f1067c6f7b0b8b2eae8d8a8976e7c2d7e0722ce8b39929b00446065acb8fcee0aae4cd21df684610f242c73cec5306b7474470931a2cede9d28bf825bd82e97ed214ef52882446f792da8f6efdfa5d6c565a22dc3c1868e4e962da0e3e9079423947367fc50e3e7f261a7a905cccac16739cb662587a07fe181efbcd39fe41fa29258db5b1ac92407b2d699ad4f08552eae5dedbba54b645c4df0f872461d158ebe9b05855c0baf9fde609645f01a9a45c185499d36e6167e87624508601d711a25783b25ef750c2de42e3d6a702dcebee9b44d215ea570fc0e8be3c1b8956f0d194cba26ab220ad7441049e3d9c773d4806bc51a09830f71a0702b995fa5ee1b66f2a63e2607dd5af8c73c05c4a63a3d30cc7215c497cc210a48ca91a5aec507dae84542f52620ff35c1c9a6dfa5fc4328698e4037189d5b44cecab73af6de25b3da5ff6336729ebb0eb11f8ffc6b47676853d51bd2ad61bb9789093e617268bd7c1195bfd3030062aefafd9af25d6b2c88ab231f323090156a3375a050d0adf73dbbe79a913c1632126b11895d3ffbbb2571d7636b5447a8160eef48bdae00d46779df248aa8132c6b630f3428756c0837375a1689ef72f8f3dff95805ebc49543f2e0e2a82adb39bb32601dffc7adc538b3a10c2a38ad8a8a39143a48e7ef485e5cd28bb487d47bfed022e6ca95ba836c7eec3f8c2359812a8c8f62d6173bd3a88b60a29d1254aa903c30511f3e0ef9c7cb225e0c97c46bb2dc01de2115e1a417e9f6e57b441090df94380db54b028b49aa5ee9ac0af2dc65851e60775530f5bf78635907fdb23babbc6f1bd63eca30d94c5e28b77551df63b6ea1fb85cfbfa9890689d8b7d9bf7224a8e5f36ed17f6bf9d3d641e547b3683027d3332cf501da1d3bcbd732bf17509d339751cc17f5d7692bb22e460e7ca6fa6e4cedb62c274a4fbc7d9da1404f6b26fd2b373e10f4a5dbe51c802a8d0cede842f09230a347602ef2f3b1b0d294694b0dc2899932e150e5def940de98e8c40d7b62d234b37c5307b1a18d6daf2fe330fcd18cfd97a0c0858acae4a090be484ff9685127eefad582dbcc8b26901036f85c2b234ffc79865b95f85f0e93a5b6999e44d1b958ec16b9ff3c4b3186e9b95fef5773348e23acc3dda51677cf021936f91218c1f1957d24d7122c66848819b97fc92fa5f2322b0768ea44dae999e9cfe8815e5fad1e23b8a64c83c6602c3100928960d2e55b7395df3024f66ba05994703340bd6dc860ff7500e609d82e6c0d3c64218aa673ef516380f59548ab7365cda07d5d80704f3ae87f9af9e902efce579eef1a0c45b62fe08a5af6d6674441a80f117fe9ae31d892e928512cd04f88ca79a99b82471cff697c13df45694b72297a3bb0577d1ea4e7abe6029b158b50f2e19c23adeef2a234a858baf469a6ae2cf250b14661cad28add582d22704c22d523e23588f2c7f816f0a929c81fbb77daa406840e815d412da53747f034301fe3cd2a320375a340fdef3b4a41a0cd9c00e9315adc635c5b3e191ef3f69247ee89c1e0b6ea9236c04b03635c600534fa3eab7bac7126e6a72df5be424c9334a98d90c203b1cebb68dd32b5f7416456f30c465c5cdc821e49c2b6060a08db045b8f2a2c2c27c909fbe96eb60682dde70cd366a87ee6b05ecbdee4b813778b0ef050f79dd1153abcc8f722d347e8b3c68ec449a4aa807b98b373d755ec54f9b30a0955660f313ad32df5329b3f414f782a95b6a8c70f439c6d0abfc728fa9b93626b18d98f7ebb45f8f0bfae46445d72edf170ad4fb875beeb429821dcf366ddab05e0a4be0761c6801ce04efdf523dadbb98f7f78d823090a2b63ca7a240415712ab68692c3defdbdf91fc34e5ab15a363ee32b940a7d3abd635c8e20c153a7964cf0ea51bd474c7d9f137c1f5dc97b492e97ac3c820ab24b79f2f145e9ad4b8456126764d18945f5cc791dfdb3c457617c8732eff03c6ce73321dfb2230afede31113ffa3e483e4dade178f54f361dc26ceaea5754e2e1d689a3c4744a5a46276ccb66a704202fd23844dd202e5aba89d6411f6b30992aafd5a07ecdb71fe5d61914b624ad9c94c280ac4a607b02bce524c95e4f92e8462e8bfcf1512ec46c2afcf274beacc848933cd2ccad82675453f68b26e07bd658a2a75c370e27e038741bf116710b1dc7e02677592e5f69ce07c222b71574281d70978139e614469fabfdb524259634e7abb77dfc4942d7c7d7f2c6488fa7fedc03c587220e96aa73671d6484746b02dbdfd2d1c4a04032af911073df65e548827e5816806ea1fc05cbe95b4f11cf9b395262624a9eeb3bb777a17d99ae706c70f5003094a19b26931a5c255ab1522764219d650ad580671cf3a9438ba4a42570d33d0fc8936a869056ef14d070544cec5707e0413fb7bc68f99ea11fb84e2713740e9c17af36fe4a8a35d4e209476f869835b9b827b4c8f1694a4afb8781ff792bf1faeaa3226f479ec87bca0ab0c00e66315e95b7acd805f4b589c386b8195183dfbeac2c048bc007677bba28c8f4033194178fdb66b6cc1b2907a49c1e2884241a704bec0afdc5a73e90ecba12992ebf5563afc6890a2898be5ae757614866a7cce29029bb92b3f181bf63347ebdb0bf0d967417daf0a16fde6af9f64e035c2f74326137a8059880da096165d003f3cd6392d5389ff7ca231c970e22ebf68ca2ef0c9c31fc260f5ffcaaed6c5b4d67ab317124c381b082338a67bcf0bf31ec69552c16e71490676097ed2c1d37ca647ea05869f584ea81eed4c9501c5c34a9727133286aabdaf97d5e78406e1e002d4706d2f39d9cbfe148088c516f208a5ee2c9cc42166d2b858659130b63cb95684df3d34957ed2a4192ff3c973167403c63dc113c16f3f34a676084244ded500185c91cf498a973124674fa97c761c53dcb18efdc1d2e083efaaf8dfd12bf4cf7060daf472098d963af5451b82ea1829f3fa798e663ccb63a6cb97189caeafe0599e4c9e715db34340d60fa9da69ad1e3f2949277891ccc6604469566604615158feff75b572bddae4fc14325c0bdeb3ccd9e6e1050d4fdc80953ef4fb5b4c32360bd5cf4fc9951d71cd6e6c8f6005c3445277554d719131aa1106ce21f94e8371cb72df0d7c264622882803ea6384f00b2de0b7aec159d6daaf3c3499559325ee97c2ee5b2747ed73f870faea1200c9ef572a8e15abaa4a00267154b8c6dac939c46fa7f4376e2b901e1dfe5e86a62ea6b2868486b77a3e76b4cd2ec508b3b8f73aaf82306577dd15810cd36de73be5add58f9c928b64aa6922fae2c5e1861bf2782c7f4ba711b84bb5729976cfc262b7ffc929547066e5306f76f6ec06a0ea33b49b43759ff1fcf9c8abb81cae3854fa7e28e29301ed64aa0d2f186b597b1861bde5f4bf8a96b0b786241a4b5b27d9a169b9360076c41ee62119db69ba3b6ba9e2c21454dbec0b8fec3751b44ec143770c304ba235d2a1619ead44d1c201d6f3c928f611e648f3540e455647ad890fe66923acfde2a494ba84a1b01a137a6566c914d4276b66b79365587131bba50ab3c41c9d00b8d0f7c00475c3e16618c7d56afe2f461964bf6da1ad869bd996b96c3939a40a6bd13c49ad79514ed9e3cbc61b460ca4c917f305c531a7c668d9dbf86fd10539c83ad0b54dbdda84f4c8f0edf826c6ac74c659c26ef1d5a80b66933a263f1277f7c427423924cef7a28bfad9e8c0fd9040f2b3921048bcae614022a8be9b2101b69f894d3b831f9057221c4fae0992596888f7e3cd73f5caa371443f07119ff10f3464f0dd402c11e9cf6e066beb61b16c813f8d15117f9ad8a8eab95dfb8fdea9d7124bfbd4ac850dbd869babb016b4a027c71e98ecf92d92c1757b94f0312452e43711d6bf1973aa5705fe6d21e922adf00152ad60e87a1351db1f1c1076d3f54e0ff9c219c319d24b993b5a5c236be922f18336929358a9656c7bd4efc798d1698d10595ed7ef111a00ab89151052c111f0746647e4fb1ccb373cbd687d9d43afc811d6b05a147a2a63bfe157fc1c0ce9a302e124643a7dbc4a2e7db7f97adf0a24c61dd92fc2d3c77dbb533549eb9200f86069b8555ebdbb4d2981c66b6b534ce7f5945c901454d61cef40a5be730cf50ee43ae9ae45dfe3a89a00058f8177cee43e89e630ae25ae636a3bdb47bb8a4fc85e7606c60864f3abdde2fd287a01bddea4488998681916ee3caf7e796cb8110bf2f3ed02a2bb3d3f96bd770a045687a5e049577772511cffb1929a6694a3039f14377b6bffca34d3289630057f5c37deefcc019434e8159700cca720d5701c817e7240050b936e65ceb0a3c8da91250e4147ee713b0b977dc56bf033060a3a07dc9b523e1b35490fb552ddd11da70123463f0f5aa9f021be04620bd21c67488af25ff30b395a5ce451921262c13bb79d3109cc75fa0d09b0f28db066290b93ba9871e68dffab4ae03575814a74bea4a6f907e0ec146c4fc26c0f77932f50d14c382caeb5e736bb4161763e812b2d74555f72fc1c79fdb8269fb523ed2a52217171a826411f5fe64407442742d6d7b3d9b242771157e6b9b84ed553d9f822d888824e3d4b55072f61a9d2e95a456634d28c924c32f0375cb9311b9278c700130f8291e8a9d9f34e366d0d41dce0cbf776047feb35bf741ce03ddf74155b0b43ae563fce282bc0838e93724abb605e172399619471f3b75a92f2b2f378d1ef7634a3d9812f8567c4a72b780ffb38b17cbaad59cbeb95d75abc19675259edd57dddfb3013c6666abd3befb6b3ec09d14ba2f805772b12532c8ceca470c02ae34e11c50ef7fea2ecbf49fba4363b90c4c172030d2a74b9092a88af9cfb241793f3bcd556c70388d3c5853aa5f6efc2454ea303d648d667d252ea998d6c9740f032cf0f76b13b423df47ed57cd028916f35093164665461ed5a8cd5fac00741afc6cf957d84666bb590b55eb9a5878388c63d51aedadf53ee27df9ad3b2d6c3704c611f3246a50588542bf8aedd6a886f9551828c85249d6ea8e16544c97c2b77cb5fb0913f6d3465850be7f9ae205493dade04e03aafcbfb4fce0c11a3eeeb9fe605a1943890f2e6c19df2bdddbe4f34bc5b7d6ef20868366394dd6dfbe4c81a2880996ef2aebbb8aefc8272d9a89ee2ab8d9e6a1610f7435918d9db889db36781c3047d6a838e8a3839396fe334cd2783fc313298e47b2154f953a459984e4838bea19c7a9b926106465ca8c540c57d6e6b7c74da995b2df37e7b7f4632cf3cb25763ff61407893fa6fa86cdfe2aec2a157f8d6b2faae78abedc590b74df96cdbc31b1ee822b0f427d13da38690792617f69a645529ca3ad24382d9d88ef69131f15460780ca9a4e01dde8f9442c</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-xray">      <input class="hbe hbe-input-field hbe-input-field-xray" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-xray" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-xray">您好, 这里需要密码。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-xray" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>        <path d="M0,2.5c0,0,298.666,0,399.333,0C448.336,2.5,513.994,13,597,13c77.327,0,135-10.5,200.999-10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]>
      </content:encoded>
    </item>
    <item>
      <title>文章效果与字体编码测试</title>
      <link>https://www.lynx3.me/article/a36a68fc/</link>
      <description>包括 Markdown、数学以及标签外挂。</description>
      <author>LynxCatTheThird</author>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/">科学与技术</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/">计算机</category>
      <category domain="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/">前端</category>
      <category domain="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/">前端</category>
      <pubDate>Fri, 02 Dec 2022 00:18:18 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="markdown-%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95" tabindex="-1">Markdown 基本语法</h1><h1 id="%E4%B8%80%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">一级标题</h1><h2 id="%E4%BA%8C%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">二级标题</h2><h3 id="%E4%B8%89%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">三级标题</h3><h4 id="%E5%9B%9B%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">四级标题</h4><h5 id="%E4%BA%94%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">五级标题</h5><h6 id="%E5%85%AD%E7%BA%A7%E6%A0%87%E9%A2%98" tabindex="-1">六级标题</h6><p><strong>粗体</strong> <em>斜体</em> <strong><em>粗斜体</em></strong> 正常 <s>删除线</s></p><blockquote><p>单行块引用</p></blockquote><blockquote><p>多个段落的块引用</p><p>多个段落的块引用</p></blockquote><blockquote><p>嵌套块引用</p><blockquote><p>嵌套块引用</p></blockquote></blockquote><blockquote><p>带有其它元素的块引用</p><p><em>带有其它元素的块引用</em></p><p><strong>带有其它元素的块引用</strong></p><p><a href=".">带有其它元素的块引用</a></p></blockquote><ol><li>有序列表</li><li>有序列表</li><li>有序列表<ol><li>有序列表</li><li>有序列表</li></ol></li><li>有序列表</li></ol><ul><li>无序列表</li><li>无序列表</li><li>无序列表<ul><li>无序列表</li><li>无序列表</li></ul></li><li>无序列表</li></ul><p><code>单行代码块 with Both Chines and English Text</code></p><p>分割线</p><hr><p><a href="https://www.lynx3.top/">链接</a></p><p><a href="https://www.lynx3.top/" title="这是标题">链接（带有标题）</a></p><p><a href="https://www.lynx3.top/">https://www.lynx3.top/</a></p><p><a href="mailto:email@example.com">email@example.com</a></p><p><strong><a href="https://www.lynx3.top/">带格式化的链接</a></strong></p><p><img src="https://s2.hdslb.com/bfs/album/335657374a640f1748c290003b8851caa7db114d.png@1e_1c.webp" alt="图片" title="哔哩哔哩图床"></p><table>    <tbody><tr>        <td>内容类 HTML 嵌入</td>    </tr></tbody></table><h1 id="markdown-%E6%89%A9%E5%B1%95%E8%AF%AD%E6%B3%95" tabindex="-1">Markdown 扩展语法</h1><h2 id="%E8%A1%A8%E6%A0%BC" tabindex="-1">表格</h2><table><thead><tr><th style="text-align:left">左对齐</th><th style="text-align:center">居中对齐</th><th style="text-align:right">右对齐</th></tr></thead><tbody><tr><td style="text-align:left">/</td><td style="text-align:center">叫做</td><td style="text-align:right">斜线</td></tr><tr><td style="text-align:left">|</td><td style="text-align:center">叫做</td><td style="text-align:right">管道符</td></tr></tbody></table><h2 id="%E4%BB%BB%E5%8A%A1%E5%88%97%E8%A1%A8" tabindex="-1">任务列表</h2><ul class="task-list-container"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-0" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-0"> 完善 Markdown 基础测试</label></li><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-1" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-1"> 引入代码高亮测试</label></li><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-2" disabled="disabled"><label class="task-list-item-label" for="task-item-2"> 修复 KaTeX 溢出问题</label></li><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-3" disabled="disabled"><label class="task-list-item-label" for="task-item-3"> 调整主题 CSS 样式</label></li></ul><h2 id="%E6%8A%98%E5%8F%A0%E5%9D%97" tabindex="-1">折叠块</h2><details><summary>点击展开查看隐藏的惊喜</summary><p>这是一个原生的 HTML 折叠块，常用于隐藏长代码或剧透内容。结合 <strong>Markdown</strong> 语法，内部依然可以正常渲染：</p><ul><li>列表项 1</li><li>列表项 2</li></ul></details><h2 id="%E4%B8%8B%E5%88%92%E7%BA%BF%E4%B8%8E%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A" tabindex="-1">下划线与名词解释</h2><p>这是 <u>带有下划线的文本</u>，这是 <ins>插入的文本</ins>。</p><dl><dt>Hexo</dt><dd>快速、简洁且高效的博客框架</dd><dt>Butterfly</dt><dd>一个基于 Hexo 的高颜值且功能强大的主题</dd></dl><h2 id="%E4%BB%A3%E7%A0%81%E6%A1%86" tabindex="-1">代码框</h2><h3 id="%E7%BC%96%E8%AF%91%E8%AF%AD%E8%A8%80" tabindex="-1">编译语言</h3><h4 id="c%2B%2B" tabindex="-1">C++</h4><p>来源：<a href="https://raw.githubusercontent.com/argvchs/fastio/master/fastio.hpp">https://raw.githubusercontent.com/argvchs/fastio/master/fastio.hpp</a></p><figure class="highlight c++"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cctype&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cmath&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstddef&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string_view&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;type_traits&gt;</span></span></span><br><span class="line"><span class="keyword">namespace</span> fastio {</span><br><span class="line"><span class="keyword">namespace</span> symbols {</span><br><span class="line"><span class="keyword">enum</span> <span class="title class_">symbol</span> {</span><br><span class="line">    endl,</span><br><span class="line">    ends,</span><br><span class="line">    flush,</span><br><span class="line">    bin,</span><br><span class="line">    oct,</span><br><span class="line">    dec,</span><br><span class="line">    hex,</span><br><span class="line">    left,</span><br><span class="line">    right,</span><br><span class="line">    boolalpha,</span><br><span class="line">    noboolalpha,</span><br><span class="line">    showbase,</span><br><span class="line">    noshowbase,</span><br><span class="line">    showpoint,</span><br><span class="line">    noshowpoint,</span><br><span class="line">    showpos,</span><br><span class="line">    noshowpos,</span><br><span class="line">    ws,</span><br><span class="line">    uppercase,</span><br><span class="line">    lowercase,</span><br><span class="line">    fixed,</span><br><span class="line">    defaultfloat,</span><br><span class="line">    reset</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setbase</span> {</span><br><span class="line">    <span class="type">int</span> base;</span><br><span class="line">    <span class="built_in">setbase</span>(<span class="type">int</span> n) : <span class="built_in">base</span>(n) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setfill</span> {</span><br><span class="line">    <span class="type">char</span> fill;</span><br><span class="line">    <span class="built_in">setfill</span>(<span class="type">char</span> c) : <span class="built_in">fill</span>(c) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setprecision</span> {</span><br><span class="line">    <span class="type">int</span> precision;</span><br><span class="line">    <span class="built_in">setprecision</span>(<span class="type">int</span> n) : <span class="built_in">precision</span>(n) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setw</span> {</span><br><span class="line">    <span class="type">int</span> width;</span><br><span class="line">    <span class="built_in">setw</span>(<span class="type">int</span> n) : <span class="built_in">width</span>(n) {}</span><br><span class="line">};</span><br><span class="line">} <span class="comment">// namespace symbols</span></span><br><span class="line"><span class="keyword">namespace</span> interface {</span><br><span class="line"><span class="keyword">using</span> i64 = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="keyword">using</span> u64 = <span class="type">unsigned</span> <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="keyword">using</span> i128 = __int128;</span><br><span class="line"><span class="keyword">using</span> u128 = <span class="type">unsigned</span> __int128;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">constexpr</span> <span class="type">bool</span> is_signed_v =</span><br><span class="line">    (std::is_integral_v&lt;T&gt; &amp;&amp; std::is_signed_v&lt;T&gt;) || std::is_same_v&lt;T, i128&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">constexpr</span> <span class="type">bool</span> is_unsigned_v =</span><br><span class="line">    (std::is_integral_v&lt;T&gt; &amp;&amp; std::is_unsigned_v&lt;T&gt;) || std::is_same_v&lt;T, u128&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">constexpr</span> <span class="type">bool</span> is_integral_v = is_signed_v&lt;T&gt; || is_unsigned_v&lt;T&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">constexpr</span> <span class="type">bool</span> is_floating_v = std::is_floating_point_v&lt;T&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span> : <span class="keyword">public</span> std::make_unsigned&lt;T&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span>&lt;i128&gt; : <span class="keyword">public</span> std::type_identity&lt;u128&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span>&lt;u128&gt; : <span class="keyword">public</span> std::type_identity&lt;u128&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">using</span> <span class="type">make_unsigned_t</span> = <span class="keyword">typename</span> make_unsigned&lt;T&gt;::type;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">noncopyable</span> {</span><br><span class="line">    <span class="built_in">noncopyable</span>() = <span class="keyword">default</span>;</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">noncopyable</span>() = <span class="keyword">default</span>;</span><br><span class="line">    <span class="built_in">noncopyable</span>(<span class="type">const</span> noncopyable &amp;) = <span class="keyword">delete</span>;</span><br><span class="line">    noncopyable &amp;<span class="keyword">operator</span>=(<span class="type">const</span> noncopyable &amp;) = <span class="keyword">delete</span>;</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">istream</span> : <span class="keyword">public</span> noncopyable {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> base = <span class="number">10</span>;</span><br><span class="line">    <span class="type">bool</span> unget = <span class="literal">false</span>, eof = <span class="literal">false</span>, fail = <span class="literal">false</span>;</span><br><span class="line">    <span class="type">char</span> chr = <span class="string">'\0'</span>;</span><br><span class="line">    <span class="function"><span class="type">static</span> <span class="type">bool</span> <span class="title">isssign</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="keyword">return</span> <span class="built_in">isspace</span>(c) || c == <span class="string">'+'</span> || c == <span class="string">'-'</span>; }</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">todigit</span><span class="params">(<span class="type">char</span> c)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (::<span class="built_in">isdigit</span>(c)) <span class="keyword">return</span> c - <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isupper</span>(c)) <span class="keyword">return</span> c - <span class="string">'A'</span> + <span class="number">10</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">islower</span>(c)) <span class="keyword">return</span> c - <span class="string">'a'</span> + <span class="number">10</span>;</span><br><span class="line">        <span class="keyword">return</span> base;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isdigit</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="keyword">return</span> <span class="built_in">todigit</span>(c) &lt; base; }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">char</span> <span class="title">vget</span><span class="params">()</span> </span>= <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">char</span> <span class="title">get</span><span class="params">()</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (!unget)</span><br><span class="line">            <span class="keyword">if</span> ((chr = <span class="built_in">vget</span>()) == EOF) eof = <span class="literal">true</span>;</span><br><span class="line">        unget = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">return</span> chr;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(<span class="type">char</span> &amp;c)</span> </span>{</span><br><span class="line">        c = <span class="built_in">get</span>();</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="title">bool</span><span class="params">()</span> </span>{ <span class="keyword">return</span> !fail; }</span><br><span class="line">    <span class="type">bool</span> <span class="keyword">operator</span>!() { <span class="keyword">return</span> fail; }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_integral_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(T &amp;n) {</span><br><span class="line">        n = <span class="number">0</span>;</span><br><span class="line">        <span class="type">bool</span> f = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isssign</span>(<span class="built_in">get</span>()) &amp;&amp; !eof)</span><br><span class="line">            <span class="keyword">if</span> (chr == <span class="string">'-'</span> &amp;&amp; is_integral_v&lt;T&gt;) f = !f;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n = n * base + <span class="built_in">todigit</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_floating_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(T &amp;n) {</span><br><span class="line">        n = <span class="number">0</span>;</span><br><span class="line">        <span class="type">bool</span> f = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isssign</span>(<span class="built_in">get</span>()) &amp;&amp; !eof)</span><br><span class="line">            <span class="keyword">if</span> (chr == <span class="string">'-'</span>) f = !f;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n = n * base + <span class="built_in">todigit</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (chr == <span class="string">'.'</span>) {</span><br><span class="line">            i64 pow = <span class="number">1</span>;</span><br><span class="line">            <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n += <span class="built_in">todigit</span>(chr) / (T)(pow *= base);</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">char</span> &amp;c) {</span><br><span class="line">        c = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        c = chr;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">bool</span> &amp;f) {</span><br><span class="line">        i64 n;</span><br><span class="line">        *<span class="keyword">this</span> &gt;&gt; n;</span><br><span class="line">        f = (<span class="type">bool</span>)n;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">char</span> *s) {</span><br><span class="line">        s[<span class="number">0</span>] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="type">int</span> len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isgraph</span>(<span class="built_in">get</span>())) s[len++] = chr;</span><br><span class="line">        unget = <span class="literal">true</span>, s[len] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(std::string &amp;s) {</span><br><span class="line">        s.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isgraph</span>(<span class="built_in">get</span>())) s.<span class="built_in">push_back</span>(chr);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(symbols::symbol a) {</span><br><span class="line">        <span class="keyword">switch</span> (a) {</span><br><span class="line">        <span class="keyword">case</span> symbols::bin: base = <span class="number">2</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::oct: base = <span class="number">8</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::dec: base = <span class="number">10</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::hex: base = <span class="number">16</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::ws:</span><br><span class="line">            <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">            unget = <span class="literal">true</span>;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">default</span>: base = <span class="number">10</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(symbols::setbase a) {</span><br><span class="line">        base = std::<span class="built_in">max</span>(std::<span class="built_in">min</span>(a.base, <span class="number">36</span>), <span class="number">2</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">ignore</span><span class="params">(<span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">getline</span><span class="params">(<span class="type">char</span> *s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        s[<span class="number">0</span>] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="type">int</span> len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof) s[len++] = chr;</span><br><span class="line">        <span class="keyword">if</span> (s[len - <span class="number">1</span>] == <span class="string">'\r'</span> &amp;&amp; end == <span class="string">'\n'</span>) --len;</span><br><span class="line">        s[len] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">getline</span><span class="params">(std::string &amp;s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        s.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof) s.<span class="built_in">push_back</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">back</span>() == <span class="string">'\r'</span> &amp;&amp; end == <span class="string">'\n'</span>) s.<span class="built_in">pop_back</span>();</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(<span class="type">char</span> *s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="built_in">getline</span>(s, end);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(std::string &amp;s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="built_in">getline</span>(s, end);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ostream</span> : <span class="keyword">public</span> noncopyable {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> base = <span class="number">10</span>, precision = <span class="number">6</span>, width = <span class="number">0</span>;</span><br><span class="line">    i64 eps = <span class="number">1e6</span>;</span><br><span class="line">    <span class="type">bool</span> adjust = <span class="literal">true</span>, boolalpha = <span class="literal">false</span>, showbase = <span class="literal">false</span>, showpoint = <span class="literal">false</span>,</span><br><span class="line">         showpos = <span class="literal">false</span>, kase = <span class="literal">false</span>, fixed = <span class="literal">false</span>;</span><br><span class="line">    <span class="type">char</span> setfill = <span class="string">' '</span>;</span><br><span class="line">    <span class="function"><span class="type">static</span> i64 <span class="title">qpow</span><span class="params">(i64 n, <span class="type">int</span> m)</span> </span>{</span><br><span class="line">        i64 ret = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = m; i; i &gt;&gt;= <span class="number">1</span>, n *= n)</span><br><span class="line">            <span class="keyword">if</span> (i &amp; <span class="number">1</span>) ret *= n;</span><br><span class="line">        <span class="keyword">return</span> ret;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">fill</span><span class="params">(<span class="type">int</span> n)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (width &gt; n) <span class="built_in">vfill</span>(setfill, width - n);</span><br><span class="line">        width = <span class="number">0</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">char</span> <span class="title">toalpha</span><span class="params">(<span class="type">int</span> n)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (n &lt; <span class="number">10</span>) <span class="keyword">return</span> n + <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">return</span> n - <span class="number">10</span> + (kase ? <span class="string">'A'</span> : <span class="string">'a'</span>);</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vput</span><span class="params">(<span class="type">char</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vputs</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *, <span class="type">int</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vfill</span><span class="params">(<span class="type">char</span>, <span class="type">int</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vflush</span><span class="params">()</span> </span>= <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">put</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="built_in">vput</span>(c); }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_integral_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(T n) {</span><br><span class="line">        <span class="type">static</span> <span class="type">char</span> buf[<span class="number">105</span>];</span><br><span class="line">        <span class="type">char</span> *p = buf + <span class="number">100</span>, *q = buf + <span class="number">100</span>;</span><br><span class="line">        <span class="type">bool</span> f = n &lt; <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        <span class="type">make_unsigned_t</span>&lt;T&gt; m = n;</span><br><span class="line">        <span class="keyword">if</span> (!m) *p-- = <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (m) *p-- = <span class="built_in">toalpha</span>(m % base), m /= base;</span><br><span class="line">        <span class="keyword">if</span> (showbase) <span class="keyword">switch</span> (base) {</span><br><span class="line">            <span class="keyword">case</span> <span class="number">2</span>: *p-- = kase ? <span class="string">'B'</span> : <span class="string">'b'</span>, *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">8</span>: *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">16</span>: *p-- = kase ? <span class="string">'X'</span> : <span class="string">'x'</span>, *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            }</span><br><span class="line">        <span class="keyword">if</span> (!f) {</span><br><span class="line">            <span class="keyword">if</span> (showpos &amp;&amp; is_signed_v&lt;T&gt;) *p-- = <span class="string">'+'</span>;</span><br><span class="line">        } <span class="keyword">else</span> *p-- = <span class="string">'-'</span>;</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(q - p);</span><br><span class="line">        <span class="built_in">vputs</span>(p + <span class="number">1</span>, q - p);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(q - p);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_floating_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(T n) {</span><br><span class="line">        <span class="type">static</span> <span class="type">char</span> buf1[<span class="number">105</span>], buf2[<span class="number">105</span>];</span><br><span class="line">        <span class="keyword">if</span> (std::<span class="built_in">isinf</span>(n)) {</span><br><span class="line">            <span class="keyword">if</span> (n &gt; <span class="number">0</span>) {</span><br><span class="line">                <span class="keyword">if</span> (showpos) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"+INF"</span> : <span class="string">"+inf"</span>);</span><br><span class="line">                <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"INF"</span> : <span class="string">"inf"</span>);</span><br><span class="line">            } <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"-INF"</span> : <span class="string">"-inf"</span>);</span><br><span class="line">            <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">if</span> (std::<span class="built_in">isnan</span>(n)) <span class="keyword">return</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"NAN"</span> : <span class="string">"nan"</span>);</span><br><span class="line">        <span class="type">char</span> *p1 = buf1 + <span class="number">100</span>, *q1 = buf1 + <span class="number">100</span>, *p2 = buf2 + <span class="number">100</span>, *q2 = buf2 + <span class="number">100</span>;</span><br><span class="line">        <span class="type">bool</span> f = n &lt; <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        i64 m1 = std::<span class="built_in">floor</span>(n), m2 = std::<span class="built_in">round</span>((n - m1) * eps);</span><br><span class="line">        <span class="type">int</span> len = precision;</span><br><span class="line">        <span class="keyword">if</span> (m2 &gt;= eps) ++m1, m2 = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (!m1) *p1-- = <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (m1) *p1-- = <span class="built_in">toalpha</span>(m1 % base), m1 /= base;</span><br><span class="line">        <span class="keyword">while</span> (len--) *p2-- = <span class="built_in">toalpha</span>(m2 % base), m2 /= base;</span><br><span class="line">        <span class="keyword">if</span> (showbase) <span class="keyword">switch</span> (base) {</span><br><span class="line">            <span class="keyword">case</span> <span class="number">2</span>: *p1-- = kase ? <span class="string">'B'</span> : <span class="string">'b'</span>, *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">8</span>: *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">16</span>: *p1-- = kase ? <span class="string">'X'</span> : <span class="string">'x'</span>, *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            }</span><br><span class="line">        <span class="keyword">if</span> (!f) {</span><br><span class="line">            <span class="keyword">if</span> (showpos) *p1-- = <span class="string">'+'</span>;</span><br><span class="line">        } <span class="keyword">else</span> *p1-- = <span class="string">'-'</span>;</span><br><span class="line">        <span class="keyword">if</span> (!fixed)</span><br><span class="line">            <span class="keyword">while</span> (*q2 == <span class="string">'0'</span> &amp;&amp; p2 != q2) --q2;</span><br><span class="line">        <span class="keyword">if</span> (showpoint || p2 != q2) *p2-- = <span class="string">'.'</span>;</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>((q1 - p1) + (q2 - p2));</span><br><span class="line">        <span class="built_in">vputs</span>(p1 + <span class="number">1</span>, q1 - p1);</span><br><span class="line">        <span class="built_in">vputs</span>(p2 + <span class="number">1</span>, q2 - p2);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>((q1 - p1) + (q2 - p2));</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">char</span> c) {</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(<span class="number">1</span>);</span><br><span class="line">        <span class="built_in">vput</span>(c);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(<span class="number">1</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> <span class="type">char</span> *s) {</span><br><span class="line">        <span class="type">int</span> n = <span class="built_in">strlen</span>(s);</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(s, n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> std::string &amp;s) {</span><br><span class="line">        <span class="type">int</span> n = s.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(s.<span class="built_in">data</span>(), n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(std::string_view sv) {</span><br><span class="line">        <span class="type">int</span> n = sv.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(sv.<span class="built_in">data</span>(), n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">bool</span> f) {</span><br><span class="line">        <span class="keyword">if</span> (f) {</span><br><span class="line">            <span class="keyword">if</span> (boolalpha) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"TRUE"</span> : <span class="string">"true"</span>);</span><br><span class="line">            <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; <span class="string">'1'</span>;</span><br><span class="line">        } <span class="keyword">else</span> {</span><br><span class="line">            <span class="keyword">if</span> (boolalpha) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"FALSE"</span> : <span class="string">"false"</span>);</span><br><span class="line">            <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; <span class="string">'0'</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> <span class="type">void</span> *p) {</span><br><span class="line">        <span class="type">int</span> n = base;</span><br><span class="line">        <span class="type">bool</span> f = showbase;</span><br><span class="line">        base = <span class="number">16</span>, showbase = <span class="literal">true</span>;</span><br><span class="line">        *<span class="keyword">this</span> &lt;&lt; (u64)p;</span><br><span class="line">        base = n, showbase = f;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(std::<span class="type">nullptr_t</span>) {</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"NULLPTR"</span> : <span class="string">"nullptr"</span>);</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::symbol a) {</span><br><span class="line">        <span class="keyword">switch</span> (a) {</span><br><span class="line">        <span class="keyword">case</span> symbols::endl: <span class="built_in">vput</span>(<span class="string">'\n'</span>); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::ends: <span class="built_in">vput</span>(<span class="string">' '</span>); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::flush: <span class="built_in">vflush</span>(); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::bin: eps = <span class="built_in">qpow</span>(base = <span class="number">2</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::oct: eps = <span class="built_in">qpow</span>(base = <span class="number">8</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::dec: eps = <span class="built_in">qpow</span>(base = <span class="number">10</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::hex: eps = <span class="built_in">qpow</span>(base = <span class="number">16</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::left: adjust = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::right: adjust = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::boolalpha: boolalpha = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noboolalpha: boolalpha = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showbase: showbase = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowbase: showbase = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showpoint: showpoint = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowpoint: showpoint = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showpos: showpos = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowpos: showpos = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::uppercase: kase = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::lowercase: kase = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::fixed: fixed = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::defaultfloat: fixed = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">default</span>:</span><br><span class="line">            base = <span class="number">10</span>, precision = <span class="number">6</span>, width = <span class="number">0</span>, eps = <span class="number">1e6</span>;</span><br><span class="line">            adjust = <span class="literal">true</span>;</span><br><span class="line">            boolalpha = showbase = showpoint = showpos = kase = fixed = <span class="literal">false</span>;</span><br><span class="line">            setfill = <span class="string">' '</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setbase a) {</span><br><span class="line">        base = std::<span class="built_in">max</span>(std::<span class="built_in">min</span>(a.base, <span class="number">36</span>), <span class="number">2</span>);</span><br><span class="line">        eps = <span class="built_in">qpow</span>(base, precision);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setfill a) {</span><br><span class="line">        setfill = a.fill;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setprecision a) {</span><br><span class="line">        precision = std::<span class="built_in">max</span>(a.precision, <span class="number">0</span>);</span><br><span class="line">        eps = <span class="built_in">qpow</span>(base, precision);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setw a) {</span><br><span class="line">        width = std::<span class="built_in">max</span>(a.width, <span class="number">0</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line">} <span class="comment">// namespace interface</span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> SIZ = <span class="number">0xfffff</span>;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">istream</span> : <span class="keyword">public</span> interface::istream {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">char</span> buf[SIZ], *p = buf, *q = buf;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">char</span> <span class="title">vget</span><span class="params">()</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (p == q) {</span><br><span class="line">            <span class="type">int</span> len = <span class="built_in">fread</span>(buf, <span class="number">1</span>, SIZ, stream);</span><br><span class="line">            <span class="keyword">if</span> (!len) <span class="keyword">return</span> EOF;</span><br><span class="line">            p = buf, q = buf + len;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *p++;</span><br><span class="line">    }</span><br><span class="line">  <span class="keyword">protected</span>:</span><br><span class="line">    FILE *stream = stdin;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">istream</span>() { <span class="built_in">fclose</span>(stream); }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ifstream</span> : <span class="keyword">public</span> istream {</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ifstream</span><span class="params">(FILE *p)</span> </span>{ istream::stream = p; }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ifstream</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s)</span> </span>{ istream::stream = <span class="built_in">fopen</span>(s, <span class="string">"r"</span>); }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ostream</span> : <span class="keyword">public</span> interface::ostream {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">char</span> buf[SIZ], *p = buf;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vput</span><span class="params">(<span class="type">char</span> c)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (p - buf &gt;= SIZ) <span class="built_in">vflush</span>();</span><br><span class="line">        *p++ = c;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vputs</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s, <span class="type">int</span> n)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="type">int</span> used = p - buf, len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (n - len + used &gt;= SIZ) {</span><br><span class="line">            <span class="built_in">memcpy</span>(buf + used, s + len, SIZ - used);</span><br><span class="line">            p = buf + SIZ;</span><br><span class="line">            <span class="built_in">vflush</span>();</span><br><span class="line">            len += SIZ - used, used = <span class="number">0</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="built_in">memcpy</span>(buf + used, s + len, n - len);</span><br><span class="line">        p = buf + used + n - len;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vfill</span><span class="params">(<span class="type">char</span> c, <span class="type">int</span> n)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="type">int</span> used = p - buf, len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (n - len + used &gt;= SIZ) {</span><br><span class="line">            <span class="built_in">memset</span>(buf + used, c, SIZ - used);</span><br><span class="line">            p = buf + SIZ;</span><br><span class="line">            <span class="built_in">vflush</span>();</span><br><span class="line">            len += SIZ - used, used = <span class="number">0</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="built_in">memset</span>(buf + used, c, n - len);</span><br><span class="line">        p = buf + used + n - len;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vflush</span><span class="params">()</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="built_in">fwrite</span>(buf, <span class="number">1</span>, p - buf, stream);</span><br><span class="line">        p = buf;</span><br><span class="line">        <span class="built_in">fflush</span>(stream);</span><br><span class="line">    }</span><br><span class="line">  <span class="keyword">protected</span>:</span><br><span class="line">    FILE *stream = stdout;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">ostream</span>() {</span><br><span class="line">        <span class="built_in">vflush</span>();</span><br><span class="line">        <span class="built_in">fclose</span>(stream);</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ofstream</span> : <span class="keyword">public</span> ostream {</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ofstream</span><span class="params">(FILE *p)</span> </span>{ ostream::stream = p; }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ofstream</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s)</span> </span>{ ostream::stream = <span class="built_in">fopen</span>(s, <span class="string">"w"</span>); }</span><br><span class="line">};</span><br><span class="line"><span class="type">static</span> istream is;</span><br><span class="line"><span class="type">static</span> ostream os;</span><br><span class="line">}; <span class="comment">// namespace fastio</span></span><br></pre></td></tr></tbody></table></figure><h4 id="java" tabindex="-1">Java</h4><p>来源：<a href="https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java">https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java</a></p><figure class="highlight java"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> me.weishu.kernelsu.ui;</span><br><span class="line"><span class="keyword">import</span> android.content.Context;</span><br><span class="line"><span class="keyword">import</span> android.content.Intent;</span><br><span class="line"><span class="keyword">import</span> android.content.pm.PackageInfo;</span><br><span class="line"><span class="keyword">import</span> android.content.pm.PackageManager;</span><br><span class="line"><span class="keyword">import</span> android.os.IBinder;</span><br><span class="line"><span class="keyword">import</span> android.os.UserHandle;</span><br><span class="line"><span class="keyword">import</span> android.os.UserManager;</span><br><span class="line"><span class="keyword">import</span> android.util.Log;</span><br><span class="line"><span class="keyword">import</span> androidx.annotation.NonNull;</span><br><span class="line"><span class="keyword">import</span> com.topjohnwu.superuser.ipc.RootService;</span><br><span class="line"><span class="keyword">import</span> java.lang.reflect.Method;</span><br><span class="line"><span class="keyword">import</span> java.util.ArrayList;</span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.IKsuInterface;</span><br><span class="line"><span class="keyword">import</span> rikka.parcelablelist.ParcelableListSlice;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> weishu</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@date</span> 2023/4/18.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">KsuService</span> <span class="keyword">extends</span> <span class="title class_">RootService</span> {</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="type">String</span> <span class="variable">TAG</span> <span class="operator">=</span> <span class="string">"KsuService"</span>;</span><br><span class="line">    <span class="keyword">class</span> <span class="title class_">Stub</span> <span class="keyword">extends</span> <span class="title class_">IKsuInterface</span>.Stub {</span><br><span class="line">        <span class="meta">@Override</span></span><br><span class="line">        <span class="keyword">public</span> ParcelableListSlice&lt;PackageInfo&gt; <span class="title function_">getPackages</span><span class="params">(<span class="type">int</span> flags)</span> {</span><br><span class="line">            List&lt;PackageInfo&gt; list = getInstalledPackagesAll(flags);</span><br><span class="line">            Log.i(TAG, <span class="string">"getPackages: "</span> + list.size());</span><br><span class="line">            <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">ParcelableListSlice</span>&lt;&gt;(list);</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">    <span class="meta">@Override</span></span><br><span class="line">    <span class="keyword">public</span> IBinder <span class="title function_">onBind</span><span class="params">(<span class="meta">@NonNull</span> Intent intent)</span> {</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Stub</span>();</span><br><span class="line">    }</span><br><span class="line">    List&lt;Integer&gt; <span class="title function_">getUserIds</span><span class="params">()</span> {</span><br><span class="line">        List&lt;Integer&gt; result = <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">        <span class="type">UserManager</span> <span class="variable">um</span> <span class="operator">=</span> (UserManager) getSystemService(Context.USER_SERVICE);</span><br><span class="line">        List&lt;UserHandle&gt; userProfiles = um.getUserProfiles();</span><br><span class="line">        <span class="keyword">for</span> (UserHandle userProfile : userProfiles) {</span><br><span class="line">            <span class="type">int</span> <span class="variable">userId</span> <span class="operator">=</span> userProfile.hashCode();</span><br><span class="line">            result.add(userProfile.hashCode());</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> result;</span><br><span class="line">    }</span><br><span class="line">    ArrayList&lt;PackageInfo&gt; <span class="title function_">getInstalledPackagesAll</span><span class="params">(<span class="type">int</span> flags)</span> {</span><br><span class="line">        ArrayList&lt;PackageInfo&gt; packages = <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">        <span class="keyword">for</span> (Integer userId : getUserIds()) {</span><br><span class="line">            Log.i(TAG, <span class="string">"getInstalledPackagesAll: "</span> + userId);</span><br><span class="line">            packages.addAll(getInstalledPackagesAsUser(flags, userId));</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> packages;</span><br><span class="line">    }</span><br><span class="line">    List&lt;PackageInfo&gt; <span class="title function_">getInstalledPackagesAsUser</span><span class="params">(<span class="type">int</span> flags, <span class="type">int</span> userId)</span> {</span><br><span class="line">        <span class="keyword">try</span> {</span><br><span class="line">            <span class="type">PackageManager</span> <span class="variable">pm</span> <span class="operator">=</span> getPackageManager();</span><br><span class="line">            <span class="type">Method</span> <span class="variable">getInstalledPackagesAsUser</span> <span class="operator">=</span> pm.getClass().getDeclaredMethod(<span class="string">"getInstalledPackagesAsUser"</span>, <span class="type">int</span>.class, <span class="type">int</span>.class);</span><br><span class="line">            <span class="keyword">return</span> (List&lt;PackageInfo&gt;) getInstalledPackagesAsUser.invoke(pm, flags, userId);</span><br><span class="line">        } <span class="keyword">catch</span> (Throwable e) {</span><br><span class="line">            Log.e(TAG, <span class="string">"err"</span>, e);</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">    }</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h4 id="kotlin" tabindex="-1">Kotlin</h4><p>来源：<a href="https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt">https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt</a></p><figure class="highlight kotlin"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> me.weishu.kernelsu.ui.screen</span><br><span class="line"><span class="keyword">import</span> android.net.Uri</span><br><span class="line"><span class="keyword">import</span> android.os.Environment</span><br><span class="line"><span class="keyword">import</span> android.os.Parcelable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.Column</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.fillMaxSize</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.padding</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.rememberScrollState</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.verticalScroll</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.Icons</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.automirrored.filled.ArrowBack</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.filled.Refresh</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.filled.Save</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.ExperimentalMaterial3Api</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.ExtendedFloatingActionButton</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Icon</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.IconButton</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.MaterialTheme</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Scaffold</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Text</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.TopAppBar</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.Composable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.LaunchedEffect</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.getValue</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.mutableStateOf</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.rememberCoroutineScope</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.saveable.rememberSaveable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.setValue</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.ExperimentalComposeUiApi</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.Modifier</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.input.key.Key</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.input.key.key</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.res.stringResource</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.text.font.FontFamily</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.tooling.preview.Preview</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.unit.dp</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.<span class="keyword">annotation</span>.Destination</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.navigation.DestinationsNavigator</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.Dispatchers</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.launch</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.withContext</span><br><span class="line"><span class="keyword">import</span> kotlinx.parcelize.Parcelize</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.R</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.component.KeyEventBlocker</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.LkmSelection</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.LocalSnackbarHost</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.installBoot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.flashModule</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.reboot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.restoreBoot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.uninstallPermanently</span><br><span class="line"><span class="keyword">import</span> java.io.File</span><br><span class="line"><span class="keyword">import</span> java.text.SimpleDateFormat</span><br><span class="line"><span class="keyword">import</span> java.util.Date</span><br><span class="line"><span class="keyword">import</span> java.util.Locale</span><br><span class="line"><span class="keyword">enum</span> <span class="keyword">class</span> <span class="title class_">FlashingStatus</span> {</span><br><span class="line">    FLASHING,</span><br><span class="line">    SUCCESS,</span><br><span class="line">    FAILED</span><br><span class="line">}</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> weishu</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@date</span> 2023/1/1.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="meta">@OptIn(ExperimentalComposeUiApi::class)</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="meta">@Destination</span></span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">FlashScreen</span><span class="params">(navigator: <span class="type">DestinationsNavigator</span>, flashIt: <span class="type">FlashIt</span>)</span></span> {</span><br><span class="line">    <span class="keyword">var</span> text <span class="keyword">by</span> rememberSaveable { mutableStateOf(<span class="string">""</span>) }</span><br><span class="line">    <span class="keyword">val</span> logContent = rememberSaveable { StringBuilder() }</span><br><span class="line">    <span class="keyword">var</span> showFloatAction <span class="keyword">by</span> rememberSaveable { mutableStateOf(<span class="literal">false</span>) }</span><br><span class="line">    <span class="keyword">val</span> snackBarHost = LocalSnackbarHost.current</span><br><span class="line">    <span class="keyword">val</span> scope = rememberCoroutineScope()</span><br><span class="line">    <span class="keyword">val</span> scrollState = rememberScrollState()</span><br><span class="line">    <span class="keyword">var</span> flashing <span class="keyword">by</span> rememberSaveable {</span><br><span class="line">        mutableStateOf(FlashingStatus.FLASHING)</span><br><span class="line">    }</span><br><span class="line">    LaunchedEffect(<span class="built_in">Unit</span>) {</span><br><span class="line">        <span class="keyword">if</span> (text.isNotEmpty()) {</span><br><span class="line">            <span class="keyword">return</span><span class="symbol">@LaunchedEffect</span></span><br><span class="line">        }</span><br><span class="line">        withContext(Dispatchers.IO) {</span><br><span class="line">            flashIt(flashIt, onFinish = { showReboot, code -&gt;</span><br><span class="line">                <span class="keyword">if</span> (code != <span class="number">0</span>) {</span><br><span class="line">                    text += <span class="string">"Error: exit code = <span class="variable">$code</span>.\nPlease save and check the log.\n"</span></span><br><span class="line">                }</span><br><span class="line">                <span class="keyword">if</span> (showReboot) {</span><br><span class="line">                    text += <span class="string">"\n\n\n"</span></span><br><span class="line">                    showFloatAction = <span class="literal">true</span></span><br><span class="line">                }</span><br><span class="line">                flashing = <span class="keyword">if</span> (code == <span class="number">0</span>) FlashingStatus.SUCCESS <span class="keyword">else</span> FlashingStatus.FAILED</span><br><span class="line">            }, onStdout = {</span><br><span class="line">                text += <span class="string">"<span class="variable">$it</span>\n"</span></span><br><span class="line">                logContent.append(it).append(<span class="string">"\n"</span>)</span><br><span class="line">            }, onStderr = {</span><br><span class="line">                logContent.append(it).append(<span class="string">"\n"</span>)</span><br><span class="line">            });</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">    Scaffold(</span><br><span class="line">        topBar = {</span><br><span class="line">            TopBar(</span><br><span class="line">                flashing,</span><br><span class="line">                onBack = {</span><br><span class="line">                    navigator.popBackStack()</span><br><span class="line">                },</span><br><span class="line">                onSave = {</span><br><span class="line">                    scope.launch {</span><br><span class="line">                        <span class="keyword">val</span> format = SimpleDateFormat(<span class="string">"yyyy-MM-dd-HH-mm-ss"</span>, Locale.getDefault())</span><br><span class="line">                        <span class="keyword">val</span> date = format.format(Date())</span><br><span class="line">                        <span class="keyword">val</span> file = File(</span><br><span class="line">                            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),</span><br><span class="line">                            <span class="string">"KernelSU_install_log_<span class="subst">${date}</span>.log"</span></span><br><span class="line">                        )</span><br><span class="line">                        file.writeText(logContent.toString())</span><br><span class="line">                        snackBarHost.showSnackbar(<span class="string">"Log saved to <span class="subst">${file.absolutePath}</span>"</span>)</span><br><span class="line">                    }</span><br><span class="line">                }</span><br><span class="line">            )</span><br><span class="line">        },</span><br><span class="line">        floatingActionButton = {</span><br><span class="line">            <span class="keyword">if</span> (showFloatAction) {</span><br><span class="line">                <span class="keyword">val</span> reboot = stringResource(id = R.string.reboot)</span><br><span class="line">                ExtendedFloatingActionButton(</span><br><span class="line">                    onClick = {</span><br><span class="line">                        scope.launch {</span><br><span class="line">                            withContext(Dispatchers.IO) {</span><br><span class="line">                                reboot()</span><br><span class="line">                            }</span><br><span class="line">                        }</span><br><span class="line">                    },</span><br><span class="line">                    icon = { Icon(Icons.Filled.Refresh, reboot) },</span><br><span class="line">                    text = { Text(text = reboot) },</span><br><span class="line">                )</span><br><span class="line">            }</span><br><span class="line">        }</span><br><span class="line">    ) { innerPadding -&gt;</span><br><span class="line">        KeyEventBlocker {</span><br><span class="line">            it.key == Key.VolumeDown || it.key == Key.VolumeUp</span><br><span class="line">        }</span><br><span class="line">        Column(</span><br><span class="line">            modifier = Modifier</span><br><span class="line">                .fillMaxSize(<span class="number">1f</span>)</span><br><span class="line">                .padding(innerPadding)</span><br><span class="line">                .verticalScroll(scrollState),</span><br><span class="line">        ) {</span><br><span class="line">            LaunchedEffect(text) {</span><br><span class="line">                scrollState.animateScrollTo(scrollState.maxValue)</span><br><span class="line">            }</span><br><span class="line">            Text(</span><br><span class="line">                modifier = Modifier.padding(<span class="number">8.</span>dp),</span><br><span class="line">                text = text,</span><br><span class="line">                fontSize = MaterialTheme.typography.bodySmall.fontSize,</span><br><span class="line">                fontFamily = FontFamily.Monospace,</span><br><span class="line">                lineHeight = MaterialTheme.typography.bodySmall.lineHeight,</span><br><span class="line">            )</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Parcelize</span></span><br><span class="line"><span class="keyword">sealed</span> <span class="keyword">class</span> <span class="title class_">FlashIt</span> : <span class="type">Parcelable</span> {</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">class</span> <span class="title class_">FlashBoot</span>(<span class="keyword">val</span> boot: Uri? = <span class="literal">null</span>, <span class="keyword">val</span> lkm: LkmSelection, <span class="keyword">val</span> ota: <span class="built_in">Boolean</span>) :</span><br><span class="line">        FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">class</span> <span class="title class_">FlashModule</span>(<span class="keyword">val</span> uri: Uri) : FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">object</span> FlashRestore : FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">object</span> FlashUninstall : FlashIt()</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">flashIt</span><span class="params">(</span></span></span><br><span class="line"><span class="params"><span class="function">    flashIt: <span class="type">FlashIt</span>, onFinish: (<span class="type">Boolean</span>, <span class="type">Int</span>) -&gt; <span class="type">Unit</span>,</span></span></span><br><span class="line"><span class="params"><span class="function">    onStdout: (<span class="type">String</span>) -&gt; <span class="type">Unit</span>,</span></span></span><br><span class="line"><span class="params"><span class="function">    onStderr: (<span class="type">String</span>) -&gt; <span class="type">Unit</span></span></span></span><br><span class="line"><span class="params"><span class="function">)</span></span> {</span><br><span class="line">    <span class="keyword">when</span> (flashIt) {</span><br><span class="line">        <span class="keyword">is</span> FlashIt.FlashBoot -&gt; installBoot(</span><br><span class="line">            flashIt.boot,</span><br><span class="line">            flashIt.lkm,</span><br><span class="line">            flashIt.ota,</span><br><span class="line">            onFinish,</span><br><span class="line">            onStdout,</span><br><span class="line">            onStderr</span><br><span class="line">        )</span><br><span class="line">        <span class="keyword">is</span> FlashIt.FlashModule -&gt; flashModule(flashIt.uri, onFinish, onStdout, onStderr)</span><br><span class="line">        FlashIt.FlashRestore -&gt; restoreBoot(onFinish, onStdout, onStderr)</span><br><span class="line">        FlashIt.FlashUninstall -&gt; uninstallPermanently(onFinish, onStdout, onStderr)</span><br><span class="line">    }</span><br><span class="line">}</span><br><span class="line"><span class="meta">@OptIn(ExperimentalMaterial3Api::class)</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="keyword">private</span> <span class="function"><span class="keyword">fun</span> <span class="title">TopBar</span><span class="params">(status: <span class="type">FlashingStatus</span>, onBack: () -&gt; <span class="type">Unit</span> = {}, onSave: () -&gt; <span class="type">Unit</span> = {})</span></span> {</span><br><span class="line">    TopAppBar(</span><br><span class="line">        title = {</span><br><span class="line">            Text(</span><br><span class="line">                stringResource(</span><br><span class="line">                    <span class="keyword">when</span> (status) {</span><br><span class="line">                        FlashingStatus.FLASHING -&gt; R.string.flashing</span><br><span class="line">                        FlashingStatus.SUCCESS -&gt; R.string.flash_success</span><br><span class="line">                        FlashingStatus.FAILED -&gt; R.string.flash_failed</span><br><span class="line">                    }</span><br><span class="line">                )</span><br><span class="line">            )</span><br><span class="line">        },</span><br><span class="line">        navigationIcon = {</span><br><span class="line">            IconButton(</span><br><span class="line">                onClick = onBack</span><br><span class="line">            ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = <span class="literal">null</span>) }</span><br><span class="line">        },</span><br><span class="line">        actions = {</span><br><span class="line">            IconButton(onClick = onSave) {</span><br><span class="line">                Icon(</span><br><span class="line">                    imageVector = Icons.Filled.Save,</span><br><span class="line">                    contentDescription = <span class="string">"Localized description"</span></span><br><span class="line">                )</span><br><span class="line">            }</span><br><span class="line">        }</span><br><span class="line">    )</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Preview</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">InstallPreview</span><span class="params">()</span></span> {</span><br><span class="line">    InstallScreen(EmptyDestinationsNavigator)</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h3 id="%E8%A7%A3%E9%87%8A%E8%AF%AD%E8%A8%80" tabindex="-1">解释语言</h3><h4 id="python" tabindex="-1">Python</h4><p>来源：<a href="https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/yt_dlp/downloader/dash.py">https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/yt_dlp/downloader/dash.py</a></p><figure class="highlight python"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> urllib.parse</span><br><span class="line"><span class="keyword">from</span> . <span class="keyword">import</span> get_suitable_downloader</span><br><span class="line"><span class="keyword">from</span> .fragment <span class="keyword">import</span> FragmentFD</span><br><span class="line"><span class="keyword">from</span> ..utils <span class="keyword">import</span> update_url_query, urljoin</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">DashSegmentsFD</span>(<span class="title class_ inherited__">FragmentFD</span>):</span><br><span class="line">    <span class="string">"""</span></span><br><span class="line"><span class="string">    Download segments in a DASH manifest. External downloaders can take over</span></span><br><span class="line"><span class="string">    the fragment downloads by supporting the 'dash_frag_urls' protocol</span></span><br><span class="line"><span class="string">    """</span></span><br><span class="line">    FD_NAME = <span class="string">'dashsegments'</span></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">real_download</span>(<span class="params">self, filename, info_dict</span>):</span><br><span class="line">        <span class="keyword">if</span> <span class="string">'http_dash_segments_generator'</span> <span class="keyword">in</span> info_dict[<span class="string">'protocol'</span>].split(<span class="string">'+'</span>):</span><br><span class="line">            real_downloader = <span class="literal">None</span>  <span class="comment"># No external FD can support --live-from-start</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="keyword">if</span> info_dict.get(<span class="string">'is_live'</span>):</span><br><span class="line">                <span class="variable language_">self</span>.report_error(<span class="string">'Live DASH videos are not supported'</span>)</span><br><span class="line">            real_downloader = get_suitable_downloader(</span><br><span class="line">                info_dict, <span class="variable language_">self</span>.params, <span class="literal">None</span>, protocol=<span class="string">'dash_frag_urls'</span>, to_stdout=(filename == <span class="string">'-'</span>))</span><br><span class="line">        real_start = time.time()</span><br><span class="line">        requested_formats = [{**info_dict, **fmt} <span class="keyword">for</span> fmt <span class="keyword">in</span> info_dict.get(<span class="string">'requested_formats'</span>, [])]</span><br><span class="line">        args = []</span><br><span class="line">        <span class="keyword">for</span> fmt <span class="keyword">in</span> requested_formats <span class="keyword">or</span> [info_dict]:</span><br><span class="line">            <span class="keyword">try</span>:</span><br><span class="line">                fragment_count = <span class="number">1</span> <span class="keyword">if</span> <span class="variable language_">self</span>.params.get(<span class="string">'test'</span>) <span class="keyword">else</span> <span class="built_in">len</span>(fmt[<span class="string">'fragments'</span>])</span><br><span class="line">            <span class="keyword">except</span> TypeError:</span><br><span class="line">                fragment_count = <span class="literal">None</span></span><br><span class="line">            ctx = {</span><br><span class="line">                <span class="string">'filename'</span>: fmt.get(<span class="string">'filepath'</span>) <span class="keyword">or</span> filename,</span><br><span class="line">                <span class="string">'live'</span>: <span class="string">'is_from_start'</span> <span class="keyword">if</span> fmt.get(<span class="string">'is_from_start'</span>) <span class="keyword">else</span> fmt.get(<span class="string">'is_live'</span>),</span><br><span class="line">                <span class="string">'total_frags'</span>: fragment_count,</span><br><span class="line">            }</span><br><span class="line">            <span class="keyword">if</span> real_downloader:</span><br><span class="line">                <span class="variable language_">self</span>._prepare_external_frag_download(ctx)</span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                <span class="variable language_">self</span>._prepare_and_start_frag_download(ctx, fmt)</span><br><span class="line">            ctx[<span class="string">'start'</span>] = real_start</span><br><span class="line">            extra_query = <span class="literal">None</span></span><br><span class="line">            extra_param_to_segment_url = info_dict.get(<span class="string">'extra_param_to_segment_url'</span>)</span><br><span class="line">            <span class="keyword">if</span> extra_param_to_segment_url:</span><br><span class="line">                extra_query = urllib.parse.parse_qs(extra_param_to_segment_url)</span><br><span class="line">            fragments_to_download = <span class="variable language_">self</span>._get_fragments(fmt, ctx, extra_query)</span><br><span class="line">            <span class="keyword">if</span> real_downloader:</span><br><span class="line">                <span class="variable language_">self</span>.to_screen(</span><br><span class="line">                    <span class="string">f'[<span class="subst">{self.FD_NAME}</span>] Fragment downloads will be delegated to <span class="subst">{real_downloader.get_basename()}</span>'</span>)</span><br><span class="line">                info_dict[<span class="string">'fragments'</span>] = <span class="built_in">list</span>(fragments_to_download)</span><br><span class="line">                fd = real_downloader(<span class="variable language_">self</span>.ydl, <span class="variable language_">self</span>.params)</span><br><span class="line">                <span class="keyword">return</span> fd.real_download(filename, info_dict)</span><br><span class="line">            args.append([ctx, fragments_to_download, fmt])</span><br><span class="line">        <span class="keyword">return</span> <span class="variable language_">self</span>.download_and_append_fragments_multiple(*args, is_fatal=<span class="keyword">lambda</span> idx: idx == <span class="number">0</span>)</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">_resolve_fragments</span>(<span class="params">self, fragments, ctx</span>):</span><br><span class="line">        fragments = fragments(ctx) <span class="keyword">if</span> <span class="built_in">callable</span>(fragments) <span class="keyword">else</span> fragments</span><br><span class="line">        <span class="keyword">return</span> [<span class="built_in">next</span>(<span class="built_in">iter</span>(fragments))] <span class="keyword">if</span> <span class="variable language_">self</span>.params.get(<span class="string">'test'</span>) <span class="keyword">else</span> fragments</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">_get_fragments</span>(<span class="params">self, fmt, ctx, extra_query</span>):</span><br><span class="line">        fragment_base_url = fmt.get(<span class="string">'fragment_base_url'</span>)</span><br><span class="line">        fragments = <span class="variable language_">self</span>._resolve_fragments(fmt[<span class="string">'fragments'</span>], ctx)</span><br><span class="line">        frag_index = <span class="number">0</span></span><br><span class="line">        <span class="keyword">for</span> i, fragment <span class="keyword">in</span> <span class="built_in">enumerate</span>(fragments):</span><br><span class="line">            frag_index += <span class="number">1</span></span><br><span class="line">            <span class="keyword">if</span> frag_index &lt;= ctx[<span class="string">'fragment_index'</span>]:</span><br><span class="line">                <span class="keyword">continue</span></span><br><span class="line">            fragment_url = fragment.get(<span class="string">'url'</span>)</span><br><span class="line">            <span class="keyword">if</span> <span class="keyword">not</span> fragment_url:</span><br><span class="line">                <span class="keyword">assert</span> fragment_base_url</span><br><span class="line">                fragment_url = urljoin(fragment_base_url, fragment[<span class="string">'path'</span>])</span><br><span class="line">            <span class="keyword">if</span> extra_query:</span><br><span class="line">                fragment_url = update_url_query(fragment_url, extra_query)</span><br><span class="line">            <span class="keyword">yield</span> {</span><br><span class="line">                <span class="string">'frag_index'</span>: frag_index,</span><br><span class="line">                <span class="string">'fragment_count'</span>: fragment.get(<span class="string">'fragment_count'</span>),</span><br><span class="line">                <span class="string">'index'</span>: i,</span><br><span class="line">                <span class="string">'url'</span>: fragment_url,</span><br><span class="line">            }</span><br></pre></td></tr></tbody></table></figure><h4 id="shell" tabindex="-1">Shell</h4><p>来源：<a href="https://raw.githubusercontent.com/f-droid/fdroidclient/master/create_ota.sh">https://raw.githubusercontent.com/f-droid/fdroidclient/master/create_ota.sh</a></p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="comment"># Script to prepare an update.zip containing F-Droid</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line">PROG_DIR=$(<span class="built_in">dirname</span> $(<span class="built_in">realpath</span> <span class="variable">$0</span>))</span><br><span class="line"></span><br><span class="line">TMP_DIR=$(<span class="built_in">mktemp</span> -d -t fdroidclient.tmp.XXXXXXXX)</span><br><span class="line"><span class="built_in">trap</span> <span class="string">"rm -rf <span class="variable">$TMP_DIR</span>"</span> EXIT</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="function"><span class="title">error</span></span>() {</span><br><span class="line">    <span class="built_in">echo</span> <span class="string">"*** ERROR: "</span> <span class="variable">$@</span></span><br><span class="line">    usage</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="function"><span class="title">usage</span></span>() {</span><br><span class="line">    <span class="built_in">cat</span> &lt;&lt; <span class="string">EOFU</span></span><br><span class="line"><span class="string">Usage: $0 variant</span></span><br><span class="line"><span class="string">where:</span></span><br><span class="line"><span class="string"> - variant is one of: debug, release, or binary</span></span><br><span class="line"><span class="string">EOFU</span></span><br><span class="line">    <span class="built_in">exit</span> 1</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment"># Parse input</span></span><br><span class="line">VARIANT=<span class="string">"<span class="variable">$1</span>"</span></span><br><span class="line">[[ -z <span class="string">"<span class="variable">$VARIANT</span>"</span> ]] &amp;&amp; error <span class="string">"Missing variant"</span></span><br><span class="line"></span><br><span class="line">VERSIONCODE=<span class="variable">$2</span></span><br><span class="line"></span><br><span class="line">GPG=<span class="string">"gpg --keyring <span class="variable">$PROG_DIR</span>/f-droid.org-signing-key.gpg --no-default-keyring --trust-model always"</span></span><br><span class="line"></span><br><span class="line">GITVERSION=$(git describe --tags --always)</span><br><span class="line"></span><br><span class="line">FDROID_APK=F-Droid.apk</span><br><span class="line"></span><br><span class="line"><span class="comment"># Collect files</span></span><br><span class="line"><span class="built_in">mkdir</span> -p <span class="variable">$TMP_DIR</span>/META-INF/com/google/android/</span><br><span class="line"><span class="built_in">cp</span> app/src/main/scripts/update-binary <span class="variable">$TMP_DIR</span>/META-INF/com/google/android/</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"binary"</span> ] ; <span class="keyword">then</span></span><br><span class="line">    <span class="keyword">if</span> [ -z <span class="variable">$VERSIONCODE</span> ]; <span class="keyword">then</span></span><br><span class="line">        curl -L https://f-droid.org/<span class="variable">$FDROID_APK</span> &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">        curl -L https://f-droid.org/<span class="variable">${FDROID_APK}</span>.asc &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        GITVERSION=<span class="variable">$VERSIONCODE</span></span><br><span class="line">        DL_APK=org.fdroid.fdroid_<span class="variable">${VERSIONCODE}</span>.apk</span><br><span class="line">        curl -L https://f-droid.org/repo/<span class="variable">$DL_APK</span> &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">        curl -L https://f-droid.org/repo/<span class="variable">${DL_APK}</span>.asc &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="variable">$GPG</span> --verify <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="built_in">rm</span> <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    <span class="built_in">cd</span> <span class="variable">$PROG_DIR</span></span><br><span class="line">    ./gradlew assemble$(<span class="built_in">echo</span> <span class="variable">$VARIANT</span> | <span class="built_in">tr</span> <span class="string">'dr'</span> <span class="string">'DR'</span>)</span><br><span class="line">    OUT_DIR=<span class="variable">$PROG_DIR</span>/app/build/outputs/apk</span><br><span class="line">    <span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"debug"</span> ]; <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">elif</span> [ -f <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-signed.apk ]; <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-signed.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-unsigned.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Make zip</span></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"binary"</span> ] ; <span class="keyword">then</span></span><br><span class="line">    ZIPBASE=F-DroidFromBinaries-<span class="variable">${GITVERSION}</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    ZIPBASE=F-Droid-<span class="variable">${GITVERSION}</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"debug"</span> ]; <span class="keyword">then</span></span><br><span class="line">    ZIP=<span class="variable">${ZIPBASE}</span>-debug.zip</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    ZIP=<span class="variable">${ZIPBASE}</span>.zip</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line">OUT_DIR=<span class="variable">$PROG_DIR</span>/app/build/distributions</span><br><span class="line"><span class="built_in">mkdir</span> -p <span class="variable">$OUT_DIR</span></span><br><span class="line">[ -f <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span> ] &amp;&amp; <span class="built_in">rm</span> -f <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span></span><br><span class="line"><span class="built_in">pushd</span> <span class="variable">$TMP_DIR</span></span><br><span class="line">zip -r <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span> .</span><br><span class="line"><span class="built_in">popd</span></span><br></pre></td></tr></tbody></table></figure><h4 id="javascript" tabindex="-1">JavaScript</h4><p>来源：<a href="https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/js/search/local-search.js">https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/js/search/local-search.js</a></p><figure class="highlight javascript"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Refer to hexo-generator-searchdb</span></span><br><span class="line"><span class="comment"> * https://github.com/next-theme/hexo-generator-searchdb/blob/main/dist/search.js</span></span><br><span class="line"><span class="comment"> * Modified by hexo-theme-butterfly</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">LocalSearch</span> {</span><br><span class="line">  <span class="title function_">constructor</span> (<span class="params">{</span></span><br><span class="line"><span class="params">    path = <span class="string">''</span>,</span></span><br><span class="line"><span class="params">    <span class="built_in">unescape</span> = <span class="literal">false</span>,</span></span><br><span class="line"><span class="params">    top_n_per_article = <span class="number">1</span></span></span><br><span class="line"><span class="params">  }</span>) {</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">path</span> = path</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">unescape</span> = <span class="built_in">unescape</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">top_n_per_article</span> = top_n_per_article</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">isfetched</span> = <span class="literal">false</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">datas</span> = <span class="literal">null</span></span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">getIndexByWord</span> (words, text, caseSensitive = <span class="literal">false</span>) {</span><br><span class="line">    <span class="keyword">const</span> index = []</span><br><span class="line">    <span class="keyword">const</span> included = <span class="keyword">new</span> <span class="title class_">Set</span>()</span><br><span class="line">    <span class="keyword">if</span> (!caseSensitive) {</span><br><span class="line">      text = text.<span class="title function_">toLowerCase</span>()</span><br><span class="line">    }</span><br><span class="line">    words.<span class="title function_">forEach</span>(<span class="function"><span class="params">word</span> =&gt;</span> {</span><br><span class="line">      <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">unescape</span>) {</span><br><span class="line">        <span class="keyword">const</span> div = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>)</span><br><span class="line">        div.<span class="property">innerText</span> = word</span><br><span class="line">        word = div.<span class="property">innerHTML</span></span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">const</span> wordLen = word.<span class="property">length</span></span><br><span class="line">      <span class="keyword">if</span> (wordLen === <span class="number">0</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">let</span> startPosition = <span class="number">0</span></span><br><span class="line">      <span class="keyword">let</span> position = -<span class="number">1</span></span><br><span class="line">      <span class="keyword">if</span> (!caseSensitive) {</span><br><span class="line">        word = word.<span class="title function_">toLowerCase</span>()</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">while</span> ((position = text.<span class="title function_">indexOf</span>(word, startPosition)) &gt; -<span class="number">1</span>) {</span><br><span class="line">        index.<span class="title function_">push</span>({ position, word })</span><br><span class="line">        included.<span class="title function_">add</span>(word)</span><br><span class="line">        startPosition = position + wordLen</span><br><span class="line">      }</span><br><span class="line">    })</span><br><span class="line">    <span class="comment">// Sort index by position of keyword</span></span><br><span class="line">    index.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">      <span class="keyword">if</span> (left.<span class="property">position</span> !== right.<span class="property">position</span>) {</span><br><span class="line">        <span class="keyword">return</span> left.<span class="property">position</span> - right.<span class="property">position</span></span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">return</span> right.<span class="property">word</span>.<span class="property">length</span> - left.<span class="property">word</span>.<span class="property">length</span></span><br><span class="line">    })</span><br><span class="line">    <span class="keyword">return</span> [index, included]</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Merge hits into slices</span></span><br><span class="line">  <span class="title function_">mergeIntoSlice</span> (start, end, index) {</span><br><span class="line">    <span class="keyword">let</span> item = index[<span class="number">0</span>]</span><br><span class="line">    <span class="keyword">let</span> { position, word } = item</span><br><span class="line">    <span class="keyword">const</span> hits = []</span><br><span class="line">    <span class="keyword">const</span> count = <span class="keyword">new</span> <span class="title class_">Set</span>()</span><br><span class="line">    <span class="keyword">while</span> (position + word.<span class="property">length</span> &lt;= end &amp;&amp; index.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">      count.<span class="title function_">add</span>(word)</span><br><span class="line">      hits.<span class="title function_">push</span>({</span><br><span class="line">        position,</span><br><span class="line">        <span class="attr">length</span>: word.<span class="property">length</span></span><br><span class="line">      })</span><br><span class="line">      <span class="keyword">const</span> wordEnd = position + word.<span class="property">length</span></span><br><span class="line">      <span class="comment">// Move to next position of hit</span></span><br><span class="line">      index.<span class="title function_">shift</span>()</span><br><span class="line">      <span class="keyword">while</span> (index.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        item = index[<span class="number">0</span>]</span><br><span class="line">        position = item.<span class="property">position</span></span><br><span class="line">        word = item.<span class="property">word</span></span><br><span class="line">        <span class="keyword">if</span> (wordEnd &gt; position) {</span><br><span class="line">          index.<span class="title function_">shift</span>()</span><br><span class="line">        } <span class="keyword">else</span> {</span><br><span class="line">          <span class="keyword">break</span></span><br><span class="line">        }</span><br><span class="line">      }</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">return</span> {</span><br><span class="line">      hits,</span><br><span class="line">      start,</span><br><span class="line">      end,</span><br><span class="line">      <span class="attr">count</span>: count.<span class="property">size</span></span><br><span class="line">    }</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight title and content</span></span><br><span class="line">  <span class="title function_">highlightKeyword</span> (val, slice) {</span><br><span class="line">    <span class="keyword">let</span> result = <span class="string">''</span></span><br><span class="line">    <span class="keyword">let</span> index = slice.<span class="property">start</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">const</span> { position, length } <span class="keyword">of</span> slice.<span class="property">hits</span>) {</span><br><span class="line">      result += val.<span class="title function_">substring</span>(index, position)</span><br><span class="line">      index = position + length</span><br><span class="line">      result += <span class="string">`&lt;mark class="search-keyword"&gt;<span class="subst">${val.substr(position, length)}</span>&lt;/mark&gt;`</span></span><br><span class="line">    }</span><br><span class="line">    result += val.<span class="title function_">substring</span>(index, slice.<span class="property">end</span>)</span><br><span class="line">    <span class="keyword">return</span> result</span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">getResultItems</span> (keywords) {</span><br><span class="line">    <span class="keyword">const</span> resultItems = []</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">datas</span>.<span class="title function_">forEach</span>(<span class="function">(<span class="params">{ title, content, url }</span>) =&gt;</span> {</span><br><span class="line">      <span class="comment">// The number of different keywords included in the article.</span></span><br><span class="line">      <span class="keyword">const</span> [indexOfTitle, keysOfTitle] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, title)</span><br><span class="line">      <span class="keyword">const</span> [indexOfContent, keysOfContent] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, content)</span><br><span class="line">      <span class="keyword">const</span> includedCount = <span class="keyword">new</span> <span class="title class_">Set</span>([...keysOfTitle, ...keysOfContent]).<span class="property">size</span></span><br><span class="line">      <span class="comment">// Show search results</span></span><br><span class="line">      <span class="keyword">const</span> hitCount = indexOfTitle.<span class="property">length</span> + indexOfContent.<span class="property">length</span></span><br><span class="line">      <span class="keyword">if</span> (hitCount === <span class="number">0</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">const</span> slicesOfTitle = []</span><br><span class="line">      <span class="keyword">if</span> (indexOfTitle.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        slicesOfTitle.<span class="title function_">push</span>(<span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(<span class="number">0</span>, title.<span class="property">length</span>, indexOfTitle))</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">let</span> slicesOfContent = []</span><br><span class="line">      <span class="keyword">while</span> (indexOfContent.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        <span class="keyword">const</span> item = indexOfContent[<span class="number">0</span>]</span><br><span class="line">        <span class="keyword">const</span> { position } = item</span><br><span class="line">        <span class="comment">// Cut out 120 characters. The maxlength of .search-input is 80.</span></span><br><span class="line">        <span class="keyword">const</span> start = <span class="title class_">Math</span>.<span class="title function_">max</span>(<span class="number">0</span>, position - <span class="number">20</span>)</span><br><span class="line">        <span class="keyword">const</span> end = <span class="title class_">Math</span>.<span class="title function_">min</span>(content.<span class="property">length</span>, position + <span class="number">100</span>)</span><br><span class="line">        slicesOfContent.<span class="title function_">push</span>(<span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(start, end, indexOfContent))</span><br><span class="line">      }</span><br><span class="line">      <span class="comment">// Sort slices in content by included keywords' count and hits' count</span></span><br><span class="line">      slicesOfContent.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">        <span class="keyword">if</span> (left.<span class="property">count</span> !== right.<span class="property">count</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">count</span> - left.<span class="property">count</span></span><br><span class="line">        } <span class="keyword">else</span> <span class="keyword">if</span> (left.<span class="property">hits</span>.<span class="property">length</span> !== right.<span class="property">hits</span>.<span class="property">length</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">hits</span>.<span class="property">length</span> - left.<span class="property">hits</span>.<span class="property">length</span></span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> left.<span class="property">start</span> - right.<span class="property">start</span></span><br><span class="line">      })</span><br><span class="line">      <span class="comment">// Select top N slices in content</span></span><br><span class="line">      <span class="keyword">const</span> upperBound = <span class="built_in">parseInt</span>(<span class="variable language_">this</span>.<span class="property">top_n_per_article</span>, <span class="number">10</span>)</span><br><span class="line">      <span class="keyword">if</span> (upperBound &gt;= <span class="number">0</span>) {</span><br><span class="line">        slicesOfContent = slicesOfContent.<span class="title function_">slice</span>(<span class="number">0</span>, upperBound)</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">let</span> resultItem = <span class="string">''</span></span><br><span class="line">      url = <span class="keyword">new</span> <span class="title function_">URL</span>(url, location.<span class="property">origin</span>)</span><br><span class="line">      url.<span class="property">searchParams</span>.<span class="title function_">append</span>(<span class="string">'highlight'</span>, keywords.<span class="title function_">join</span>(<span class="string">' '</span>))</span><br><span class="line">      <span class="keyword">if</span> (slicesOfTitle.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        resultItem += <span class="string">`&lt;div class="local-search-hit-item"&gt;&lt;a href="<span class="subst">${url.href}</span>"&gt;&lt;span class="search-result-title"&gt;<span class="subst">${<span class="variable language_">this</span>.highlightKeyword(title, slicesOfTitle[<span class="number">0</span>])}</span>&lt;/span&gt;`</span></span><br><span class="line">      } <span class="keyword">else</span> {</span><br><span class="line">        resultItem += <span class="string">`&lt;div class="local-search-hit-item"&gt;&lt;a href="<span class="subst">${url.href}</span>"&gt;&lt;span class="search-result-title"&gt;<span class="subst">${title}</span>&lt;/span&gt;`</span></span><br><span class="line">      }</span><br><span class="line">      slicesOfContent.<span class="title function_">forEach</span>(<span class="function"><span class="params">slice</span> =&gt;</span> {</span><br><span class="line">        resultItem += <span class="string">`&lt;p class="search-result"&gt;<span class="subst">${<span class="variable language_">this</span>.highlightKeyword(content, slice)}</span>...&lt;/p&gt;&lt;/a&gt;`</span></span><br><span class="line">      })</span><br><span class="line">      resultItem += <span class="string">'&lt;/div&gt;'</span></span><br><span class="line">      resultItems.<span class="title function_">push</span>({</span><br><span class="line">        <span class="attr">item</span>: resultItem,</span><br><span class="line">        <span class="attr">id</span>: resultItems.<span class="property">length</span>,</span><br><span class="line">        hitCount,</span><br><span class="line">        includedCount</span><br><span class="line">      })</span><br><span class="line">    })</span><br><span class="line">    <span class="keyword">return</span> resultItems</span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">fetchData</span> () {</span><br><span class="line">    <span class="keyword">const</span> isXml = !<span class="variable language_">this</span>.<span class="property">path</span>.<span class="title function_">endsWith</span>(<span class="string">'json'</span>)</span><br><span class="line">    <span class="title function_">fetch</span>(<span class="variable language_">this</span>.<span class="property">path</span>)</span><br><span class="line">      .<span class="title function_">then</span>(<span class="function"><span class="params">response</span> =&gt;</span> response.<span class="title function_">text</span>())</span><br><span class="line">      .<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> {</span><br><span class="line">        <span class="comment">// Get the contents from search data</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">isfetched</span> = <span class="literal">true</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">datas</span> = isXml</span><br><span class="line">          ? [...<span class="keyword">new</span> <span class="title class_">DOMParser</span>().<span class="title function_">parseFromString</span>(res, <span class="string">'text/xml'</span>).<span class="title function_">querySelectorAll</span>(<span class="string">'entry'</span>)].<span class="title function_">map</span>(<span class="function"><span class="params">element</span> =&gt;</span> ({</span><br><span class="line">              <span class="attr">title</span>: element.<span class="title function_">querySelector</span>(<span class="string">'title'</span>).<span class="property">textContent</span>,</span><br><span class="line">              <span class="attr">content</span>: element.<span class="title function_">querySelector</span>(<span class="string">'content'</span>).<span class="property">textContent</span>,</span><br><span class="line">              <span class="attr">url</span>: element.<span class="title function_">querySelector</span>(<span class="string">'url'</span>).<span class="property">textContent</span></span><br><span class="line">            }))</span><br><span class="line">          : <span class="title class_">JSON</span>.<span class="title function_">parse</span>(res)</span><br><span class="line">        <span class="comment">// Only match articles with non-empty titles</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">datas</span> = <span class="variable language_">this</span>.<span class="property">datas</span>.<span class="title function_">filter</span>(<span class="function"><span class="params">data</span> =&gt;</span> data.<span class="property">title</span>).<span class="title function_">map</span>(<span class="function"><span class="params">data</span> =&gt;</span> {</span><br><span class="line">          data.<span class="property">title</span> = data.<span class="property">title</span>.<span class="title function_">trim</span>()</span><br><span class="line">          data.<span class="property">content</span> = data.<span class="property">content</span> ? data.<span class="property">content</span>.<span class="title function_">trim</span>().<span class="title function_">replace</span>(<span class="regexp">/&lt;[^&gt;]+&gt;/g</span>, <span class="string">''</span>) : <span class="string">''</span></span><br><span class="line">          data.<span class="property">url</span> = <span class="built_in">decodeURIComponent</span>(data.<span class="property">url</span>).<span class="title function_">replace</span>(<span class="regexp">/\/{2,}/g</span>, <span class="string">'/'</span>)</span><br><span class="line">          <span class="keyword">return</span> data</span><br><span class="line">        })</span><br><span class="line">        <span class="comment">// Remove loading animation</span></span><br><span class="line">        <span class="variable language_">window</span>.<span class="title function_">dispatchEvent</span>(<span class="keyword">new</span> <span class="title class_">Event</span>(<span class="string">'search:loaded'</span>))</span><br><span class="line">      })</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight by wrapping node in mark elements with the given class name</span></span><br><span class="line">  <span class="title function_">highlightText</span> (node, slice, className) {</span><br><span class="line">    <span class="keyword">const</span> val = node.<span class="property">nodeValue</span></span><br><span class="line">    <span class="keyword">let</span> index = slice.<span class="property">start</span></span><br><span class="line">    <span class="keyword">const</span> children = []</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">const</span> { position, length } <span class="keyword">of</span> slice.<span class="property">hits</span>) {</span><br><span class="line">      <span class="keyword">const</span> text = <span class="variable language_">document</span>.<span class="title function_">createTextNode</span>(val.<span class="title function_">substring</span>(index, position))</span><br><span class="line">      index = position + length</span><br><span class="line">      <span class="keyword">const</span> mark = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'mark'</span>)</span><br><span class="line">      mark.<span class="property">className</span> = className</span><br><span class="line">      mark.<span class="title function_">appendChild</span>(<span class="variable language_">document</span>.<span class="title function_">createTextNode</span>(val.<span class="title function_">substr</span>(position, length)))</span><br><span class="line">      children.<span class="title function_">push</span>(text, mark)</span><br><span class="line">    }</span><br><span class="line">    node.<span class="property">nodeValue</span> = val.<span class="title function_">substring</span>(index, slice.<span class="property">end</span>)</span><br><span class="line">    children.<span class="title function_">forEach</span>(<span class="function"><span class="params">element</span> =&gt;</span> {</span><br><span class="line">      node.<span class="property">parentNode</span>.<span class="title function_">insertBefore</span>(element, node)</span><br><span class="line">    })</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight the search words provided in the url in the text</span></span><br><span class="line">  <span class="title function_">highlightSearchWords</span> (body) {</span><br><span class="line">    <span class="keyword">const</span> params = <span class="keyword">new</span> <span class="title function_">URL</span>(location.<span class="property">href</span>).<span class="property">searchParams</span>.<span class="title function_">get</span>(<span class="string">'highlight'</span>)</span><br><span class="line">    <span class="keyword">const</span> keywords = params ? params.<span class="title function_">split</span>(<span class="string">' '</span>) : []</span><br><span class="line">    <span class="keyword">if</span> (!keywords.<span class="property">length</span> || !body) <span class="keyword">return</span></span><br><span class="line">    <span class="keyword">const</span> walk = <span class="variable language_">document</span>.<span class="title function_">createTreeWalker</span>(body, <span class="title class_">NodeFilter</span>.<span class="property">SHOW_TEXT</span>, <span class="literal">null</span>)</span><br><span class="line">    <span class="keyword">const</span> allNodes = []</span><br><span class="line">    <span class="keyword">while</span> (walk.<span class="title function_">nextNode</span>()) {</span><br><span class="line">      <span class="keyword">if</span> (!walk.<span class="property">currentNode</span>.<span class="property">parentNode</span>.<span class="title function_">matches</span>(<span class="string">'button, select, textarea, .mermaid'</span>)) allNodes.<span class="title function_">push</span>(walk.<span class="property">currentNode</span>)</span><br><span class="line">    }</span><br><span class="line">    allNodes.<span class="title function_">forEach</span>(<span class="function"><span class="params">node</span> =&gt;</span> {</span><br><span class="line">      <span class="keyword">const</span> [indexOfNode] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, node.<span class="property">nodeValue</span>)</span><br><span class="line">      <span class="keyword">if</span> (!indexOfNode.<span class="property">length</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">const</span> slice = <span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(<span class="number">0</span>, node.<span class="property">nodeValue</span>.<span class="property">length</span>, indexOfNode)</span><br><span class="line">      <span class="variable language_">this</span>.<span class="title function_">highlightText</span>(node, slice, <span class="string">'search-keyword'</span>)</span><br><span class="line">    })</span><br><span class="line">  }</span><br><span class="line">}</span><br><span class="line"><span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'load'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line"><span class="comment">// Search</span></span><br><span class="line">  <span class="keyword">const</span> { path, top_n_per_article, <span class="built_in">unescape</span>, languages } = <span class="variable constant_">GLOBAL_CONFIG</span>.<span class="property">localSearch</span></span><br><span class="line">  <span class="keyword">const</span> localSearch = <span class="keyword">new</span> <span class="title class_">LocalSearch</span>({</span><br><span class="line">    path,</span><br><span class="line">    top_n_per_article,</span><br><span class="line">    <span class="built_in">unescape</span></span><br><span class="line">  })</span><br><span class="line">  <span class="keyword">const</span> input = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search-input input'</span>)</span><br><span class="line">  <span class="keyword">const</span> statsItem = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'local-search-stats-wrap'</span>)</span><br><span class="line">  <span class="keyword">const</span> $loadingStatus = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'loading-status'</span>)</span><br><span class="line">  <span class="keyword">const</span> isXml = !path.<span class="title function_">endsWith</span>(<span class="string">'json'</span>)</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">inputEventFunction</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">if</span> (!localSearch.<span class="property">isfetched</span>) <span class="keyword">return</span></span><br><span class="line">    <span class="keyword">let</span> searchText = input.<span class="property">value</span>.<span class="title function_">trim</span>().<span class="title function_">toLowerCase</span>()</span><br><span class="line">    isXml &amp;&amp; (searchText = searchText.<span class="title function_">replace</span>(<span class="regexp">/&lt;/g</span>, <span class="string">'&amp;lt;'</span>).<span class="title function_">replace</span>(<span class="regexp">/&gt;/g</span>, <span class="string">'&amp;gt;'</span>))</span><br><span class="line">    <span class="keyword">if</span> (searchText !== <span class="string">''</span>) $loadingStatus.<span class="property">innerHTML</span> = <span class="string">'&lt;i class="fas fa-spinner fa-pulse"&gt;&lt;/i&gt;'</span></span><br><span class="line">    <span class="keyword">const</span> keywords = searchText.<span class="title function_">split</span>(<span class="regexp">/[-\s]+/</span>)</span><br><span class="line">    <span class="keyword">const</span> container = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'local-search-results'</span>)</span><br><span class="line">    <span class="keyword">let</span> resultItems = []</span><br><span class="line">    <span class="keyword">if</span> (searchText.<span class="property">length</span> &gt; <span class="number">0</span>) {</span><br><span class="line">    <span class="comment">// Perform local searching</span></span><br><span class="line">      resultItems = localSearch.<span class="title function_">getResultItems</span>(keywords)</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">if</span> (keywords.<span class="property">length</span> === <span class="number">1</span> &amp;&amp; keywords[<span class="number">0</span>] === <span class="string">''</span>) {</span><br><span class="line">      container.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">      statsItem.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">    } <span class="keyword">else</span> <span class="keyword">if</span> (resultItems.<span class="property">length</span> === <span class="number">0</span>) {</span><br><span class="line">      container.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">      <span class="keyword">const</span> statsDiv = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>)</span><br><span class="line">      statsDiv.<span class="property">className</span> = <span class="string">'search-result-stats'</span></span><br><span class="line">      statsDiv.<span class="property">textContent</span> = languages.<span class="property">hits_empty</span>.<span class="title function_">replace</span>(<span class="regexp">/\$\{query}/</span>, searchText)</span><br><span class="line">      statsItem.<span class="property">innerHTML</span> = statsDiv.<span class="property">outerHTML</span></span><br><span class="line">    } <span class="keyword">else</span> {</span><br><span class="line">      resultItems.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">        <span class="keyword">if</span> (left.<span class="property">includedCount</span> !== right.<span class="property">includedCount</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">includedCount</span> - left.<span class="property">includedCount</span></span><br><span class="line">        } <span class="keyword">else</span> <span class="keyword">if</span> (left.<span class="property">hitCount</span> !== right.<span class="property">hitCount</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">hitCount</span> - left.<span class="property">hitCount</span></span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> right.<span class="property">id</span> - left.<span class="property">id</span></span><br><span class="line">      })</span><br><span class="line">      <span class="keyword">const</span> stats = languages.<span class="property">hits_stats</span>.<span class="title function_">replace</span>(<span class="regexp">/\$\{hits}/</span>, resultItems.<span class="property">length</span>)</span><br><span class="line">      container.<span class="property">innerHTML</span> = <span class="string">`&lt;div class="search-result-list"&gt;<span class="subst">${resultItems.map(result =&gt; result.item).join(<span class="string">''</span>)}</span>&lt;/div&gt;`</span></span><br><span class="line">      statsItem.<span class="property">innerHTML</span> = <span class="string">`&lt;hr&gt;&lt;div class="search-result-stats"&gt;<span class="subst">${stats}</span>&lt;/div&gt;`</span></span><br><span class="line">      <span class="variable language_">window</span>.<span class="property">pjax</span> &amp;&amp; <span class="variable language_">window</span>.<span class="property">pjax</span>.<span class="title function_">refresh</span>(container)</span><br><span class="line">    }</span><br><span class="line">    $loadingStatus.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">let</span> loadFlag = <span class="literal">false</span></span><br><span class="line">  <span class="keyword">const</span> $searchMask = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'search-mask'</span>)</span><br><span class="line">  <span class="keyword">const</span> $searchDialog = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search .search-dialog'</span>)</span><br><span class="line">  <span class="comment">// fix safari</span></span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">fixSafariHeight</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable language_">window</span>.<span class="property">innerWidth</span> &lt; <span class="number">768</span>) {</span><br><span class="line">      $searchDialog.<span class="property">style</span>.<span class="title function_">setProperty</span>(<span class="string">'--search-height'</span>, <span class="variable language_">window</span>.<span class="property">innerHeight</span> + <span class="string">'px'</span>)</span><br><span class="line">    }</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">openSearch</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">const</span> bodyStyle = <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">style</span></span><br><span class="line">    bodyStyle.<span class="property">width</span> = <span class="string">'100%'</span></span><br><span class="line">    bodyStyle.<span class="property">overflow</span> = <span class="string">'hidden'</span></span><br><span class="line">    btf.<span class="title function_">animateIn</span>($searchMask, <span class="string">'to_show 0.5s'</span>)</span><br><span class="line">    btf.<span class="title function_">animateIn</span>($searchDialog, <span class="string">'titleScale 0.5s'</span>)</span><br><span class="line">    <span class="built_in">setTimeout</span>(<span class="function">() =&gt;</span> { input.<span class="title function_">focus</span>() }, <span class="number">300</span>)</span><br><span class="line">    <span class="keyword">if</span> (!loadFlag) {</span><br><span class="line">      !localSearch.<span class="property">isfetched</span> &amp;&amp; localSearch.<span class="title function_">fetchData</span>()</span><br><span class="line">      input.<span class="title function_">addEventListener</span>(<span class="string">'input'</span>, inputEventFunction)</span><br><span class="line">      loadFlag = <span class="literal">true</span></span><br><span class="line">    }</span><br><span class="line">    <span class="comment">// shortcut: ESC</span></span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">'keydown'</span>, <span class="keyword">function</span> <span class="title function_">f</span> (<span class="params">event</span>) {</span><br><span class="line">      <span class="keyword">if</span> (event.<span class="property">code</span> === <span class="string">'Escape'</span>) {</span><br><span class="line">        <span class="title function_">closeSearch</span>()</span><br><span class="line">        <span class="variable language_">document</span>.<span class="title function_">removeEventListener</span>(<span class="string">'keydown'</span>, f)</span><br><span class="line">      }</span><br><span class="line">    })</span><br><span class="line">    <span class="title function_">fixSafariHeight</span>()</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'resize'</span>, fixSafariHeight)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">closeSearch</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">const</span> bodyStyle = <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">style</span></span><br><span class="line">    bodyStyle.<span class="property">width</span> = <span class="string">''</span></span><br><span class="line">    bodyStyle.<span class="property">overflow</span> = <span class="string">''</span></span><br><span class="line">    btf.<span class="title function_">animateOut</span>($searchDialog, <span class="string">'search_close .5s'</span>)</span><br><span class="line">    btf.<span class="title function_">animateOut</span>($searchMask, <span class="string">'to_hide 0.5s'</span>)</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">removeEventListener</span>(<span class="string">'resize'</span>, fixSafariHeight)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">searchClickFn</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    btf.<span class="title function_">addEventListenerPjax</span>(<span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#search-button &gt; .search'</span>), <span class="string">'click'</span>, openSearch)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">searchFnOnce</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search .search-close-button'</span>).<span class="title function_">addEventListener</span>(<span class="string">'click'</span>, closeSearch)</span><br><span class="line">    $searchMask.<span class="title function_">addEventListener</span>(<span class="string">'click'</span>, closeSearch)</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable constant_">GLOBAL_CONFIG</span>.<span class="property">localSearch</span>.<span class="property">preload</span>) {</span><br><span class="line">      localSearch.<span class="title function_">fetchData</span>()</span><br><span class="line">    }</span><br><span class="line">    localSearch.<span class="title function_">highlightSearchWords</span>(<span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'article-container'</span>))</span><br><span class="line">  }</span><br><span class="line">  <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'search:loaded'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line">    <span class="keyword">const</span> $loadDataItem = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'loading-database'</span>)</span><br><span class="line">    $loadDataItem.<span class="property">nextElementSibling</span>.<span class="property">style</span>.<span class="property">display</span> = <span class="string">'block'</span></span><br><span class="line">    $loadDataItem.<span class="title function_">remove</span>()</span><br><span class="line">  })</span><br><span class="line">  <span class="title function_">searchClickFn</span>()</span><br><span class="line">  <span class="title function_">searchFnOnce</span>()</span><br><span class="line">  <span class="comment">// pjax</span></span><br><span class="line">  <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'pjax:complete'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line">    !btf.<span class="title function_">isHidden</span>($searchMask) &amp;&amp; <span class="title function_">closeSearch</span>()</span><br><span class="line">    localSearch.<span class="title function_">highlightSearchWords</span>(<span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'article-container'</span>))</span><br><span class="line">    <span class="title function_">searchClickFn</span>()</span><br><span class="line">  })</span><br><span class="line">})</span><br></pre></td></tr></tbody></table></figure><h3 id="%E6%95%B0%E6%8D%AE%E4%B8%8E%E5%89%8D%E7%AB%AF" tabindex="-1">数据与前端</h3><h4 id="xml" tabindex="-1">XML</h4><p>来源：<a href="https://raw.githubusercontent.com/f-droid/fdroidclient/master/app/lint.xml">https://raw.githubusercontent.com/f-droid/fdroidclient/master/app/lint.xml</a></p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">"1.0"</span> encoding=<span class="string">"UTF-8"</span>?&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">lint</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- TODO bump our targetSdkVersion when we are ready for it --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ExpiredTargetSdkVersion"</span> <span class="attr">severity</span>=<span class="string">"ignore"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- TODO This should be handled as part of an overhaul of Bluetooth swap --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingPermission"</span> <span class="attr">severity</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- Our translations are crowd-sourced --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingTranslation"</span> <span class="attr">severity</span>=<span class="string">"ignore"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ExtraTranslation"</span> <span class="attr">severity</span>=<span class="string">"warning"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- to make CI fail on errors until this is fixed</span></span><br><span class="line"><span class="comment">         https://github.com/rtyley/spongycastle/issues/7 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"InvalidPackage"</span> <span class="attr">severity</span>=<span class="string">"warning"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ImpliedQuantity"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"DefaultLocale"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SimpleDateFormat"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"NewApi"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"InlinedApi"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- These are important to us, so promote from warning to error --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"UnusedResources"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/drawable/category_**.png"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values/dimens.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values/styles.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/res/values/styles.xml"</span> /&gt;</span></span><br><span class="line">        <span class="comment">&lt;!-- keep a single strings.xml for all build flavors --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values**/strings.xml"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"AppCompatMethod"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"NestedScrolling"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"Typos"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"StringFormatCount"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"UnsafeProtectedBroadcastReceiver"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"GetInstance"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"PackageManagerGetSignatures"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"HardwareIds"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"TrustAllX509TrustManager"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="comment">&lt;!-- these come from included libraries --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/apache/commons/net/ftp/FTPSTrustManager.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/bouncycastle/est/jcajce/JcaJceUtils$1.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/bouncycastle/est/jcajce/JcaJceUtils$2.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/apache/commons/net/util/TrustManagerUtils$TrustManager.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"\*/bcpkix-jdk15to18-1.71.jar"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"\*/commons-net-3.6.jar"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"PluralsCandidate"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"HardcodedText"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"RtlCompat"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"RtlEnabled"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- both the correct and deprecated locales need to be present for</span></span><br><span class="line"><span class="comment">         them to be recognized on all devices --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"LocaleFolder"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-he"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-id"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- Weblate doesn't handle these yet: https://github.com/WeblateOrg/weblate/issues/7520 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingQuantity"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-cs"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-fr"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-lt"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-sk"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SetWorldReadable"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/installer/ApkFileProvider.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ProtectedPermissions"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/debug/AndroidManifest.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/AndroidManifest.xml"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- these should be fixed, but it'll be a chunk of work --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SetTextI18n"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">lint</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h4 id="stylus" tabindex="-1">Stylus</h4><p>来源：<a href="https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/css/_layout/post.styl">https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/css/_layout/post.styl</a></p><figure class="highlight stylus"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="title">beautify</span><span class="params">()</span></span></span><br><span class="line">  <span class="built_in">headStyle</span>(fontsize)</span><br><span class="line">    <span class="attribute">padding-left</span>: <span class="built_in">unit</span>(fontsize + <span class="number">8</span>, <span class="string">'px'</span>)</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="built_in">unit</span>(fontsize - <span class="number">2</span>, <span class="string">'px'</span>)</span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">padding-left</span>: <span class="built_in">unit</span>(fontsize + <span class="number">12</span>, <span class="string">'px'</span>)</span><br><span class="line">  <span class="selector-tag">h1</span>,</span><br><span class="line">  <span class="selector-tag">h2</span>,</span><br><span class="line">  <span class="selector-tag">h3</span>,</span><br><span class="line">  <span class="selector-tag">h4</span>,</span><br><span class="line">  <span class="selector-tag">h5</span>,</span><br><span class="line">  <span class="selector-tag">h6</span></span><br><span class="line">    <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-out</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="attribute">position</span>: absolute</span><br><span class="line">      <span class="attribute">top</span>: <span class="built_in">calc</span>(<span class="number">50%</span> - <span class="number">7px</span>)</span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$title</span>-prefix-icon-color</span><br><span class="line">      <span class="attribute">content</span>: <span class="variable">$title</span>-prefix-icon</span><br><span class="line">      <span class="attribute">left</span>: <span class="number">0</span></span><br><span class="line">      <span class="attribute">line-height</span>: <span class="number">1</span></span><br><span class="line">      <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-out</span><br><span class="line">      <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">  <span class="selector-tag">h1</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">20</span>)</span><br><span class="line">  <span class="selector-tag">h2</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">18</span>)</span><br><span class="line">  <span class="selector-tag">h3</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">16</span>)</span><br><span class="line">  <span class="selector-tag">h4</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">14</span>)</span><br><span class="line">  <span class="selector-tag">h5</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">12</span>)</span><br><span class="line">  <span class="selector-tag">h6</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">12</span>)</span><br><span class="line">  <span class="selector-tag">ol</span>,</span><br><span class="line">  <span class="selector-tag">ul</span></span><br><span class="line">    <span class="selector-tag">p</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span></span><br><span class="line">  <span class="selector-tag">li</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::marker</span></span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">      <span class="attribute">font-weight</span>: <span class="number">600</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="number">1.05em</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="selector-pseudo">&amp;::marker</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="built_in">var</span>(--pseudo-hover)</span><br><span class="line">  <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span></span><br><span class="line">    <span class="attribute">list-style-type</span>: circle</span><br><span class="line"></span><br><span class="line">  hr</span><br><span class="line">    <span class="keyword">@extend</span> <span class="selector-class">.custom-hr</span></span><br><span class="line"><span class="selector-id">#article-container</span></span><br><span class="line">  <span class="attribute">word-wrap</span>: break-word</span><br><span class="line">  <span class="attribute">overflow-wrap</span>: break-word</span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'text_align_justify'</span>)</span><br><span class="line">    <span class="attribute">text-align</span>: justify</span><br><span class="line">  <span class="selector-tag">a</span></span><br><span class="line">    <span class="attribute">color</span>: <span class="variable">$theme</span>-link-color</span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">text-decoration</span>: underline</span><br><span class="line">  <span class="selector-tag">img</span></span><br><span class="line">    <span class="attribute">display</span>: block</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> auto <span class="number">20px</span></span><br><span class="line">    <span class="attribute">max-width</span>: <span class="number">100%</span></span><br><span class="line">    <span class="attribute">transition</span>: filter <span class="number">375ms</span> ease-in .<span class="number">2s</span></span><br><span class="line">  <span class="selector-tag">p</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">16px</span></span><br><span class="line">  <span class="selector-tag">iframe</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">20px</span></span><br><span class="line">  <span class="selector-tag">kbd</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">3px</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">3px</span> <span class="number">5px</span></span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="number">#b4b4b4</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">3px</span></span><br><span class="line">    <span class="attribute">background-color</span>: <span class="number">#f8f8f8</span></span><br><span class="line">    <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">1px</span> <span class="number">3px</span> <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, .<span class="number">25</span>), <span class="number">0</span> <span class="number">2px</span> <span class="number">1px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, .<span class="number">6</span>) inset</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#34495e</span></span><br><span class="line">    <span class="attribute">white-space</span>: nowrap</span><br><span class="line">    <span class="attribute">font-weight</span>: <span class="number">600</span></span><br><span class="line">    <span class="attribute">font-size</span>: .<span class="number">9em</span></span><br><span class="line">    <span class="attribute">font-family</span>: Monaco, <span class="string">'Ubuntu Mono'</span>, monospace</span><br><span class="line">    <span class="attribute">line-height</span>: <span class="number">1em</span></span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'anchor.click_to_scroll'</span>)</span><br><span class="line">    <span class="selector-tag">h1</span>,</span><br><span class="line">    <span class="selector-tag">h2</span>,</span><br><span class="line">    <span class="selector-tag">h3</span>,</span><br><span class="line">    <span class="selector-tag">h4</span>,</span><br><span class="line">    <span class="selector-tag">h5</span>,</span><br><span class="line">    <span class="selector-tag">h6</span></span><br><span class="line">      <span class="attribute">width</span>: fit-content</span><br><span class="line">      <span class="selector-tag">a</span><span class="selector-pseudo">:not</span>(.headerlink)</span><br><span class="line">        <span class="attribute">position</span> relative</span><br><span class="line">        <span class="attribute">z-index</span> <span class="number">10</span></span><br><span class="line">      <span class="selector-tag">a</span><span class="selector-class">.headerlink</span></span><br><span class="line">        <span class="attribute">position</span>: absolute</span><br><span class="line">        <span class="attribute">top</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">right</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">        <span class="attribute">bottom</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">width</span> <span class="number">100%</span></span><br><span class="line">        <span class="attribute">height</span>: <span class="number">100%</span></span><br><span class="line">  <span class="selector-tag">ol</span>,</span><br><span class="line">  <span class="selector-tag">ul</span></span><br><span class="line">    <span class="selector-tag">ol</span>,</span><br><span class="line">    <span class="selector-tag">ul</span></span><br><span class="line">      <span class="attribute">padding-left</span>: <span class="number">20px</span></span><br><span class="line">    <span class="selector-tag">li</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">4px</span> <span class="number">0</span></span><br><span class="line">    <span class="selector-tag">p</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span></span><br><span class="line">  &gt; <span class="selector-pseudo">:last-child</span></span><br><span class="line">    <span class="attribute">margin-bottom</span>: <span class="number">0</span> <span class="meta">!important</span></span><br><span class="line">  hr</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">20px</span> <span class="number">0</span></span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.enable'</span>)</span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.field'</span>) == <span class="string">'site'</span></span><br><span class="line">      <span class="built_in">beautify</span>()</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.field'</span>) == <span class="string">'post'</span></span><br><span class="line">      &amp;<span class="selector-class">.post-content</span></span><br><span class="line">        <span class="built_in">beautify</span>()</span><br><span class="line"><span class="selector-id">#post</span></span><br><span class="line">  <span class="selector-class">.tag_share</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:after</span></span><br><span class="line">      <span class="attribute">display</span>: block</span><br><span class="line">      <span class="attribute">clear</span>: both</span><br><span class="line">      <span class="attribute">content</span>: <span class="string">''</span></span><br><span class="line">    <span class="selector-class">.post-meta</span></span><br><span class="line">      &amp;__tag-list</span><br><span class="line">        <span class="attribute">display</span>: inline-block</span><br><span class="line">      &amp;__tags</span><br><span class="line">        <span class="attribute">display</span>: inline-block</span><br><span class="line">        <span class="attribute">margin</span>: <span class="number">8px</span> <span class="number">8px</span> <span class="number">8px</span> <span class="number">0</span></span><br><span class="line">        <span class="attribute">padding</span>: <span class="number">0</span> <span class="number">12px</span></span><br><span class="line">        <span class="attribute">width</span>: fit-content</span><br><span class="line">        <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">border-radius</span>: <span class="number">12px</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">font-size</span>: .<span class="number">85em</span></span><br><span class="line">        <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out</span><br><span class="line">        <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">          <span class="attribute">background</span>: <span class="variable">$light</span>-blue</span><br><span class="line">          <span class="attribute">color</span>: <span class="built_in">var</span>(--white)</span><br><span class="line">    <span class="selector-class">.post_share</span></span><br><span class="line">      <span class="attribute">display</span>: inline-block</span><br><span class="line">      <span class="attribute">float</span>: right</span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">8px</span> <span class="number">0</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">width</span>: fit-content</span><br><span class="line">      <span class="selector-class">.social-share</span></span><br><span class="line">        <span class="attribute">font-size</span>: .<span class="number">85em</span></span><br><span class="line">        <span class="selector-class">.social-share-icon</span></span><br><span class="line">          <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">4px</span></span><br><span class="line">          <span class="attribute">width</span>: w = <span class="number">1.85em</span></span><br><span class="line">          <span class="attribute">height</span>: w</span><br><span class="line">          <span class="attribute">font-size</span>: <span class="number">1.2em</span></span><br><span class="line">          <span class="attribute">line-height</span>: w</span><br><span class="line">  <span class="selector-class">.post-copyright</span></span><br><span class="line">    <span class="attribute">position</span>: relative</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">40px</span> <span class="number">0</span> <span class="number">10px</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">10px</span> <span class="number">16px</span></span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="built_in">var</span>(--light-grey)</span><br><span class="line">    <span class="attribute">transition</span>: box-shadow .<span class="number">3s</span> ease-in-out</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">      <span class="attribute">position</span>: absolute</span><br><span class="line">      <span class="attribute">top</span>: <span class="number">2px</span></span><br><span class="line">      <span class="attribute">right</span>: <span class="number">12px</span></span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$theme</span>-color</span><br><span class="line">      <span class="attribute">content</span>: <span class="string">'\f1f9'</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="number">1.3em</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">232</span>, <span class="number">237</span>, <span class="number">250</span>, .<span class="number">6</span>), <span class="number">0</span> <span class="number">2px</span> <span class="number">4px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">232</span>, <span class="number">237</span>, <span class="number">250</span>, .<span class="number">5</span>)</span><br><span class="line">    <span class="selector-class">.post-copyright</span></span><br><span class="line">      &amp;-meta</span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">font-weight</span>: bold</span><br><span class="line">        <span class="selector-tag">i</span></span><br><span class="line">          <span class="attribute">margin-right</span>: <span class="number">3px</span></span><br><span class="line">      &amp;-info</span><br><span class="line">        <span class="attribute">padding-left</span>: <span class="number">6px</span></span><br><span class="line">        <span class="selector-tag">a</span></span><br><span class="line">          <span class="attribute">text-decoration</span>: underline</span><br><span class="line">          <span class="attribute">word-break</span>: break-word</span><br><span class="line">          <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">            <span class="attribute">text-decoration</span>: none</span><br><span class="line">  <span class="selector-class">.post-outdate-notice</span></span><br><span class="line">    <span class="attribute">position</span>: relative</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">20px</span></span><br><span class="line">    <span class="attribute">padding</span>: .<span class="number">5em</span> <span class="number">1.2em</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">3px</span></span><br><span class="line">    <span class="attribute">background-color</span>: <span class="variable">$noticeOutdate</span>-bg</span><br><span class="line">    <span class="attribute">color</span>: <span class="variable">$noticeOutdate</span>-color</span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'noticeOutdate.style'</span>) == <span class="string">'flat'</span></span><br><span class="line">      <span class="attribute">padding</span>: .<span class="number">5em</span> <span class="number">1em</span> .<span class="number">5em</span> <span class="number">2.6em</span></span><br><span class="line">      <span class="attribute">border-left</span>: <span class="number">5px</span> solid <span class="variable">$noticeOutdate</span>-border</span><br><span class="line">      <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">        <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">        <span class="attribute">position</span>: absolute</span><br><span class="line">        <span class="attribute">top</span>: <span class="number">50%</span></span><br><span class="line">        <span class="attribute">left</span>: .<span class="number">9em</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$noticeOutdate</span>-border</span><br><span class="line">        <span class="attribute">content</span>: <span class="string">'\f071'</span></span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translateY</span>(-<span class="number">50%</span>)</span><br><span class="line">  <span class="selector-class">.ads-wrap</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">40px</span> <span class="number">0</span></span><br></pre></td></tr></tbody></table></figure><h4 id="html" tabindex="-1">HTML</h4><p>来源：<a href="https://raw.githubusercontent.com/h5bp/html5-boilerplate/main/src/index.html">https://raw.githubusercontent.com/h5bp/html5-boilerplate/main/src/index.html</a></p><figure class="highlight html"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!doctype <span class="keyword">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span> <span class="attr">class</span>=<span class="string">"no-js"</span> <span class="attr">lang</span>=<span class="string">""</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">title</span>&gt;</span><span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"css/style.css"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"description"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:title"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:type"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:url"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:image"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:image:alt"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"icon"</span> <span class="attr">href</span>=<span class="string">"/favicon.ico"</span> <span class="attr">sizes</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"icon"</span> <span class="attr">href</span>=<span class="string">"/icon.svg"</span> <span class="attr">type</span>=<span class="string">"image/svg+xml"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"apple-touch-icon"</span> <span class="attr">href</span>=<span class="string">"icon.png"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"manifest"</span> <span class="attr">href</span>=<span class="string">"site.webmanifest"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"theme-color"</span> <span class="attr">content</span>=<span class="string">"#fafafa"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- Add your site or application content here --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">p</span>&gt;</span>Hello world! This is HTML5 Boilerplate.<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">script</span> <span class="attr">src</span>=<span class="string">"js/app.js"</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h1 id="%E6%95%B0%E5%AD%A6" tabindex="-1">数学</h1><h2 id="%E5%8D%95%E8%A1%8C%E5%85%AC%E5%BC%8F" tabindex="-1">单行公式</h2><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi><mo>=</mo><mi>G</mi><mo>=</mo><msub><mi>m</mi><mtext mathvariant="sans-serif"> 物</mtext></msub><mi> g</mi><mo>=</mo><mn>1</mn><mi>k</mi><mi>g</mi><mo separator="true">⋅</mo><mn>9.8</mn><mi>N</mi><mi mathvariant="normal">/</mi><mi>k</mi><mi>g</mi><mo>=</mo><mn>9.8</mn><mi>N</mi></mrow><annotation encoding="application/x-tex">F = G=m_\textsf {物} g = 1kg・9.8N / kg = 9.8N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">G</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord text mtight"><span class="mord textsf cjk_fallback mtight"> 物</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mpunct">⋅</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9.8</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mord">/</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord">9.8</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span></p><h2 id="%E6%95%B0%E5%AD%A6%E6%96%87%E5%AD%97%E6%B7%B7%E6%9D%82" tabindex="-1">数学文字混杂</h2><p>让我们尝试证明一个稍微复杂一些的等式：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum_{k=0}^{n} \binom{n}{k} = 2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span></p><p>我们可以使用二项式定理证明这个等式。二项式定理表述为：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><msup><mi>a</mi><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow></msup><msup><mi>b</mi><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">(a + b)^n = \sum_{k=0}^{n} \binom{n}{k} a^{n-k} b^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></p><p>现在，令 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">b = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，然后代入：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo>+</mo><mn>1</mn><msup><mo stretchy="false">)</mo><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><msup><mn>1</mn><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow></msup><msup><mn>1</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">(1 + 1)^n = \sum_{k=0}^{n} \binom{n}{k} 1^{n-k} 1^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">2^n = \sum_{k=0}^{n} \binom{n}{k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span></span></span></span></p><p>这证明了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum_{k=0}^{n} \binom{n}{k} = 2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>。</p><h2 id="%E5%A4%9A%E8%A1%8C%E5%85%AC%E5%BC%8F%E4%B8%8E%E5%AF%B9%E9%BD%90" tabindex="-1">多行公式与对齐</h2><p>麦克斯韦方程组（微分形式）：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>⋅</mo><mi mathvariant="bold">E</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mi>ρ</mi><msub><mi>ε</mi><mn>0</mn></msub></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>⋅</mo><mi mathvariant="bold">B</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>×</mo><mi mathvariant="bold">E</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">B</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∇</mi><mo>×</mo><mi mathvariant="bold">B</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msub><mi>μ</mi><mn>0</mn></msub><mi mathvariant="bold">J</mi><mo>+</mo><msub><mi>μ</mi><mn>0</mn></msub><msub><mi>ε</mi><mn>0</mn></msub><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">E</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}\nabla \cdot \mathbf{E} &amp;= \frac{\rho}{\varepsilon_0} \\\nabla \cdot \mathbf{B} &amp;= 0 \\\nabla \times \mathbf{E} &amp;= -\frac{\partial \mathbf{B}}{\partial t} \\\nabla \times \mathbf{B} &amp;= \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:8.1584em;vertical-align:-3.8292em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.3292em;"><span style="top:-6.5931em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">E</span></span></span><span style="top:-4.6171em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">B</span></span></span><span style="top:-2.5857em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">E</span></span></span><span style="top:-0.2282em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord">∇</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathbf">B</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.8292em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.3292em;"><span style="top:-6.5931em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">ε</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">ρ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.836em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-4.6171em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-2.5857em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">−</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathbf">B</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-0.2282em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">μ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathbf">J</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">μ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">ε</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathbf">E</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.8292em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><h2 id="%E5%88%86%E6%AE%B5%E5%87%BD%E6%95%B0" tabindex="-1">分段函数</h2><p>符号函数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>sgn</mtext><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\text{sgn}(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">sgn</span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的定义如下：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if&nbsp;</mtext><mi>x</mi><mo>&gt;</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>0</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if&nbsp;</mtext><mi>x</mi><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if&nbsp;</mtext><mi>x</mi><mo>&lt;</mo><mn>0</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">f(x) =\begin{cases}1,  &amp; \text{if } x &gt; 0 \\0,  &amp; \text{if } x = 0 \\-1, &amp; \text{if } x &lt; 0\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:4.32em;vertical-align:-1.91em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.35em;"><span style="top:-2.2em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.192em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"></path></svg></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.292em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"></path></svg></span></span><span style="top:-4.6em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.85em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">1</span><span class="mpunct">,</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">0</span><span class="mpunct">,</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if&nbsp;</span></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if&nbsp;</span></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if&nbsp;</span></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h2 id="%E7%9F%A9%E9%98%B5" tabindex="-1">矩阵</h2><p>带有不同括号的矩阵测试：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>2</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>3</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>4</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mspace width="1em"></mspace><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>a</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>b</mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>c</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>d</mi></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow><mspace width="1em"></mspace><mrow><mo fence="true">{</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>x</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>y</mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>z</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>w</mi></mstyle></mtd></mtr></mtable><mo fence="true">}</mo></mrow><mspace width="1em"></mspace><mrow><mo fence="true">∣</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>α</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>β</mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>γ</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>δ</mi></mstyle></mtd></mtr></mtable><mo fence="true">∣</mo></mrow></mrow><annotation encoding="application/x-tex">\begin{pmatrix} 1 &amp; 2 \\ 3 &amp; 4 \end{pmatrix} \quad\begin{bmatrix} a &amp; b \\ c &amp; d \end{bmatrix} \quad\begin{Bmatrix} x &amp; y \\ z &amp; w \end{Bmatrix} \quad\begin{vmatrix} \alpha &amp; \beta \\ \gamma &amp; \delta \end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">[</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">]</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">{</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0269em;">w</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">}</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.45em;"><span class="pstrut" style="height:4.4em;"></span><span style="width:0.333em;height:2.4em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.333em" height="2.4em" viewBox="0 0 333 2400"><path d="M145 15 v585 v1200 v585 c2.667,10,9.667,15,21,15c10,0,16.667,-5,20,-15 v-585 v-1200 v-585 c-2.667,-10,-9.667,-15,-21,-15c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v1200 v585 h43z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0037em;">α</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0556em;">γ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0528em;">β</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0379em;">δ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.45em;"><span class="pstrut" style="height:4.4em;"></span><span style="width:0.333em;height:2.4em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.333em" height="2.4em" viewBox="0 0 333 2400"><path d="M145 15 v585 v1200 v585 c2.667,10,9.667,15,21,15c10,0,16.667,-5,20,-15 v-585 v-1200 v-585 c-2.667,-10,-9.667,-15,-21,-15c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v1200 v585 h43z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><h2 id="%E5%BE%AE%E7%A7%AF%E5%88%86%E4%B8%8E%E6%9E%81%E9%99%90" tabindex="-1">微积分与极限</h2><p>求导与积分的排版测试：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><munder><mrow><mi>lim</mi><mo>⁡</mo></mrow><mrow><mi>x</mi><mo>→</mo><mi mathvariant="normal">∞</mi></mrow></munder><msup><mrow><mo fence="true">(</mo><mn>1</mn><mo>+</mo><mfrac><mn>1</mn><mi>x</mi></mfrac><mo fence="true">)</mo></mrow><mi>x</mi></msup><mo>=</mo><mi>e</mi></mrow><annotation encoding="application/x-tex">\lim_{x \to \infty} \left(1 + \frac{1}{x}\right)^x = e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4543em;vertical-align:-0.95em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6944em;"><span style="top:-2.4em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mrel mtight">→</span><span class="mord mtight">∞</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">lim</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.5043em;"><span style="top:-3.9029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">e</span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msubsup><mo>∫</mo><mrow><mo>−</mo><mi mathvariant="normal">∞</mi></mrow><mi mathvariant="normal">∞</mi></msubsup><msup><mi>e</mi><mrow><mo>−</mo><msup><mi>x</mi><mn>2</mn></msup></mrow></msup><mi>d</mi><mi>x</mi><mo>=</mo><msqrt><mi>π</mi></msqrt></mrow><annotation encoding="application/x-tex">\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.3846em;vertical-align:-0.9703em;"></span><span class="mop"><span class="mop op-symbol large-op" style="margin-right:0.4445em;position:relative;top:-0.0011em;">∫</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4143em;"><span style="top:-1.7881em;margin-left:-0.4445em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">∞</span></span></span></span><span style="top:-3.8129em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">∞</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9703em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.0369em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="mord mathnormal">d</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.1908em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8492em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal" style="margin-right:0.0359em;">π</span></span></span><span style="top:-2.8092em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1908em;"><span></span></span></span></span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi>d</mi><mrow><mi>d</mi><mi>x</mi></mrow></mfrac><mrow><mo fence="true">(</mo><msubsup><mo>∫</mo><mi>a</mi><mi>x</mi></msubsup><mi>f</mi><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mi>d</mi><mi>t</mi><mo fence="true">)</mo></mrow><mo>=</mo><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{d}{dx} \left( \int_{a}^{x} f(t) dt \right) = f(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mop"><span class="mop op-symbol large-op" style="margin-right:0.4445em;position:relative;top:-0.0011em;">∫</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4143em;"><span style="top:-1.7881em;margin-left:-0.4445em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.8129em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9119em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mord mathnormal">d</span><span class="mord mathnormal">t</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span></span></p><h2 id="%E5%8C%96%E5%AD%A6%E6%96%B9%E7%A8%8B%E5%BC%8F%E4%B8%93%E5%8C%BA" tabindex="-1">化学方程式专区</h2><h3 id="%E5%9F%BA%E7%A1%80%E5%8C%96%E5%AD%A6%E5%BC%8F%E4%B8%8E%E7%A6%BB%E5%AD%90" tabindex="-1">基础化学式与离子</h3><p>分子：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi></mrow><annotation encoding="application/x-tex">\ce{H2O}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">S</mi><mi mathvariant="normal">b</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub></mrow><annotation encoding="application/x-tex">\ce{Sb2O3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">Sb</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">A</mi><mi mathvariant="normal">g</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">l</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">−</mo></msup></mrow><annotation encoding="application/x-tex">\ce{AgCl2-}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.039em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">AgCl</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span></span></span></span></span></span></span></span></span></span></span></span></span>离子：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">H</mi><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup></mrow><annotation encoding="application/x-tex">\ce{H+}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8446em;"></span><span class="mord"><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>−</mo></mrow></msup></mrow><annotation encoding="application/x-tex">\ce{CrO4^2-}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0373em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CrO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">−</span></span></span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">A</mi><mi mathvariant="normal">g</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">l</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo stretchy="false">]</mo><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">−</mo></msup></mrow><annotation encoding="application/x-tex">\ce{[AgCl2]-}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0946em;vertical-align:-0.25em;"></span><span class="mord"><span class="mopen">[</span><span class="mord"><span class="mord mathrm">AgCl</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">]</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span></span></span></span></span></span></span></span></span></span></span></span></span>同位素：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>90</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>227</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>90</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>227</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">T</mi><mi mathvariant="normal">h</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup></mrow><annotation encoding="application/x-tex">\ce{^{227}_{90}Th+}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1343em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">90</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">227</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">90</span></span></span></span></span></span></span></span></span></span><span class="fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span></span></span></span></span></span></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0.6444em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight">227</span></span></span><span class="fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Th</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>90</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>227</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>90</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>227</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">T</mi><mi mathvariant="normal">h</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup></mrow><annotation encoding="application/x-tex">\ce{^227_90Th+}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1343em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">90</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">227</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">90</span></span></span></span></span></span></span></span></span></span><span class="fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span></span></span></span></span></span></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0.6444em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight">227</span></span></span><span class="fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Th</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span></span></span></span></span>复杂结构：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">K</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">r</mi></mrow><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">S</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><mo stretchy="false">)</mo><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mtext> </mtext><mo lspace="0em" rspace="0em">⋅</mo><mtext> </mtext><mn>12</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi></mrow><annotation encoding="application/x-tex">\ce{KCr(SO4)2 * 12H2O}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">KCr</span></span><span class="mopen">(</span><span class="mord"><span class="mord mathrm">SO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord">⋅</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">12</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span></span></span></span></span></p><h3 id="%E5%8C%96%E5%AD%A6%E5%8F%8D%E5%BA%94%E6%96%B9%E7%A8%8B%E5%BC%8F" tabindex="-1">化学反应方程式</h3><p>基础反应：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mrow></mrow><mo>+</mo><mrow></mrow><mi mathvariant="normal">C</mi><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mn>2</mn><mtext> </mtext><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow></mrow><annotation encoding="application/x-tex">\ce{CO2 + C -&gt; 2 CO}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord mathrm">C</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathrm">CO</span></span></span></span></span></span></span></p><p>带有气体与沉淀符号：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">S</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>−</mo></mrow></msup><mrow></mrow><mo>+</mo><mrow></mrow><mrow><mi mathvariant="normal">B</mi><mi mathvariant="normal">a</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>+</mo></mrow></msup><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mrow><mi mathvariant="normal">B</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">S</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>4</mn></mpadded></msub><mo>↓</mo><mrow></mrow></mrow><annotation encoding="application/x-tex">\ce{SO4^2- + Ba^2+ -&gt; BaSO4 v}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0818em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">SO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">−</span></span></span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord mathrm">Ba</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">+</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathrm">BaSO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">↓</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"></span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">Z</mi><mi mathvariant="normal">n</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><mn>2</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mo lspace="0em" rspace="0em">+</mo></msup><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mrow><mi mathvariant="normal">Z</mi><mi mathvariant="normal">n</mi></mrow><msup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mn>2</mn><mo>+</mo></mrow></msup><mrow></mrow><mo>+</mo><mrow></mrow><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo>↑</mo><mrow></mrow></mrow><annotation encoding="application/x-tex">\ce{Zn + 2H+ -&gt; Zn^2+ + H2 ^}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0818em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">Zn</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8446em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">+</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathrm">Zn</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">+</span></span></span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">↑</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"></span></span></span></span></span></span></p><h3 id="%E5%8F%8D%E5%BA%94%E6%9D%A1%E4%BB%B6%E4%B8%8E%E7%AE%AD%E5%A4%B4%E7%AC%A6%E5%8F%B7" tabindex="-1">反应条件与箭头符号</h3><p>燃烧反应（箭头上方带条件）：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mn>2</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mrow></mrow><mo>+</mo><mrow></mrow><mi mathvariant="normal">O</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mtext>点燃</mtext></mpadded></mover><mn> 2</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mi mathvariant="normal">O</mi></mrow><annotation encoding="application/x-tex">\ce {2H2 + O2 -&gt;[\text {点燃}] 2H2O}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2503em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord mathrm">O</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord text mtight"><span class="mord cjk_fallback mtight">点燃</span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathrm">O</span></span></span></span></span></span></p><p>加热条件（使用 <code>\Delta</code>）：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mi mathvariant="normal">Δ</mi></mpadded></mover><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">O</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">O</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo>↑</mo><mrow></mrow></mrow><annotation encoding="application/x-tex">\ce{CaCO3 -&gt;[\Delta] CaO + CO2 ^}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2948em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CaCO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mathrm mtight">Δ</span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathrm">CaO</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord mathrm">CO</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">↑</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"></span></span></span></span></span></span></p><p>可逆反应与平衡移动：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">N</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mrow></mrow><mo>+</mo><mrow></mrow><mn>3</mn><mtext> </mtext><mi mathvariant="normal">H</mi><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mover><mo stretchy="true" minsize="3.0em">⇌</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mn>2</mn><mtext> </mtext><mrow><mi mathvariant="normal">N</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub></mrow><annotation encoding="application/x-tex">\ce{N2 + 3H2 &lt;=&gt; 2NH3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.869em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathrm">N</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathrm">H</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.719em;"><span style="top:-3.435em;"><span class="pstrut" style="height:2.716em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.608em;"><span class="pstrut" style="height:2.716em;"></span><span class="stretchy" style="height:0.716em;min-width:1.75em;"><span class="halfarrow-left" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMinYMin slice"><path d="M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z"></path></svg></span><span class="halfarrow-right" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5zm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z"></path></svg></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.108em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathrm">NH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">A</mi><mover><mo stretchy="true" minsize="3.0em">⇄</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mi mathvariant="normal">B</mi></mrow><mspace width="1em"></mspace><mtext>(等长箭头)</mtext></mrow><annotation encoding="application/x-tex">\ce {A &lt;--&gt; B} \quad \text {(等长箭头)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0615em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathrm">A</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8115em;"><span style="top:-3.7125em;"><span class="pstrut" style="height:2.901em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.7005em;"><span class="pstrut" style="height:2.901em;"></span><span class="stretchy" style="height:0.901em;min-width:1.75em;"><span class="halfarrow-left" style="height:0.901em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.901em" viewBox="0 0 400000 901" preserveAspectRatio="xMinYMin slice"><path d="M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890zM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z"></path></svg></span><span class="halfarrow-right" style="height:0.901em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.901em" viewBox="0 0 400000 901" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 013.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z"></path></svg></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2005em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathrm">B</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord">(</span><span class="mord cjk_fallback">等长箭头</span><span class="mord">)</span></span></span></span></span></span></p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">A</mi><mover><mo stretchy="true" minsize="3.0em">⇌</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><mi mathvariant="normal">B</mi></mrow><mspace width="1em"></mspace><mtext>(平衡正向移动)</mtext></mrow><annotation encoding="application/x-tex">\ce {A &lt;=&gt;&gt; B} \quad \text {(平衡正向移动)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathrm">A</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.719em;"><span style="top:-3.435em;"><span class="pstrut" style="height:2.716em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.608em;"><span class="pstrut" style="height:2.716em;"></span><span class="stretchy" style="height:0.716em;min-width:1.75em;"><span class="halfarrow-left" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMinYMin slice"><path d="M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40zM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z"></path></svg></span><span class="halfarrow-right" style="height:0.716em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.716em" viewBox="0 0 400000 716" preserveAspectRatio="xMaxYMin slice"><path d="M0,241 l0,40c399126,0,399993,0,399993,0c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5zM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z"></path></svg></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.108em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathrm">B</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord">(</span><span class="mord cjk_fallback">平衡正向移动</span><span class="mord">)</span></span></span></span></span></span></p><h3 id="%E6%9C%89%E6%9C%BA%E5%8C%96%E5%AD%A6%E4%B8%8E%E5%A4%9A%E8%A1%8C%E5%8F%8D%E5%BA%94" tabindex="-1">有机化学与多行反应</h3><p>有机物结构简式：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub><mo lspace="0em" rspace="0em">−</mo><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub><mo lspace="0em" rspace="0em">−</mo><mrow><mi mathvariant="normal">O</mi><mi mathvariant="normal">H</mi></mrow></mrow><mspace width="1em"></mspace><mtext> 或</mtext><mspace width="1em"></mspace><mrow><mrow><mi mathvariant="normal"> C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>3</mn></mpadded></msub><mo lspace="0em" rspace="0em">=</mo><mrow><mi mathvariant="normal">C</mi><mi mathvariant="normal">H</mi></mrow><msub><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>2</mn></mpadded></msub></mrow><mspace width="1em"></mspace><mtext> 或</mtext><mspace width="1em"></mspace><mrow><mi mathvariant="normal"> A</mi><mrow><mpadded width="0px"><mphantom><mo>−</mo></mphantom></mpadded><mpadded voffset="2.56mu"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mspace width="0.1111em"></mspace><mstyle mathsize="0.5em"><mtext>-</mtext><mspace width="0.0818em"></mspace><mtext>-</mtext><mspace width="0.0818em"></mspace><mtext>-</mtext><mspace width="0.1636em"></mspace></mstyle></mstyle></mstyle></mpadded></mrow><mi mathvariant="normal">B</mi><mrow><mpadded width="0px"><mpadded voffset="-0.1em"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mo>−</mo></mstyle></mstyle></mpadded></mpadded><mpadded voffset="0.1em"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mrow><mpadded width="0px"><mphantom><mo>−</mo></mphantom></mpadded><mpadded voffset="2.56mu"><mstyle scriptlevel="0" displaystyle="false"><mstyle scriptlevel="0" displaystyle="false"><mspace width="0.1111em"></mspace><mstyle mathsize="0.5em"><mtext>-</mtext><mspace width="0.0818em"></mspace><mtext>-</mtext><mspace width="0.0818em"></mspace><mtext>-</mtext><mspace width="0.1636em"></mspace></mstyle></mstyle></mstyle></mpadded></mrow></mstyle></mstyle></mpadded></mrow><mi mathvariant="normal">C</mi></mrow></mrow><annotation encoding="application/x-tex">\ce {CH3-CH2-OH} \quad \text {或} \quad \ce {CH3\bond {=} CH2} \quad \text {或} \quad \ce {A\bond {~} B\bond {~-} C}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8667em;vertical-align:-0.1833em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord">−</span></span><span class="mord"><span class="mord mathrm">CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord">−</span></span><span class="mord"><span class="mord mathrm">OH</span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord cjk_fallback"> 或</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord"><span class="mord"><span class="mord mathrm"> CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mrel">=</span></span><span class="mord"><span class="mord mathrm">CH</span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.15em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord text"><span class="mord cjk_fallback">或</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mord"><span class="mord mathrm"> A</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord" style="color:transparent;">−</span></span></span><span class="fix"></span></span><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.3575em;"><span style="top:-2.6422em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord"><span class="mspace" style="margin-right:0.1111em;"></span><span class="mord text sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace sizing reset-size6 size1" style="margin-right:0.1636em;"></span></span></span></span></span></span></span></span><span class="mord mathrm">B</span><span class="mord"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.6667em;vertical-align:-0.1833em;"></span><span class="inner"><span class="mord"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4833em;"><span style="top:-2.9em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1833em;"><span></span></span></span></span></span></span><span class="fix"></span></span></span></span><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6833em;"><span style="top:-3.1em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord" style="color:transparent;">−</span></span></span><span class="fix"></span></span><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.3575em;"><span style="top:-2.6422em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord"><span class="mspace" style="margin-right:0.1111em;"></span><span class="mord text sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace sizing reset-size6 size1" style="margin-right:0.0818em;"></span><span class="mord text sizing reset-size6 size1"><span class="mord">-</span></span><span class="mspace sizing reset-size6 size1" style="margin-right:0.1636em;"></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="mord mathrm">C</span></span></span></span></span></span></p><p>核反应方程式：</p><p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>92</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>235</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>92</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>235</mn></mpadded></mrow></msubsup><mi mathvariant="normal">U</mi><mrow></mrow><mo>+</mo><mrow></mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>0</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>1</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>0</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>1</mn></mpadded></mrow></msubsup><mi mathvariant="normal">n</mi><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow></mrow></mpadded></mover><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>56</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>137</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>56</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>137</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">B</mi><mi mathvariant="normal">a</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>36</mn></mphantom></mpadded><mpadded height="0px" depth="0px"><mphantom><mn>97</mn></mphantom></mpadded></msubsup><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mrow><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded><mpadded lspace="-1width" width="0px"><mpadded height="0px"><mn>36</mn></mpadded></mpadded></mrow><mrow><mpadded height="0px"><mpadded width="0px"><mphantom><mn>2</mn></mphantom></mpadded></mpadded><mpadded lspace="-1width" width="0px"><mn>97</mn></mpadded></mrow></msubsup><mrow><mi mathvariant="normal">K</mi><mi mathvariant="normal">r</mi></mrow><mrow></mrow><mo>+</mo><mrow></mrow><mn>2</mn><msubsup><mpadded width="0px"><mphantom><mi>X</mi></mphantom></mpadded><mpadded height="0px"><mn>0</mn></mpadded><mn>1</mn></msubsup><mi mathvariant="normal">n</mi></mrow><annotation encoding="application/x-tex">\ce{^{235}_{92}U + ^{1}_{0}n -&gt; ^{137}_{56}Ba + ^{97}_{36}Kr + 2^{1}_{0}n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1343em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">92</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">235</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">92</span></span></span></span></span></span></span></span></span></span><span class="fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span></span></span></span></span></span></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0.6444em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight">235</span></span></span><span class="fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord mathrm">U</span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">0</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">1</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span><span class="fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span></span></span></span></span></span></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0.6444em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight">1</span></span></span><span class="fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord mathrm">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.622em;"><span style="top:-3.144em;"><span class="pstrut" style="height:2.522em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"></span></span></span><span class="svg-align" style="top:-2.511em;"><span class="pstrut" style="height:2.522em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">56</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">137</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">56</span></span></span></span></span></span></span></span></span></span><span class="fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span></span></span></span></span></span></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0.6444em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight">137</span></span></span><span class="fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Ba</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4362em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">36</span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord smash mtight"><span><span class="mord mtight"><span class="mord mtight" style="color:transparent;">97</span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">36</span></span></span></span></span></span></span></span></span></span><span class="fix"></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord rlap mtight"><span class="inner"><span class="mord mtight" style="color:transparent;"><span class="mord mtight" style="color:transparent;">2</span></span></span><span class="fix"></span></span></span></span></span></span></span></span></span><span class="mord vbox mtight"><span class="thinbox mtight"><span class="llap mtight"><span class="strut" style="height:0.6444em;"></span><span class="inner"><span class="mord mtight"><span class="mord mtight">97</span></span></span><span class="fix"></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathrm">Kr</span></span><span class="mord"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"></span><span class="mord">2</span><span class="mord"><span class="mord"><span class="mord rlap"><span class="inner"><span class="mord" style="color:transparent;"><span class="mord mathnormal" style="margin-right:0.0785em;color:transparent;">X</span></span></span><span class="fix"></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8873em;"><span style="top:-2.453em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0em;"><span style="top:-2.7em;"><span class="pstrut" style="height:2.7em;"></span><span><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span><span style="top:-3.1362em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord mathrm">n</span></span></span></span></span></span></p><h1 id="%E6%B8%B2%E6%9F%93%E5%99%A8%E6%8B%93%E5%B1%95%E8%AF%AD%E6%B3%95%E6%B5%8B%E8%AF%95" tabindex="-1">渲染器拓展语法测试</h1><p>这是 <abbr title="注释内容">被注释文本</abbr></p><!-- prettier-ignore --><p>上标<sup>示例</sup></p><p>下标<sub>示例</sub></p><p>脚注示例 <sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1"></a></sup></p><p><span class="spoiler" tabindex="-1">你知道的太多了！</span></p><h1 id="butterfly-%E6%8B%93%E5%B1%95%E8%AF%AD%E6%B3%95%E6%B5%8B%E8%AF%95" tabindex="-1">Butterfly 拓展语法测试 <sup class="footnote-ref"><a href="#footnote2">[2]</a><a class="footnote-anchor" id="footnote-ref2"></a></sup></h1><h2 id="note" tabindex="-1">Note</h2><h3 id="simple" tabindex="-1">simple</h3><div class="note simple">默认 提示块标签</div><div class="note default simple">default 提示块标签</div><div class="note primary simple">primary 提示块标签</div><div class="note success simple">success 提示块标签</div><div class="note info simple">info 提示块标签</div><div class="note warning simple">warning 提示块标签</div><div class="note danger simple">danger 提示块标签</div><h3 id="modern" tabindex="-1">modern</h3><div class="note modern">默认 提示块标签</div><div class="note default modern">default 提示块标签</div><div class="note primary modern">primary 提示块标签</div><div class="note success modern">success 提示块标签</div><div class="note info modern">info 提示块标签</div><div class="note warning modern">warning 提示块标签</div><div class="note danger modern">danger 提示块标签</div><h3 id="flat" tabindex="-1">flat</h3><div class="note flat">默认 提示块标签</div><div class="note default flat">default 提示块标签</div><div class="note primary flat">primary 提示块标签</div><div class="note success flat">success 提示块标签</div><div class="note info flat">info 提示块标签</div><div class="note warning flat">warning 提示块标签</div><div class="note danger flat">danger 提示块标签</div><h3 id="disable" tabindex="-1">disable</h3><div class="note disabled">默认 提示块标签</div><div class="note default disabled">default 提示块标签</div><div class="note primary disabled">primary 提示块标签</div><div class="note success disabled">success 提示块标签</div><div class="note info disabled">info 提示块标签</div><div class="note warning disabled">warning 提示块标签</div><div class="note danger disabled">danger 提示块标签</div><h2 id="gallery-%E7%9B%B8%E5%86%8C%E5%9B%BE%E5%BA%93" tabindex="-1">Gallery 相册图库 <sup class="footnote-ref"><a href="#footnote3">[3]</a><a class="footnote-anchor" id="footnote-ref3"></a></sup></h2><div class="gallery-group-main"><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/f152f0964fe951b4e1fc84ef2f2460156d602454.png@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Kiki</div>      <p>Krita 吉祥物</p>      <a href="https://krita.org/zh/about-zh/kiki-zh/"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/b1eb70eabc81cef3c5821cda30de7a817e1dfbcc.png@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Konqi</div>      <p>KDE 吉祥物</p>      <a href="https://community.kde.org/Konqi"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/c33c0861fa58b53ab3b8f7361bb814aad2f08b3b.jpg@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Sachi</div>      <p>Squishy 吉祥物</p>      <a href="https://docs.scsi.moe/mascot.html"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/album/3476724342a603a7c9b0a332d79c09e1be963df9.png@1000h.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">An-An</div>      <p>AOSC 吉祥物</p>      <a href="https://aosc.io/"></a>    </figcaption>  </figure></div><h2 id="gallery-%E7%9B%B8%E5%86%8C" tabindex="-1">Gallery 相册 <sup class="footnote-ref"><a href="#footnote4">[4]</a><a class="footnote-anchor" id="footnote-ref4"></a></sup></h2><div class="gallery-container" data-type="data" data-button="" data-limit="10" data-first="10">    <div class="gallery-items">[{"url":"https://s2.hdslb.com/bfs/article/f7d418ca42cd207dc63d612cab02ea7526509b14.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/44635100ad10a7b0924258c318a523cda3d620a9.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/13545f598e000bcca782fdbe41c37df094d1c49a.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/f187d68789be25f3d72024956c80b8a27eaafa8c.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/a3f91dba6f7a5180a212de06bf2789027e1fb796.png@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/10c656350a14eb8aa3fd1a861265dca77e3e2003.png@1e_1c.webp","alt":"","title":""}]</div>  </div><h2 id="tag-hide" tabindex="-1">Tag Hide</h2><p>哪个英文字母最酷？ <span class="hide-inline"><button type="button" class="hide-button" style="background-color: #FF7242;color: #fff">查看答案</button><span class="hide-content"> C，因为西装裤 (C 装酷)</span></span></p><!-- prettier-ignore-start --><h2 id="mermaid" tabindex="-1">Mermaid <sup class="footnote-ref"><a href="#footnote5">[5]</a><a class="footnote-anchor" id="footnote-ref5"></a></sup></h2><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    flowchart LRA[Hard] --&gt;|Text| B(Round)B --&gt; C{Decision}C --&gt;|One| D[Result 1]C --&gt;|Two| E[Result 2]  </pre></div><h3 id="%E6%B5%81%E7%A8%8B%E5%9B%BE" tabindex="-1">流程图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    flowchart LRA[Hard] --&gt;|Text| B(Round)B --&gt; C{Decision}C --&gt;|One| D[Result 1]C --&gt;|Two| E[Result 2]  </pre></div><h3 id="%E6%97%B6%E5%BA%8F%E5%9B%BE" tabindex="-1">时序图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    sequenceDiagramAlice-&gt;&gt;John: Hello John, how are you?loop HealthCheck    John-&gt;&gt;John: Fight against hypochondriaendNote right of John: Rational thoughts!John--&gt;&gt;Alice: Great!John-&gt;&gt;Bob: How about you?Bob--&gt;&gt;John: Jolly good!  </pre></div><h3 id="%E7%94%98%E7%89%B9%E5%9B%BE" tabindex="-1">甘特图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    gantt    section Section    Completed :done,    des1, 2014-01-06,2014-01-08    Active        :active,  des2, 2014-01-07, 3d    Parallel 1   :         des3, after des1, 1d    Parallel 2   :         des4, after des1, 1d    Parallel 3   :         des5, after des3, 1d    Parallel 4   :         des6, after des4, 1d  </pre></div><h3 id="%E7%B1%BB%E5%9B%BE" tabindex="-1">类图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    classDiagramClass01 &lt;|-- AveryLongClass : Cool&lt;&lt;Interface&gt;&gt; Class01Class09 --&gt; C2 : Where am I?Class09 --* C3Class09 --|&gt; Class07Class07 : equals()Class07 : Object[] elementDataClass01 : size()Class01 : int chimpClass01 : int gorillaclass Class10 {  &lt;&lt;service&gt;&gt;  int id  size()}  </pre></div><h3 id="%E7%8A%B6%E6%80%81%E5%9B%BE" tabindex="-1">状态图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    stateDiagram-v2[*] --&gt; StillStill --&gt; [*]Still --&gt; MovingMoving --&gt; StillMoving --&gt; CrashCrash --&gt; [*]  </pre></div><h3 id="%E9%A5%BC%E5%9B%BE" tabindex="-1">饼图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    pie"Dogs" : 386"Cats" : 85"Rats" : 15  </pre></div><h3 id="%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C%E6%97%85%E7%A8%8B%E5%9B%BE" tabindex="-1">用户体验旅程图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    journey  title My working day  section Go to work    Make tea: 5: Me    Go upstairs: 3: Me    Do work: 1: Me, Cat  section Go home    Go downstairs: 5: Me    Sit down: 3: Me  </pre></div><h3 id="c4-%E5%9B%BE" tabindex="-1">C4 图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    C4Contexttitle System Context diagram for Internet Banking SystemPerson(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")Person(customerB, "Banking Customer B")Person_Ext(customerC, "Banking Customer C")System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")Person(customerD, "Banking Customer D", "A customer of the bank, &lt;br/&gt; with personal bank accounts.")Enterprise_Boundary(b1, "BankBoundary") {  SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")  System_Boundary(b2, "BankBoundary2") {    System(SystemA, "Banking System A")    System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.")  }  System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")  SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.")  Boundary(b3, "BankBoundary3", "boundary") {    SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.")    SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.")  }}BiRel(customerA, SystemAA, "Uses")BiRel(SystemAA, SystemE, "Uses")Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")Rel(SystemC, customerA, "Sends e-mails to")  </pre></div><h2 id="tabs" tabindex="-1">Tabs</h2><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">test1 1</button><button type="button" class="tab">test1 2</button><button type="button" class="tab">test1 3</button></div><div class="tab-contents"><div class="tab-item-content active">**This is Tab 1.**</div><div class="tab-item-content">**This is Tab 2.**</div><div class="tab-item-content">**This is Tab 3.**</div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h2 id="button" tabindex="-1">Button</h2><a class="btn-beautify larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify blue larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify pink larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify red larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify purple larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify orange larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify green larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><h2 id="label" tabindex="-1">label</h2><p>臣亮言：<mark class="hl-label default">先帝</mark>创业未半，而<mark class="hl-label blue">中道崩殂</mark>。今天下三分，<mark class="hl-label pink">益州疲敝</mark>，此诚<mark class="hl-label red">危急存亡之秋</mark>也！然侍衞之臣，不懈于内；<mark class="hl-label purple">忠志之士</mark>，忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气；不宜妄自菲薄，引喻失义，以塞忠谏之路也。</p><p>宫中、府中，俱为一体；陟罚臧否，不宜异同。若有<mark class="hl-label orange">作奸</mark>、<mark class="hl-label green">犯科</mark>，及为忠善者，宜付有司，论其刑赏，以昭陛下平明之治；不宜偏私，使内外异法也。</p><h2 id="timeline" tabindex="-1">Timeline</h2><div class="timeline "><div class="timeline-item headline">        <div class="timeline-item-title">          <div class="item-circle">2022</div>        </div>      </div><div class="timeline-item">        <div class="timeline-item-title">          <div class="item-circle">01-02</div>        </div>        <div class="timeline-item-content">这是测试页面</div>      </div></div><h2 id="chart.js" tabindex="-1">Chart.js</h2><div class="chartjs-container" data-chartjs-id="" data-width="70%">            <pre class="chartjs-src" hidden="">{    "type": "line",    "data": {        "labels": ["January", "February", "March", "April", "May", "June", "July"],        "datasets": [{            "label": "My First dataset",            "backgroundColor": "rgb(255, 99, 132)",            "borderColor": "rgb(255, 99, 132)",            "data": [0, 10, 5, 2, 20, 30, 45]        }]    },    "options": {        "responsive": true,        "title": {            "display": true,            "text": "Chart.js Line Chart"        }    }}</pre>                      </div><div class="chartjs-container" data-chartjs-id="">            <pre class="chartjs-src" hidden="">{  "type": "radar",  "data": {    "labels": [      "Eating",      "Drinking",      "Sleeping",      "Designing",      "Coding",      "Cycling",      "Running"    ],    "datasets": [      {        "label": "My First Dataset",        "data": [65, 59, 90, 81, 56, 55, 40],        "fill": true,        "backgroundColor": "rgba(255, 99, 132, 0.2)",        "borderColor": "rgb(255, 99, 132)",        "pointBackgroundColor": "rgb(255, 99, 132)",        "pointBorderColor": "#fff",        "pointHoverBackgroundColor": "#fff",        "pointHoverBorderColor": "rgb(255, 99, 132)"      },      {        "label": "My Second Dataset",        "data": [28, 48, 40, 19, 96, 27, 100],        "fill": true,        "backgroundColor": "rgba(54, 162, 235, 0.2)",        "borderColor": "rgb(54, 162, 235)",        "pointBackgroundColor": "rgb(54, 162, 235)",        "pointBorderColor": "#fff",        "pointHoverBackgroundColor": "#fff",        "pointHoverBorderColor": "rgb(54, 162, 235)"      }    ]  },  "options": {    "elements": {      "line": {        "borderWidth": 3      }    }  }}</pre>                      </div><div class="chartjs-container chartjs-abreast" data-chartjs-id="" data-width="40%">            <pre class="chartjs-src" hidden="">{    "type": "pie",    "data": {        "labels": [            "编程",            "音乐",            "阅读",            "游戏",            "健身",            "旅游"        ],        "datasets": [            {                "label": "喜爱指数",                "data": [                    30,                    24,                    19,                    14,                    9,                    4                ],                "backgroundColor": {                    "dark-mode": [                        "rgba(255, 99, 132, 0.5)",                        "rgba(54, 162, 235, 0.5)",                        "rgba(255, 206, 86, 0.5)",                        "rgba(75, 192, 192, 0.5)",                        "rgba(153, 102, 255, 0.5)",                        "rgba(255, 159, 64, 0.5)"                    ],                    "light-mode": [                        "rgba(255, 99, 132, 0.2)",                        "rgba(54, 162, 235, 0.2)",                        "rgba(255, 206, 86, 0.2)",                        "rgba(75, 192, 192, 0.2)",                        "rgba(153, 102, 255, 0.2)",                        "rgba(255, 159, 64, 0.2)"                    ]                },                "borderColor": {                    "dark-mode": [                        "rgba(255, 99, 132, 1)",                        "rgba(54, 162, 235, 1)",                        "rgba(255, 206, 86, 1)",                        "rgba(75, 192, 192, 1)",                        "rgba(153, 102, 255, 1)",                        "rgba(255, 159, 64, 1)"                    ],                    "light-mode": [                        "rgba(255, 99, 132, 1)",                        "rgba(54, 162, 235, 1)",                        "rgba(255, 206, 86, 1)",                        "rgba(75, 192, 192, 1)",                        "rgba(153, 102, 255, 1)",                        "rgba(255, 159, 64, 1)"                    ]                }            }        ]    },    "options": {        "plugins": {            "legend": {                "labels": {                    "color": {                        "dark-mode": "rgba(255, 255, 255, 0.8)",                        "light-mode": "rgba(0, 0, 0, 0.8)"                    }                }            }        }    }}</pre>            <div class="chartjs-desc">除了 ** 计算机编程 ** 外，我想不出还有其他让我感兴趣的工作。我可以无中生有地创造出 ** 精美的范式 ** 和 ** 结构 **，在此过程中也解决了无数的小谜团。<span style="font-size:0.8em;color: var(--sep-secondtext);">I can't think of any other job other than **computer programming** that interests me.I can create **beautiful paradigms** and **structures** out of nothing,Countless small mysteries are also solved in the process.</span></div>          </div><!-- prettier-ignore-end --><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="footnote1" class="footnote-item"><p>脚注是指附在文章页面的最底端的，对某些东西加以说明的注文。 <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p></li><li id="footnote2" class="footnote-item"><p>代码来自<a href="https://butterfly.js.org/posts/4aa8abbe/#Note-Bootstrap-Callout">Butterfly 安裝文檔 (三) 主題配置 - 1 | Butterfly</a>，采用 CC - BY - NC - SA 协议授权 <a href="#footnote-ref2" class="footnote-backref">↩︎</a></p></li><li id="footnote3" class="footnote-item"><p>画作由 TysonTan 绘制，采用 CC - BY - SA 协议授权 <a href="#footnote-ref3" class="footnote-backref">↩︎</a></p></li><li id="footnote4" class="footnote-item"><p>图片来自 <a href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly ReadMe</a>，采用 CC - BY - NC - SA 协议授权 <a href="#footnote-ref4" class="footnote-backref">↩︎</a></p></li><li id="footnote5" class="footnote-item"><p>代码来自 <a href="https://github.com/mermaid-js/mermaid/blob/develop/README.zh-CN.md">Mermaid ReadMe</a> <a href="#footnote-ref5" class="footnote-backref">↩︎</a></p></li></ol></section>]]>
      </content:encoded>
    </item>
  </channel>
</rss>
