diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..723ef36
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.idea
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..bf52dc5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+# R-plugin
+个人团队用的Yunzai-bot插件,插件的各种业务来源于周围人
+
+
+## 🗃️文件架构
+apps -- 业务核心
+
+config -- 配置文件
+
+model -- 核心文件[建议不动]
+
+resource -- 资源文件
+
+test -- 爬虫文件[python]
+
+index -- 主入口
+
+## 📔使用说明
+1. `test -- main.py`爬取链接
+> python3 main.py
+2. 下载mongodb
+> linux系统下自己装一个mongodb,上一个密码(不上有风险)
+3. 在`Yunzai-Bot`安装mongodb依赖
+> pnpm i mongodb
+4. 下载插件
+> 注:可以不用mongodb这些操作,只是用不了一些命令而已
+
+## 📦业务
+
+
+## 🤳版本
+
+
+## 🚀后记
+* 文件借鉴了很多插件,精简个人认为可以精简的内容。
+* 素材来源于网络,仅供交流学习使用
+* 严禁用于任何商业用途和非法行为
+* 如果对你有帮助辛苦给个star,这是对我最大的鼓励
\ No newline at end of file
diff --git a/apps/cat.js b/apps/cat.js
new file mode 100644
index 0000000..3a0642a
--- /dev/null
+++ b/apps/cat.js
@@ -0,0 +1,35 @@
+// 主库
+import { segment } from 'oicq'
+import fetch from 'node-fetch'
+// 配置文件库
+import config from '../model/index.js'
+
+export class cat extends plugin {
+ constructor () {
+ super({
+ name: '猫',
+ dsc: '猫相关指令',
+ event: 'message.group',
+ priority: 500,
+ rule: [
+ {
+ reg: '^#(cat)$', fnc: 'cat'
+ }
+ ]
+ })
+ this.catConfig = config.getConfig('cat')
+ }
+
+ async cat (e) {
+ const numb = this.catConfig.count
+ let images = []
+ let reqRes = [...await fetch(`https://shibe.online/api/cats?count=${numb}`).then(data => data.json()), ...await fetch(`https://api.thecatapi.com/v1/images/search?limit=${numb}`).then(data => data.json()).then(json => json.map(item => item.url))]
+ e.reply('涩图也不看了,就看猫是吧, 探索中...')
+ reqRes.forEach(item => {
+ images.push({
+ message: segment.image(item), nickname: this.e.sender.card || this.e.user_id, user_id: this.e.user_id
+ })
+ })
+ return !!(await this.reply(await Bot.makeForwardMsg(images)))
+ }
+}
diff --git a/apps/doctor.js b/apps/doctor.js
new file mode 100644
index 0000000..5d4cace
--- /dev/null
+++ b/apps/doctor.js
@@ -0,0 +1,61 @@
+// 主库
+import { segment } from 'oicq'
+import fetch from 'node-fetch'
+// 爬虫库
+import puppeteer from '../../../lib/puppeteer/puppeteer.js'
+
+export class doctor extends plugin {
+ constructor () {
+ super({
+ name: '医药查询',
+ dsc: '医药相关指令',
+ event: 'message.group',
+ priority: 500,
+ rule: [
+ {
+ reg: '^#*医药查询 (.*)$',
+ fnc: 'doctor'
+ }
+ ]
+ })
+ }
+
+ async doctor (e) {
+ let keyword = e.msg.split(' ')[1]
+ const url = `https://api2.dayi.org.cn/api/search2?keyword=${keyword}&pageNo=1&pageSize=10`
+ let res = await fetch(url)
+ .then((resp) => resp.json())
+ .then((resp) => resp.list)
+ let msg = []
+ for (const element of res) {
+ const title = this.removeTag(element.title)
+ const template = `
+ ${title}\n
+ 标签:${element.secondTitle}\n
+ 介绍:${element.introduction}
+ `
+ // 如果完全匹配,直接响应页面
+ if (title === keyword) {
+ const browser = await puppeteer.browserInit()
+ const page = await browser.newPage()
+ await page.goto(`https://www.dayi.org.cn/drug/${element.id}`)
+ let buff = await page.screenshot({
+ fullPage: true, type: 'jpeg', omitBackground: false, quality: 90
+ })
+ browser.close()
+ await e.reply(segment.image(buff))
+ }
+ msg.push({
+ message: { type: 'text', text: `${template}` }, nickname: Bot.nickname, user_id: Bot.uin
+ })
+ }
+ /** 最后回复消息 */
+ return !!this.reply(await Bot.makeForwardMsg(msg))
+ }
+
+ // 删除标签
+ removeTag (title) {
+ const titleRex = /<[^>]+>/g
+ return title.replace(titleRex, '')
+ }
+}
diff --git a/apps/help.js b/apps/help.js
new file mode 100644
index 0000000..cd6942e
--- /dev/null
+++ b/apps/help.js
@@ -0,0 +1,46 @@
+import Help from '../model/help.js'
+import puppeteer from '../../../lib/puppeteer/puppeteer.js'
+import md5 from 'md5'
+
+let helpData = {
+ md5: '',
+ img: ''
+}
+
+export class help extends plugin {
+ constructor (e) {
+ super({
+ name: 'RConsole插件帮助',
+ dsc: 'RConsole插件帮助插件帮助',
+ event: 'message',
+ priority: 500,
+ rule: [
+ {
+ reg: '^#*R(插件)?(命令|帮助|菜单|help|说明|功能|指令|使用说明)$',
+ fnc: 'help'
+ }
+ ]
+ })
+ }
+
+ /**
+ * rule - 闲心插件帮助
+ * @returns
+ */
+ async help () {
+ let data = await Help.get(this.e)
+ if (!data) return
+ let img = await this.cache(data)
+ await this.reply(img)
+ }
+
+ async cache (data) {
+ let tmp = md5(JSON.stringify(data))
+ if (helpData.md5 == tmp) return helpData.img
+
+ helpData.img = await puppeteer.screenshot('help', data)
+ helpData.md5 = tmp
+
+ return helpData.img
+ }
+}
diff --git a/apps/hotSearch.js b/apps/hotSearch.js
new file mode 100644
index 0000000..5d43628
--- /dev/null
+++ b/apps/hotSearch.js
@@ -0,0 +1,82 @@
+import _ from 'lodash'
+import fetch from 'node-fetch'
+
+export class hotSearch extends plugin {
+ constructor () {
+ super({
+ name: '热搜查询',
+ dsc: '热搜相关指令',
+ event: 'message.group',
+ priority: 500,
+ rule: [
+ {
+ reg: '^#(热搜)(.*)$', fnc: 'hotSearch'
+ }
+ ]
+ })
+ }
+
+ async hotSearch (e) {
+ let keyword = e.msg.replace(/#|热搜/g, '').trim()
+ // 虎扑/知乎/36氪/百度/哔哩哔哩/贴吧/微博/抖音/豆瓣/少数派/IT资讯/微信
+ let url = 'https://api.vvhan.com/api/hotlist?type='
+ switch (keyword) {
+ case '虎扑':
+ url += 'hupu'
+ break
+ case '知乎':
+ url += 'zhihuHot'
+ break
+ case '36氪':
+ url += '36Ke'
+ break
+ case '百度':
+ url += 'baiduRD'
+ break
+ case '哔哩哔哩':
+ url += 'bili'
+ break
+ case '贴吧':
+ url += 'baiduRY'
+ break
+ case '微博':
+ url += 'wbHot'
+ break
+ case '抖音':
+ url += 'douyinHot'
+ break
+ case '豆瓣':
+ url += 'douban'
+ break
+ case '少数派':
+ url += 'ssPai'
+ break
+ case 'IT资讯':
+ url += 'itInfo'
+ break
+ case '微信':
+ url += 'wxHot'
+ break
+ default:
+ url += 'history'
+ break
+ }
+ let msg = []
+ let res = await fetch(url)
+ .then((resp) => resp.json())
+ .then((resp) => resp.data)
+ .catch((err) => logger.error(err))
+ res.forEach((element) => {
+ const template = `
+ 标题:${element.title}\n
+ 简介:${_.isNull(element.desc) ? '' : element.desc}\n
+ 热度:${element.hot}\n
+ 访问详情:${element.url}\n
+ `
+ msg.push({
+ message: { type: 'text', text: `${template}` }, nickname: Bot.nickname, user_id: Bot.uin
+ })
+ })
+ return !!this.reply(await Bot.makeForwardMsg(msg))
+ }
+}
diff --git a/apps/mystery.js b/apps/mystery.js
new file mode 100644
index 0000000..a8f5b49
--- /dev/null
+++ b/apps/mystery.js
@@ -0,0 +1,275 @@
+// 主库
+import { segment } from 'oicq'
+import common from '../../../lib/common/common.js'
+import fetch from 'node-fetch'
+// 配置文件
+import config from '../model/index.js'
+// 其他库
+import _ from 'lodash'
+import mongodb from 'mongodb'
+
+// Mongodb初始化
+function initMongo () {
+ const MongoClient = mongodb.MongoClient
+ const url = 'mongodb://localhost:27017/'
+ return new Promise((resolve, reject) => {
+ MongoClient.connect(url, (err, db) => {
+ const dbo = db.db('test')
+ if (err) {
+ throw err // 和调用 reject(err) 效果类似
+ }
+ let collection = dbo.collection('temp')
+ resolve(collection)
+ })
+ })
+}
+const mongo = initMongo()
+
+export class mystery extends plugin {
+ constructor () {
+ super({
+ name: '神秘区域',
+ dsc: '神秘指令',
+ event: 'message.group',
+ priority: 500,
+ rule: [
+ {
+ reg: '^#(雀食|确实)$', fnc: 'mystery'
+ },
+ {
+ reg: '^#来份涩图$', fnc: 'setu'
+ },
+ {
+ reg: '^#(累了)$', fnc: 'cospro'
+ },
+ {
+ reg: '^#(啊?|啊?)$', fnc: 'aaa'
+ },
+ {
+ reg: '^#沃日吗$', fnc: 'tuiimg'
+ }
+ ]
+ })
+ this.mysteryConfig = config.getConfig('mystery')
+ }
+
+ // 接受到消息都会先执行一次
+ async accept () {
+ let oldReply = this.e.reply
+
+ this.e.reply = async function (msgs, quote, data) {
+ if (!msgs) return false
+ if (!Array.isArray(msgs)) msgs = [msgs]
+ let result = await oldReply(msgs, quote, data)
+
+ if (!result || !result.message_id) {
+ let isxml = false
+
+ for (let msg of msgs) {
+ if (msg && msg?.type == 'xml' && msg?.data) {
+ msg.data = msg.data.replace(/^<\?xml.*update=.*?>/g, '')
+ isxml = true
+ }
+ }
+
+ if (isxml) {
+ result = await oldReply(msgs, quote, data)
+ } else {
+ let MsgList = [{
+ message: msgs, nickname: Bot.nickname, user_id: Bot.uin
+ }]
+
+ let forwardMsg = await Bot.makeForwardMsg(MsgList)
+
+ forwardMsg.data = forwardMsg.data
+ .replace('', '')
+ .replace(/\n/g, '')
+ .replace(/
(.+?)<\/title>/g, '___')
+ .replace(/___+/, '请点击查看内容 ')
+ msgs = forwardMsg
+ result = await oldReply(msgs, quote, data)
+ }
+
+ if (!result || !result.message_id) {
+ logger.error('风控消息处理失败,请登录手机QQ查看是否可手动解除风控!')
+ }
+ }
+ return result
+ }
+ }
+
+ async mystery (e) {
+ // 最大页数
+ const maxPage = this.mysteryConfig.mystery.maxPage
+ const maxPigObj = this.mysteryConfig.mystery.maxPigObj
+ // 限制最大图片数量
+ const imageCountLimit = this.mysteryConfig.mystery.imageCountLimit
+ // 随机算法
+ const page = _.random(1, maxPage)
+ const randomIndex = _.random(0, maxPigObj - 1)
+ // 回复
+ this.reply('确实是吧, 正在探索...')
+ // 请求
+ let images = []
+ let imgData = []
+ let url = `https://www.cos6.net/wp-json/wp/v2/posts?page=${page}`
+ await fetch(url)
+ .then((resp) => {
+ return resp.json()
+ })
+ .then((json) => {
+ if (!json.length) {
+ this.e.reply('探索失败,你再我去一次吧')
+ return false
+ }
+ const content = json[randomIndex].content
+ images = this.getImages(content.rendered)
+ // 如果图片为空直接返回
+ if (images.length === 0) {
+ this.e.reply('探索失败,你再我去一次吧')
+ return false
+ }
+ // 洗牌
+ images = _.shuffle(images)
+ // 限制长度
+ if (images.length > imageCountLimit) {
+ images = images.slice(1, imageCountLimit + 1)
+ }
+ // 循环队列
+ images.forEach((item) => {
+ imgData.push({
+ message: segment.image(item),
+ nickname: this.e.sender.card || this.e.user_id,
+ user_id: this.e.user_id
+ })
+ })
+ })
+ .catch((err) => logger.error(err))
+ return !!(await this.reply(await Bot.makeForwardMsg(imgData)))
+ }
+
+ async cospro (e) {
+ let req = [...await fetch('https://imgapi.cn/cos2.php?return=jsonpro').then((resp) => resp.json()).then((json) => json.imgurls), ...await fetch('https://imgapi.cn/cos.php?return=jsonpro').then((resp) => resp.json()).then((json) => json.imgurls)]
+ e.reply('哪天克火掉一定是在这个群里面...')
+ let images = []
+ req.forEach(item => {
+ images.push({
+ message: segment.image(encodeURI(item)),
+ nickname: this.e.sender.card || this.e.user_id,
+ user_id: this.e.user_id
+ })
+ })
+ return !!(await this.reply(await Bot.makeForwardMsg(images)))
+ }
+
+ async aaa (e) {
+ // https://yingtall.com/wp-json/wp/v2/posts?page=64
+ // 最大页数
+ const maxPage = this.mysteryConfig.aaa.maxPage
+ const maxPigObj = this.mysteryConfig.aaa.maxPigObj
+ // 限制最大图片数量
+ const imageCountLimit = this.mysteryConfig.aaa.imageCountLimit
+ // 随机算法
+ const page = _.random(1, maxPage)
+ const randomIndex = _.random(0, maxPigObj - 1)
+ // 回复
+ this.reply('真变态啊...')
+ // 请求
+ let images = []
+ let imgData = []
+ let url = `https://yingtall.com/wp-json/wp/v2/posts?page=${page}`
+ await fetch(url)
+ .then((resp) => {
+ return resp.json()
+ })
+ .then((json) => {
+ if (!json.length) {
+ this.e.reply('探索失败,你再我去一次吧')
+ return false
+ }
+ const content = json[randomIndex].content
+ images = this.getImages2(content.rendered)
+ console.log(images)
+ // 如果图片为空直接返回
+ if (images.length === 0) {
+ this.e.reply('探索失败,你再我去一次吧')
+ return false
+ }
+ // 洗牌
+ images = _.shuffle(images)
+ // 限制长度
+ if (images.length > imageCountLimit) {
+ images = images.slice(1, imageCountLimit + 1)
+ }
+ // 循环队列
+ images.forEach((item) => {
+ imgData.push({
+ message: segment.image(item),
+ nickname: this.e.sender.card || this.e.user_id,
+ user_id: this.e.user_id
+ })
+ })
+ })
+ .catch((err) => logger.error(err))
+ return !!(await this.reply(await Bot.makeForwardMsg(imgData)))
+ }
+
+ async setu (e) {
+ const numb = this.mysteryConfig.setu.count
+ // 图源
+ const urlList = ['https://iw233.cn/api.php?sort=random', 'https://iw233.cn/API/Random.php']
+ e.reply('探索中...')
+ let images = []
+ for (let i = numb; i > 0; i--) {
+ urlList.forEach(url => {
+ images.push({
+ message: segment.image(url), nickname: this.e.sender.card || this.e.user_id, user_id: this.e.user_id
+ })
+ })
+ await common.sleep(200)
+ }
+ return !!(await this.reply(await Bot.makeForwardMsg(images)))
+ }
+
+ async tuiimg (e) {
+ const MAX_SIZE = this.mysteryConfig.tuiimg.count
+ this.reply('这群早晚被你整没了...')
+ let images = []
+ const template = {
+ nickname: this.e.sender.card || this.e.user_id, user_id: this.e.user_id
+ }
+ await mongo.then(conn => {
+ return conn.aggregate([{ $sample: { size: MAX_SIZE } }]).toArray()
+ }).then((result) => {
+ console.log(result)
+ result.forEach((item) => {
+ images.push({
+ message: segment.image(item.url), ...template
+ })
+ })
+ })
+ return !!(await this.reply(await Bot.makeForwardMsg(images), false, 60))
+ }
+
+ // 正则:获取图片
+ getImages (string) {
+ const imgRex = /(http|https):\/\/([\w.]+\/?)\S*.(jpg|JPG|png|PNG|gif|GIF|jpeg|JPEG)/g
+ const images = []
+ let img
+ while ((img = imgRex.exec(string))) {
+ images.push(encodeURI(img[0]))
+ }
+ return images
+ }
+
+ // 正则:获取图片
+ getImages2 (string) {
+ const imgRex = /]+>/g
+ const images = []
+ let img
+ while ((img = imgRex.exec(string))) {
+ images.push(encodeURI(img[1]))
+ }
+ return images
+ }
+}
diff --git a/apps/recommend.js b/apps/recommend.js
new file mode 100644
index 0000000..a0b15f0
--- /dev/null
+++ b/apps/recommend.js
@@ -0,0 +1,55 @@
+import fetch from 'node-fetch'
+
+export class recommend extends plugin {
+ constructor () {
+ super({
+ name: '推荐软件',
+ dsc: '推荐相关指令',
+ event: 'message.group',
+ priority: 500,
+ rule: [
+ {
+ /** 命令正则匹配 */
+ reg: '^#电脑软件推荐$', /** 执行方法 */
+ fnc: 'computerRecommended'
+ }, {
+ /** 命令正则匹配 */
+ reg: '^#安卓软件推荐$', /** 执行方法 */
+ fnc: 'androidRecommended'
+ }
+ ]
+ })
+ }
+
+ async computerRecommended (e) {
+ let url = 'https://www.ghxi.com/ghapi?type=query&n=pc'
+ /** 调用接口获取数据 */
+ let res = await fetch(url).catch((err) => logger.error(err))
+
+ /** 接口结果,json字符串转对象 */
+ res = await res.json()
+ let msg = []
+ res.data.list.forEach((element) => {
+ const template = `推荐软件:${element.title}\n地址:${element.url}\n`
+ msg.push({
+ message: { type: 'text', text: `${template}` }, nickname: Bot.nickname, user_id: Bot.uin
+ })
+ })
+ /** 最后回复消息 */
+ return !!this.reply(await Bot.makeForwardMsg(msg))
+ }
+
+ async androidRecommended (e) {
+ let url = 'https://www.ghxi.com/ghapi?type=query&n=and'
+ let res = await fetch(url).catch((err) => logger.error(err))
+ res = await res.json()
+ let msg = []
+ res.data.list.forEach((element) => {
+ const template = `推荐软件:${element.title}\n地址:${element.url}\n`
+ msg.push({
+ message: { type: 'text', text: `${template}` }, nickname: Bot.nickname, user_id: Bot.uin
+ })
+ })
+ return !!this.reply(await Bot.makeForwardMsg(msg))
+ }
+}
diff --git a/apps/tools.js b/apps/tools.js
new file mode 100644
index 0000000..9ab73e9
--- /dev/null
+++ b/apps/tools.js
@@ -0,0 +1,30 @@
+import fetch from 'node-fetch'
+import md5 from 'md5'
+
+export class tools extends plugin {
+ constructor () {
+ super({
+ name: '工具和学习类',
+ dsc: '工具相关指令',
+ event: 'message.group',
+ priority: 500,
+ rule: [
+ {
+ reg: '^#(翻译)(.*)$', fnc: 'trans'
+ }
+ ]
+ })
+ }
+
+ // 翻译插件
+ async trans (e) {
+ let place = e.msg.replace(/#|翻译/g, '').trim()
+ let url = /[\u4E00-\u9FFF]+/g.test(place) ? `http://api.fanyi.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20210422000794040&salt=542716863&sign=${md5('20210422000794040' + place + '542716863' + 'HooD_ndgwcGH6SAnxGrM')}&q=${place}` : `http://api.fanyi.baidu.com/api/trans/vip/translate?from=en&to=zh&appid=20210422000794040&salt=542716863&sign=${md5('20210422000794040' + place + '542716863' + 'HooD_ndgwcGH6SAnxGrM')}&q=${place}`
+ await fetch(url)
+ .then(resp => resp.json())
+ .then(text => text.trans_result)
+ .then(res => this.reply(`${res[0].dst}`, true))
+ .catch((err) => logger.error(err))
+ return true
+ }
+}
diff --git a/apps/update.js b/apps/update.js
new file mode 100644
index 0000000..2dbdc0a
--- /dev/null
+++ b/apps/update.js
@@ -0,0 +1,37 @@
+// 主库
+import Version from '../model/version.js'
+import config from '../model/index.js'
+import puppeteer from '../../../lib/puppeteer/puppeteer.js'
+
+/**
+ * 处理插件更新
+ */
+export class update extends plugin {
+ constructor () {
+ super({
+ name: '更新插件',
+ dsc: '更新插件代码',
+ event: 'message',
+ priority: 4000,
+ rule: [
+ {
+ reg: '^#*R(插件)?版本$',
+ fnc: 'version'
+ }
+ ]
+ })
+
+ this.versionData = config.getConfig('version')
+ }
+
+ /**
+ * rule - 插件版本信息
+ */
+ async version () {
+ const data = await new Version(this.e).getData(
+ this.versionData.slice(0, 3)
+ )
+ let img = await puppeteer.screenshot('version', data)
+ this.e.reply(img)
+ }
+}
diff --git a/config/cat.yaml b/config/cat.yaml
new file mode 100644
index 0000000..d828526
--- /dev/null
+++ b/config/cat.yaml
@@ -0,0 +1,2 @@
+# 发送张数
+count: 10
\ No newline at end of file
diff --git a/config/help.yaml b/config/help.yaml
new file mode 100644
index 0000000..2b2165f
--- /dev/null
+++ b/config/help.yaml
@@ -0,0 +1,54 @@
+- group: 医学功能
+ list:
+ - icon: 记录
+ title: "#医药查询 疾病/症状/医院/医生/药品"
+ desc: 便利的医药查询功能
+- group: 猫猫图
+ list:
+ - icon: 树脂
+ title: "#猫猫|cat 开始吸猫"
+ desc: 猫咪图捕捉
+- group: 神秘功能合集
+ list:
+ - icon: 养成计算
+ title: "#雀食/#确实"
+ desc: 原汤化原食
+ - icon: 史莱姆
+ title: "#来份涩图"
+ desc: 涩涩的
+ - icon: weapon
+ title: "#累了"
+ desc: 疲惫往往是过度劳累
+ - icon: 攻略
+ title: "#啊?"
+ desc: 啊?
+ - icon: sign
+ title: "#沃日吗"
+ desc: 什么鬼?
+- group: 热搜功能合集
+ list:
+ - icon: 打卡
+ title: "#热搜 虎扑/知乎/36氪/百度/哔哩哔哩/贴吧/微博/抖音/豆瓣/少数派/IT资讯/微信"
+ desc: 开局五子棋游戏
+- group: 工具类合集
+ list:
+ - icon: 绑定账号
+ title: "#翻译 xxx"
+ desc: 百度翻译
+ - icon: 纠缠之缘
+ title: "#电脑软件推荐"
+ desc: 推荐PC软件
+ - icon: ledger
+ title: "#安卓软件推荐"
+ desc: 推荐安卓软件
+- group: 其他指令[实验]
+ list:
+ - icon: 问号
+ title: "#RConsole插件版本"
+ desc: "查看,最近维护的版本信息"
+ - icon: 史莱姆
+ title: "#RConsole插件更新"
+ desc: "进行更新RConsole插件"
+ - icon: 原石
+ title: "#RConsole插件强制更新"
+ desc: "进行强制更新RConsole插件"
\ No newline at end of file
diff --git a/config/mystery.yaml b/config/mystery.yaml
new file mode 100644
index 0000000..21f39ff
--- /dev/null
+++ b/config/mystery.yaml
@@ -0,0 +1,16 @@
+mystery:
+ # 最大页数
+ maxPage: 15
+ maxPigObj: 10
+ # 限制最大图片数量
+ imageCountLimit: 20
+aaa:
+ # 最大页数
+ maxPage: 15
+ maxPigObj: 10
+ # 限制最大图片数量
+ imageCountLimit: 20
+setu:
+ count: 10
+tuiimg:
+ count: 10
\ No newline at end of file
diff --git a/config/version.yaml b/config/version.yaml
new file mode 100644
index 0000000..6aab3d5
--- /dev/null
+++ b/config/version.yaml
@@ -0,0 +1,10 @@
+- {
+ version: 1.0,
+ data:
+ [
+ 更改单个组件#任助理 架构为插件架构,
+ 添加#R帮助 获取插件帮助,
+ 添加#R版本 获取插件版本,
+ 更新风控缓解、重构系统文件
+ ],
+}
\ No newline at end of file
diff --git a/img/help.jpg b/img/help.jpg
new file mode 100644
index 0000000..d593b39
Binary files /dev/null and b/img/help.jpg differ
diff --git a/img/version.jpg b/img/version.jpg
new file mode 100644
index 0000000..3a54e9b
Binary files /dev/null and b/img/version.jpg differ
diff --git a/model/base.js b/model/base.js
new file mode 100644
index 0000000..58ea559
--- /dev/null
+++ b/model/base.js
@@ -0,0 +1,27 @@
+export default class base {
+ constructor (e = {}) {
+ this.e = e
+ this.userId = e?.user_id
+ this.model = 'RConsole-plugin'
+ this._path = process.cwd().replace(/\\/g, '/')
+ }
+
+ get prefix () {
+ return `Yz:RConsole-plugin:${this.model}:`
+ }
+
+ /**
+ * 截图默认数据
+ * @param saveId html保存id
+ * @param tplFile 模板html路径
+ * @param pluResPath 插件资源路径
+ */
+ get screenData () {
+ return {
+ saveId: this.userId,
+ tplFile: `./plugins/RConsole-plugin/resources/html/${this.model}/${this.model}.html`,
+ /** 绝对路径 */
+ pluResPath: `${this._path}/plugins/RConsole-plugin/resources/`
+ }
+ }
+}
diff --git a/model/help.js b/model/help.js
new file mode 100644
index 0000000..743301a
--- /dev/null
+++ b/model/help.js
@@ -0,0 +1,42 @@
+import base from './base.js'
+import config from './index.js'
+import cfg from '../../../lib/config/config.js'
+
+export default class Help extends base {
+ constructor (e) {
+ super(e)
+ this.model = 'help'
+ }
+
+ static async get (e) {
+ let html = new Help(e)
+ return await html.getData()
+ }
+
+ async getData () {
+ let helpData = config.getConfig('help')
+
+ let groupCfg = cfg.getGroup(this.group_id)
+
+ if (groupCfg.disable && groupCfg.disable.length) {
+ helpData.map((item) => {
+ if (groupCfg.disable.includes(item.group)) {
+ item.disable = true
+ }
+ return item
+ })
+ }
+
+ let versionData = config.getConfig('version')
+
+ const version =
+ (versionData && versionData.length && versionData[0].version) || '1.0.0'
+
+ return {
+ ...this.screenData,
+ saveId: 'help',
+ version,
+ helpData
+ }
+ }
+}
diff --git a/model/index.js b/model/index.js
new file mode 100644
index 0000000..1e52386
--- /dev/null
+++ b/model/index.js
@@ -0,0 +1,87 @@
+import fs from 'node:fs'
+import _ from 'lodash'
+import YAML from 'yaml'
+import chokidar from 'chokidar'
+
+class RConfig {
+ constructor () {
+ // 配置文件
+ this.configPath = './plugins/RConsole-plugin/config/'
+ this.config = {}
+
+ // 监听文件
+ this.watcher = { config: {} }
+ }
+
+ // 获取配置文件
+ getConfig (name) {
+ let ignore = []
+
+ if (ignore.includes(`${name}`)) {
+ return this.getYaml(name)
+ }
+
+ return this.getYaml(name)
+ }
+
+ /**
+ * 获取配置yaml
+ * @param app 功能
+ * @param name 名称
+ * @param type 默认跑配置-defSet,用户配置-config
+ */
+ getYaml (name) {
+ // 获取文件路径
+ let file = this.getFilePath(name)
+ // 解析xml
+ const yaml = YAML.parse(fs.readFileSync(file, 'utf8'))
+ // 监听文件
+ this.watch(file, name)
+ return yaml
+ }
+
+ /**
+ * 获取文件路径
+ * @param app
+ * @param name
+ * @param type
+ * @returns {string}
+ */
+ getFilePath (name) {
+ return `${this.configPath}${name}.yaml`
+ }
+
+ /**
+ * 听配置文件
+ * @param file
+ * @param app
+ * @param name
+ * @param type
+ */
+ watch (file, name) {
+ const watcher = chokidar.watch(file)
+
+ watcher.on('change', (path) => {
+ logger.mark(`[修改配置文件][${name}]`)
+ })
+ }
+
+ /**
+ * 保存配置
+ * @param app
+ * @param name
+ * @param type
+ * @param data
+ */
+ saveSet (name, data) {
+ let file = this.getFilePath(name)
+ if (_.isEmpty(data)) {
+ fs.existsSync(file) && fs.unlinkSync(file)
+ } else {
+ let yaml = YAML.stringify(data)
+ fs.writeFileSync(file, yaml, 'utf8')
+ }
+ }
+}
+
+export default new RConfig()
diff --git a/model/version.js b/model/version.js
new file mode 100644
index 0000000..0ab653c
--- /dev/null
+++ b/model/version.js
@@ -0,0 +1,22 @@
+import base from './base.js'
+
+export default class Version extends base {
+ constructor (e) {
+ super(e)
+ this.model = 'version'
+ }
+
+ /** 生成版本信息图片 */
+ async getData (versionData) {
+ const version =
+ (versionData && versionData.length && versionData[0].version) || '1.0.0'
+ let data = {
+ ...this.screenData,
+ userId: version,
+ quality: 100,
+ saveId: version,
+ versionData
+ }
+ return data
+ }
+}
diff --git a/resources/html/help/help.css b/resources/html/help/help.css
new file mode 100644
index 0000000..a6ec912
--- /dev/null
+++ b/resources/html/help/help.css
@@ -0,0 +1,140 @@
+@font-face {
+ font-family: "tttgbnumber";
+ src: url("../../../../../resources/font/tttgbnumber.ttf");
+ font-weight: normal;
+ font-style: normal;
+}
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ user-select: none;
+}
+body {
+ font-family: sans-serif;
+ font-size: 16px;
+ width: 788px;
+ color: #1e1f20;
+ transform: scale(1.5);
+ transform-origin: 0 0;
+}
+.container {
+ width: 788px;
+ padding: 20px 15px 10px 15px;
+ background-image: url(../../img/bg.jpeg);
+ background-size: 100%;
+}
+.head_box {
+ border-radius: 15px;
+ font-family: 'tttgbnumber';
+ padding: 10px 20px;
+ position: relative;
+ color: white;
+ box-shadow: 0 5px 10px 0 rgb(0 0 0 / 15%);
+}
+.head_box .id_text {
+ font-size: 24px;
+}
+.head_box .day_text {
+ font-size: 20px;
+}
+.head_box .genshin_logo {
+ position: absolute;
+ top: -10px;
+ right: 15px;
+ width: 97px;
+}
+.base_info {
+ position: relative;
+ padding-left: 10px;
+}
+.uid {
+ font-family: tttgbnumber;
+}
+
+.data_box {
+ border-radius: 15px;
+ margin-top: 20px;
+ margin-bottom: 15px;
+ padding: 20px 0px 5px 0px;
+ background: transparent;
+ box-shadow: 0 0 1px 0 #ccc, 2px 2px 4px 0 rgba(50, 50, 50, 0.8);
+ position: relative;
+}
+.tab_lable {
+ position: absolute;
+ top: -10px;
+ left: -8px;
+ background-color: rgb(76, 76, 76);
+ box-shadow: 0 0 1px 0 #ccc, 2px 2px 4px 0 rgba(50, 50, 50, 0.8);
+ color: #fff;
+ font-size: 14px;
+ padding: 3px 10px;
+ border-radius: 15px 0px 15px 15px;
+ z-index: 20;
+}
+.data_line {
+ display: flex;
+ justify-content: space-around;
+ margin-bottom: 14px;
+}
+.data_line_item {
+ width: 100px;
+ text-align: center;
+ /*margin: 0 20px;*/
+}
+.num {
+ font-family: tttgbnumber;
+ font-size: 24px;
+}
+.data_box .lable {
+ font-size: 14px;
+ color: #7f858a;
+ line-height: 1;
+ margin-top: 3px;
+}
+
+.list{
+ display: flex;
+ justify-content: flex-start;
+ flex-wrap: wrap;
+}
+
+.list .item {
+ width: 235px;
+ display: flex;
+ align-items: center;
+ color: white;
+ background: transparent;
+ box-shadow: 0 0 1px 0 #ccc, 2px 2px 4px 0 rgba(50, 50, 50, 0.8);
+ padding: 8px 6px 8px 6px;
+ border-radius: 8px;
+ margin: 0 0px 10px 10px;
+}
+.list .item .icon{
+ width: 24px;
+ height: 24px;
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+ position: relative;
+ flex-shrink: 0;
+}
+.list .item .title{
+ font-size: 16px;
+ margin-left: 6px;
+ line-height: 20px;
+}
+/* .list .item .title .text{
+ white-space: nowrap;
+} */
+.list .item .title .dec{
+ font-size: 12px;
+ color: #999;
+ margin-top: 2px;
+}
+.logo{
+ text-align: center;
+ font-size: 14px;
+ color: white;
+ font-family: 'tttgbnumber';
+}
\ No newline at end of file
diff --git a/resources/html/help/help.html b/resources/html/help/help.html
new file mode 100644
index 0000000..44cc157
--- /dev/null
+++ b/resources/html/help/help.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+ {{@headStyle}}
+
+
+
+
+
R-Plugin
+
使用说明-v{{update}}
+
+
+ {{each helpData val}}
+
+
+ {{val.group}}{{val.disable ? ' - 已禁用' : ''}}
+
+
+ {{each val.list item}}
+
+
+
+
{{@item.title}}
+
{{item.desc}}
+
+
+ {{/each}}
+
+
+ {{/each}}
+
Created By Yunzai-Bot & R-Plugin
+
+
+
diff --git a/resources/html/version/version.css b/resources/html/version/version.css
new file mode 100644
index 0000000..6160d76
--- /dev/null
+++ b/resources/html/version/version.css
@@ -0,0 +1,82 @@
+@font-face {
+ font-family: "tttgbnumber";
+ src: url("../../../../../resources/font/tttgbnumber.ttf");
+ font-weight: normal;
+ font-style: normal;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ user-select: none;
+}
+body {
+ font-size: 16px;
+ font-family: "tttgbnumber";
+ transform: scale(1.5);
+ transform-origin: 0 0;
+ color: white;
+}
+.container {
+ width: 536px;
+ background-image: url(../../img/bg.jpeg);
+ background-size: 100%;
+ padding: 10px 0 10px 0;
+}
+.version-card {
+ background: transparent;
+ margin: 5px 10px 8px 10px;
+ position: relative;
+ box-shadow: 0 0 1px 0 #ccc, 2px 2px 4px 0 rgba(50, 50, 50, 0.8);
+ overflow: hidden;
+ color: #fff;
+ font-size: 16px;
+ border-radius: 4px;
+}
+.version-card .title {
+ background: rgba(0, 0, 0, 0.4);
+ box-shadow: 0 0 1px 0 #fff;
+ color: white;
+ font-family: Number, YS;
+ padding: 10px 20px;
+ text-align: left;
+ font-size: 16px;
+ padding: 8px 20px 8px;
+ font-weight: bold;
+}
+.version-card .content {
+ padding: 10px 15px;
+ font-size: 12px;
+ background: rgba(0, 0, 0, 0.5);
+ box-shadow: 0 0 1px 0 #fff;
+ font-family: "HYWenHei-55W";
+ font-weight: normal;
+}
+.version-card ul {
+ font-size: 14px;
+ padding-left: 20px;
+}
+.version-card ul li {
+ margin: 3px 0;
+}
+.version-card .cmd {
+ color: #d3bc8e;
+ display: inline-block;
+ border-radius: 3px;
+ padding: 0 3px;
+ margin: 1px 2px;
+}
+.version-card .strong {
+ color: #67a9e4;
+ display: inline-block;
+ border-radius: 3px;
+ padding: 0 3px;
+ margin: 1px 2px;
+}
+.logo{
+ text-align: center;
+ font-size: 14px;
+ color: white;
+ font-family: 'tttgbnumber';
+}
\ No newline at end of file
diff --git a/resources/html/version/version.html b/resources/html/version/version.html
new file mode 100644
index 0000000..a533910
--- /dev/null
+++ b/resources/html/version/version.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{each versionData item idx}}
+
+
{{item.update}}{{idx ? '': ' - 当前版本'}}
+
+
+ {{each item.data sub}}
+ {{@sub}}
+ {{/each}}
+
+
+
+ {{/each}}
+
Created By Yunzai-Bot & R-Plugin
+
+
+
+
diff --git a/resources/img/bg.jpeg b/resources/img/bg.jpeg
new file mode 100644
index 0000000..ab5f0b3
Binary files /dev/null and b/resources/img/bg.jpeg differ
diff --git a/resources/img/gobang/.keep b/resources/img/gobang/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/resources/img/gobang/bg.png b/resources/img/gobang/bg.png
new file mode 100644
index 0000000..13edf4a
Binary files /dev/null and b/resources/img/gobang/bg.png differ
diff --git a/resources/img/icon/.keep b/resources/img/icon/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/resources/img/icon/abyss.png b/resources/img/icon/abyss.png
new file mode 100644
index 0000000..a660320
Binary files /dev/null and b/resources/img/icon/abyss.png differ
diff --git a/resources/img/icon/ledger.png b/resources/img/icon/ledger.png
new file mode 100644
index 0000000..72d2a5a
Binary files /dev/null and b/resources/img/icon/ledger.png differ
diff --git a/resources/img/icon/moster.png b/resources/img/icon/moster.png
new file mode 100644
index 0000000..17ce102
Binary files /dev/null and b/resources/img/icon/moster.png differ
diff --git a/resources/img/icon/paimon.png b/resources/img/icon/paimon.png
new file mode 100644
index 0000000..2f52222
Binary files /dev/null and b/resources/img/icon/paimon.png differ
diff --git a/resources/img/icon/role.png b/resources/img/icon/role.png
new file mode 100644
index 0000000..6c26e14
Binary files /dev/null and b/resources/img/icon/role.png differ
diff --git a/resources/img/icon/sign.png b/resources/img/icon/sign.png
new file mode 100644
index 0000000..d4e9571
Binary files /dev/null and b/resources/img/icon/sign.png differ
diff --git a/resources/img/icon/team.png b/resources/img/icon/team.png
new file mode 100644
index 0000000..3bdeb09
Binary files /dev/null and b/resources/img/icon/team.png differ
diff --git a/resources/img/icon/weapon.png b/resources/img/icon/weapon.png
new file mode 100644
index 0000000..c32f241
Binary files /dev/null and b/resources/img/icon/weapon.png differ
diff --git a/resources/img/icon/wiki.png b/resources/img/icon/wiki.png
new file mode 100644
index 0000000..dd6f583
Binary files /dev/null and b/resources/img/icon/wiki.png differ
diff --git a/resources/img/icon/养成计算.png b/resources/img/icon/养成计算.png
new file mode 100644
index 0000000..f70ae3a
Binary files /dev/null and b/resources/img/icon/养成计算.png differ
diff --git a/resources/img/icon/原石.png b/resources/img/icon/原石.png
new file mode 100644
index 0000000..b4f29e1
Binary files /dev/null and b/resources/img/icon/原石.png differ
diff --git a/resources/img/icon/史莱姆.png b/resources/img/icon/史莱姆.png
new file mode 100644
index 0000000..3aaa0dd
Binary files /dev/null and b/resources/img/icon/史莱姆.png differ
diff --git a/resources/img/icon/打卡.png b/resources/img/icon/打卡.png
new file mode 100644
index 0000000..40f5a53
Binary files /dev/null and b/resources/img/icon/打卡.png differ
diff --git a/resources/img/icon/攻略.png b/resources/img/icon/攻略.png
new file mode 100644
index 0000000..1af5528
Binary files /dev/null and b/resources/img/icon/攻略.png differ
diff --git a/resources/img/icon/星辉.png b/resources/img/icon/星辉.png
new file mode 100644
index 0000000..8dea2d5
Binary files /dev/null and b/resources/img/icon/星辉.png differ
diff --git a/resources/img/icon/树脂.png b/resources/img/icon/树脂.png
new file mode 100644
index 0000000..83badce
Binary files /dev/null and b/resources/img/icon/树脂.png differ
diff --git a/resources/img/icon/米游社.png b/resources/img/icon/米游社.png
new file mode 100644
index 0000000..464c5ee
Binary files /dev/null and b/resources/img/icon/米游社.png differ
diff --git a/resources/img/icon/纠缠之缘.png b/resources/img/icon/纠缠之缘.png
new file mode 100644
index 0000000..240a234
Binary files /dev/null and b/resources/img/icon/纠缠之缘.png differ
diff --git a/resources/img/icon/绑定账号.png b/resources/img/icon/绑定账号.png
new file mode 100644
index 0000000..d088116
Binary files /dev/null and b/resources/img/icon/绑定账号.png differ
diff --git a/resources/img/icon/统计.png b/resources/img/icon/统计.png
new file mode 100644
index 0000000..0250629
Binary files /dev/null and b/resources/img/icon/统计.png differ
diff --git a/resources/img/icon/记录.png b/resources/img/icon/记录.png
new file mode 100644
index 0000000..7b38468
Binary files /dev/null and b/resources/img/icon/记录.png differ
diff --git a/resources/img/icon/问号.png b/resources/img/icon/问号.png
new file mode 100644
index 0000000..d1509df
Binary files /dev/null and b/resources/img/icon/问号.png differ
diff --git a/resources/img/mypk/.keep b/resources/img/mypk/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/resources/img/mypk/战圣.png b/resources/img/mypk/战圣.png
new file mode 100644
index 0000000..9d0b4cf
Binary files /dev/null and b/resources/img/mypk/战圣.png differ
diff --git a/resources/img/mypk/战士.png b/resources/img/mypk/战士.png
new file mode 100644
index 0000000..64d64b4
Binary files /dev/null and b/resources/img/mypk/战士.png differ
diff --git a/resources/img/mypk/战将.png b/resources/img/mypk/战将.png
new file mode 100644
index 0000000..cb87bee
Binary files /dev/null and b/resources/img/mypk/战将.png differ
diff --git a/resources/img/mypk/战渣.png b/resources/img/mypk/战渣.png
new file mode 100644
index 0000000..074a839
Binary files /dev/null and b/resources/img/mypk/战渣.png differ
diff --git a/resources/img/mypk/战狂.png b/resources/img/mypk/战狂.png
new file mode 100644
index 0000000..c5e8f38
Binary files /dev/null and b/resources/img/mypk/战狂.png differ
diff --git a/resources/img/mypk/战王.png b/resources/img/mypk/战王.png
new file mode 100644
index 0000000..1260629
Binary files /dev/null and b/resources/img/mypk/战王.png differ
diff --git a/resources/img/mypk/战神.png b/resources/img/mypk/战神.png
new file mode 100644
index 0000000..b7160ea
Binary files /dev/null and b/resources/img/mypk/战神.png differ
diff --git a/resources/img/other/.keep b/resources/img/other/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/resources/img/other/pking.gif b/resources/img/other/pking.gif
new file mode 100644
index 0000000..3374a21
Binary files /dev/null and b/resources/img/other/pking.gif differ
diff --git a/resources/img/other/原神.png b/resources/img/other/原神.png
new file mode 100644
index 0000000..a8cb922
Binary files /dev/null and b/resources/img/other/原神.png differ
diff --git a/resources/img/rank/.keep b/resources/img/rank/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/resources/img/rank/top.png b/resources/img/rank/top.png
new file mode 100644
index 0000000..6e5df75
Binary files /dev/null and b/resources/img/rank/top.png differ
diff --git a/resources/img/rank/top0.png b/resources/img/rank/top0.png
new file mode 100644
index 0000000..dca85ea
Binary files /dev/null and b/resources/img/rank/top0.png differ
diff --git a/resources/img/rank/top1.png b/resources/img/rank/top1.png
new file mode 100644
index 0000000..ad9d7ce
Binary files /dev/null and b/resources/img/rank/top1.png differ
diff --git a/resources/img/rank/top2.png b/resources/img/rank/top2.png
new file mode 100644
index 0000000..74d879e
Binary files /dev/null and b/resources/img/rank/top2.png differ
diff --git a/test/get-pip.py b/test/get-pip.py
new file mode 100644
index 0000000..3ef3d70
--- /dev/null
+++ b/test/get-pip.py
@@ -0,0 +1,23974 @@
+#!/usr/bin/env python
+#
+# Hi There!
+#
+# You may be wondering what this giant blob of binary data here is, you might
+# even be worried that we're up to something nefarious (good for you for being
+# paranoid!). This is a base85 encoding of a zip file, this zip file contains
+# an entire copy of pip (version 20.3.4).
+#
+# Pip is a thing that installs packages, pip itself is a package that someone
+# might want to install, especially if they're looking to run this get-pip.py
+# script. Pip has a lot of code to deal with the security of installing
+# packages, various edge cases on various platforms, and other such sort of
+# "tribal knowledge" that has been encoded in its code base. Because of this
+# we basically include an entire copy of pip inside this blob. We do this
+# because the alternatives are attempt to implement a "minipip" that probably
+# doesn't do things correctly and has weird edge cases, or compress pip itself
+# down into a single file.
+#
+# If you're wondering how this is created, it is generated using
+# `scripts/generate.py` in https://github.com/pypa/get-pip.
+
+import os.path
+import pkgutil
+import shutil
+import sys
+import struct
+import tempfile
+
+# Useful for very coarse version differentiation.
+PY2 = sys.version_info[0] == 2
+PY3 = sys.version_info[0] == 3
+
+if PY3:
+ iterbytes = iter
+else:
+ def iterbytes(buf):
+ return (ord(byte) for byte in buf)
+
+try:
+ from base64 import b85decode
+except ImportError:
+ _b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~")
+
+ def b85decode(b):
+ _b85dec = [None] * 256
+ for i, c in enumerate(iterbytes(_b85alphabet)):
+ _b85dec[c] = i
+
+ padding = (-len(b)) % 5
+ b = b + b'~' * padding
+ out = []
+ packI = struct.Struct('!I').pack
+ for i in range(0, len(b), 5):
+ chunk = b[i:i + 5]
+ acc = 0
+ try:
+ for c in iterbytes(chunk):
+ acc = acc * 85 + _b85dec[c]
+ except TypeError:
+ for j, c in enumerate(iterbytes(chunk)):
+ if _b85dec[c] is None:
+ raise ValueError(
+ 'bad base85 character at position %d' % (i + j)
+ )
+ raise
+ try:
+ out.append(packI(acc))
+ except struct.error:
+ raise ValueError('base85 overflow in hunk starting at byte %d'
+ % i)
+
+ result = b''.join(out)
+ if padding:
+ result = result[:-padding]
+ return result
+
+
+def bootstrap(tmpdir=None):
+ # Import pip so we can use it to install pip and maybe setuptools too
+ from pip._internal.cli.main import main as pip_entry_point
+ from pip._internal.commands.install import InstallCommand
+ from pip._internal.req.constructors import install_req_from_line
+
+ # Wrapper to provide default certificate with the lowest priority
+ # Due to pip._internal.commands.commands_dict structure, a monkeypatch
+ # seems the simplest workaround.
+ install_parse_args = InstallCommand.parse_args
+
+ def cert_parse_args(self, args):
+ # If cert isn't specified in config or environment, we provide our
+ # own certificate through defaults.
+ # This allows user to specify custom cert anywhere one likes:
+ # config, environment variable or argv.
+ if not self.parser.get_default_values().cert:
+ self.parser.defaults["cert"] = cert_path # calculated below
+ return install_parse_args(self, args)
+ InstallCommand.parse_args = cert_parse_args
+
+ implicit_pip = True
+ implicit_setuptools = True
+ implicit_wheel = True
+
+ # Check if the user has requested us not to install setuptools
+ if "--no-setuptools" in sys.argv or os.environ.get("PIP_NO_SETUPTOOLS"):
+ args = [x for x in sys.argv[1:] if x != "--no-setuptools"]
+ implicit_setuptools = False
+ else:
+ args = sys.argv[1:]
+
+ # Check if the user has requested us not to install wheel
+ if "--no-wheel" in args or os.environ.get("PIP_NO_WHEEL"):
+ args = [x for x in args if x != "--no-wheel"]
+ implicit_wheel = False
+
+ # We only want to implicitly install setuptools and wheel if they don't
+ # already exist on the target platform.
+ if implicit_setuptools:
+ try:
+ import setuptools # noqa
+ implicit_setuptools = False
+ except ImportError:
+ pass
+ if implicit_wheel:
+ try:
+ import wheel # noqa
+ implicit_wheel = False
+ except ImportError:
+ pass
+
+ # We want to support people passing things like 'pip<8' to get-pip.py which
+ # will let them install a specific version. However because of the dreaded
+ # DoubleRequirement error if any of the args look like they might be a
+ # specific for one of our packages, then we'll turn off the implicit
+ # install of them.
+ for arg in args:
+ try:
+ req = install_req_from_line(arg)
+ except Exception:
+ continue
+
+ if implicit_pip and req.name == "pip":
+ implicit_pip = False
+ elif implicit_setuptools and req.name == "setuptools":
+ implicit_setuptools = False
+ elif implicit_wheel and req.name == "wheel":
+ implicit_wheel = False
+
+ # Add any implicit installations to the end of our args
+ if implicit_pip:
+ args += ["pip<21.0"]
+ if implicit_setuptools:
+ args += ["setuptools<45"]
+ if implicit_wheel:
+ args += ["wheel"]
+
+ # Add our default arguments
+ args = ["install", "--upgrade", "--force-reinstall"] + args
+
+ delete_tmpdir = False
+ try:
+ # Create a temporary directory to act as a working directory if we were
+ # not given one.
+ if tmpdir is None:
+ tmpdir = tempfile.mkdtemp()
+ delete_tmpdir = True
+
+ # We need to extract the SSL certificates from requests so that they
+ # can be passed to --cert
+ cert_path = os.path.join(tmpdir, "cacert.pem")
+ with open(cert_path, "wb") as cert:
+ cert.write(pkgutil.get_data("pip._vendor.certifi", "cacert.pem"))
+
+ # Execute the included pip and use it to install the latest pip and
+ # setuptools from PyPI
+ sys.exit(pip_entry_point(args))
+ finally:
+ # Remove our temporary directory
+ if delete_tmpdir and tmpdir:
+ shutil.rmtree(tmpdir, ignore_errors=True)
+
+
+def main():
+ tmpdir = None
+ try:
+ # Create a temporary working directory
+ tmpdir = tempfile.mkdtemp()
+
+ # Unpack the zipfile into the temporary directory
+ pip_zip = os.path.join(tmpdir, "pip.zip")
+ with open(pip_zip, "wb") as fp:
+ fp.write(b85decode(DATA.replace(b"\n", b"")))
+
+ # Add the zipfile to sys.path so that we can import it
+ sys.path.insert(0, pip_zip)
+
+ # Run the bootstrap
+ bootstrap(tmpdir=tmpdir)
+ finally:
+ # Clean up our temporary working directory
+ if tmpdir:
+ shutil.rmtree(tmpdir, ignore_errors=True)
+
+
+DATA = b"""
+P)h>@6aWAK2mlUeH&TV5jz=Q_0074U000jF003}la4%n9X>MtBUtcb8d2NtyOT#b_hu`N@9QB18%v5x
+s4kpO(&rrJ|`eKX`vh}(J+9c$zj(&U7jVi)I-sG3#xx1$bt^#koRK_v}t4mq4DM@nUjopH&ybBEPi}^
+xLULGf}>fj-c03mMwHi99FA7T--xk;ZT?)$>+`x#H%fIi^0Qu3eJ`dRH!XO;R4izux?rb=LBwVVdE^h5
+`i|scqS#v!TyE^NqzAHP)h>@6aWAK2mlUeH&SQ_4?Nfb0055z000jF003}la4%n9ZDDC{Utcb
+8d0kS$j+`(Iz4H~8<^WVIJLgqrr5<}-^;T6;8q5#@Ng9Wt^y_P9ptD;}#IfIdelLCWGbq(BX^E&5*g5
+!^K>s8^EeX~AToilV)A2_e6~zhOaP~KZvIOlqFiVW+60AOs)?J~q5l!-OgI;*jfY94W3Aib4Jnnk|YJ
+*Ng1Ga|{kpv)l&^K>8SV(XV+<$mHY8?a{!1#G)Y63H$85<@-{DTbUDCucxV6x07;%M+|!-MO9j<0Wi#
+11q;*wWw~Jk1&J^A7l0*oU_7=O4mXm1V;gv{y`K?W($dDS*GDs|`L>=UQy}+QW*VBSKu9lNGW7TF8+_
+>8{Ie!4j}^zf$g5NMG?#$r7JFwd*iFi`ae1M^!{C6|@<7hU2_kIGVf4lf-PN95Q{xc~)x
+H)+yD7ZSTFu#C|(HBN!o}6m1}htb9MfmJk{*1|JR5!La3y^@g-eNlcIpg@K#xukcX$%OtzJ!59<8S&nG(}iY
+;;Zg+|Wh1kV4`#XSvS-lI5dD<2OBf7?{$GQX$dFHlPZ1QY-O00;mMXE#z}dd^oV0RRB+0RR9Q0001RX
+>c!JX>N37a&BR4FJE72ZfSI1UoLQYZBb22!$1(d@2?ozOA9r*2x>tu#V^zP)IUzitKEiv`V!k<|@9{>Ov0001RX>c!JX>N37a&BR4FJg6RY-C?$ZgwtkdF5H%
+bKAHPf7f4uIu9hLB&X@4rs~YaaW0;wwkLM3lhJ566bZ>VQv?f8l64vX@7=`*36PYN>%FylkqGWC_T#s
+U#p>eX;@zHACAq2(Oz?U~>z3>#Ey;!p!X&TqmhqaDd%@~0ktLHYStAEL&Mq!4W;3>HxM)emw_98@k6h
+Yc^3?ro>2rG&c{AGxz9R*%Dq5g;NescQD5;?3dseiX2KU>ytdc2+DR{kMTT8p8ZPuLHM_y+YTWj)ZqP
+%^SGfmL2Ce04CF1bjXr)?&v8ECb!HZ)c#IqN>qc-;xZ^AGs>=H1^QZzJnM?v)QbuatK0pC+LPf&-KP7-2e_)&DtyrC9O6wLG(r1di=am=FdqeTM?1u@8pKpw0nyzDR
+RK>_~pNlwB0xG=0je|0neJ%Dzu9p@nJ`SpP+670+Hb|MH9$kp_eF#B0<9?d(IkVN)UUDhg`_Tw_u%18
+qAeaG0;OeRb6+=ddSzmg3k;Vp>$sgnzxXNd0moSUPA`pZ&UQ)1fb550O4V^Y@yWX>JL
+b7q!n}q`%|bNL%yp@3%?-w@WrCE@G4aL?#uP3_u19WFEQCxd=09dGHphw0@Gu1=I4sRIYs|D2Tthk7-
+E{lHors28w_yzD`$0Rbxw6UAY~Lq9y=bND$!U?!l342msbH~4nI&)<)@&hjz;>KWLEKA_0GfEw}i5>8
+j!nic$FM=(zc^kf`Te=(uWlghQ4RgLtgEv48f`i{B;VZc>{-58EQ6LgrW%!t78fsfWu*z9T&VImwVar
+9s7+E$yy4~b8(aaEG1x`qzzO_JaGZE@CXUYA&?$rgC+ua^Fp1MfMKXN5IZf`oCUJ?rh1v-OZ4S8&kP%
+XjAQ|oFGR9Pxl~ERFnbL6`F{P0;@`)Fz#j1Q?tU2n0~Ir=^%{Hwqzk;#Rr9uEq0fL18TujzumIZK6D$
+v@I-(2t+sd@0B^J7oOM@U7t#y5BtO6LTK6OO(hI
+{~cLXS}j-WY@=8X-`3Rhd+WQ##`0f4Wki_N?;TPX#3{E^
+-tnuKBC4CzD@J8#BYp`j<~be!udVk(Cp!AHMz|wJN(1&oDH2nDg?&RVbO$_#xke;yqw%wy>z!9u}-q-
+rfI@Fl_lDW&PgK)V-u{=n3W?1CIEO(p+zcV0#U?<2-+uoLNYpmx;MH!V(;7)NL3%r?ZEAm?8ifut;lB
+)1+4{zyg}QCVfiNwVv9?y*6w5DRif4ItDm`
+5^i-GvlwU9?5RZdfRjQbchCd+ATj7MJW`1sR|+TO4R6A3yK#z)?>IjH((taZUfPZOU=@$Fc*;aSwUOr
+D4NG#$C3cpeT4UuLH9lD0({`zU!3*dH;O$Dy7ZhP161eYthI_cE$zSn2l)ml>Da^14OR%ff9H|N4kkD
+MDDAe?04&|wgl(MA7-Q_^sj!Ah|6tcOBb-yjwu#s?;8@^*&o^Q_)kNtk?6%I=6sMvu7eYY42!cQws(`
+O27eUvEA{VK8QZU{iW5zO4~L6f`&n+JRZE3-$5Lh3$2<(hE_)~^;PAGvHDxvkj4J)+ET`8%QwX@aC69KTlHk!eIin(||Yg&Fcu(27D
+oHzm4v0ni0glJt<=VE=m(fHJXJGCM;yd}FM0OWnkr#{Lr(no6!FFlNoyYViM4h?~TgbYZ^xKTK};Z8I
+884;T6&^-oZj6W*x#OQJdpm6d8JjiDWKTE0ItlWsuKKX!>6N%)_>QTWytfc|>l{MX+4ziDwq&LqYE#;
+$kJ`J-~Qyb^*7=*s^CP)h>@6aWAK2mlUeH&O*KS42Jx007x9000&M003}la4%nJZggdGZeeUMV_{=xW
+iD`e?Hc`$+qU(0{}r5qA@ZQ;x##|sxFHNu{Es`sO;&2dXiME-@qDo4+xJCc>z4s`Iq%5B=UAv-N
+{llG2@;$!qFDZ(mCp_N@_L5h8BX*){W>FN)W^z|6-LNe;+fuIjpYM#S`tPOMY-F|Re=0MZt+m>*TGna
+yK~#m(Y0dNZ98aYU-x$^%l~p5jtp)teD!vm*u<}7@BjK7`khP602W&a7R3&p>${z%w^XVYO6)#iqF&A
+|Mcn7%W)dzqn-fo2`pUP4Y=mg|W6{0k0DXaHA=nMFM%h4M|*`Fo+Q-_I(v=O^HE2Qp^U&8M%r51Uk^g
+dy@4ZGQUSrz6MEc+Vd(&Kpf-8bK5Po7;o`B(P(+gGoizxwJpWUHMdYu;?LMrE)D2C$yMvzRgX5VG*f#
+}yF!rOcZIgk#|E*CcFSChU!9W)AGMbzJhz`21MFYo&L*$#PXSS`CtZN~=%o;%tWYDKuO5hMI0f^Mcmm
+jO--K=Cj$X5Nnp9nS&PcCNAcd$9u@2Sg;tGx-yMU82q`Ovj?B!7diuu@>(>lt{8_kzA6PXTYi52kf}8
++AwHCW-lynN2w{L6^r5t9ceRNNKnj#+@5SCMFLeu^U_{L|2j!b(93@f0qD3@Mn5ayvMaE4oC7qlTK5e
+h>yfn49$0ik34w8x^Iv>sF=~jF!LByB5j_c+8iXUpa23QxHZk}}IS#a^(%#$=_~@Ojcio0H$?Y6ocKN|v(OT
+P&(9Am$Q;NqvfD9t&>;yWv%XPP-A6fN&?kMHr+VTxt#c0>WGEZcf+@gdJ7gZ+b`%-8)I7KJ?b%x*Xk=uT+a7RK|00Aj>KYOy&yJgt;_BDZt^
+Z$LrJr36)M!uEG4nq#?IKQ>ROZZGUGG#FXLEl-D(6(KuR0q{jFvM4mWo*YkNmG|G9&qI(_SfO78Z=z=
+l`X#q8lFr;9cVo)FV%aU1y6u=DPA#x|lqLE!>Bj@l3Y{gSIN
+)mi!IZn2nMEjIG&b5dxwp6u;t%O5m0Dpt@qTyPD*KLKuLrBxE
+f|Gy`FY~ZHed8D%Y}#^swK%^{I_|H|7Z2T!hl@w<$D_sdwd1y{O9<78aQEBAx&NE!^kW3XM+UpcrEth6`M{Xp3<#F2kG8W2z7@Rj?#%F7nwn%8hL8!mVJ9RvX6a3?GH*0rIii9yl6c`8
+VMwXilN%ksfWpc0`FEWl8WwZl~_p)}+}lxY~XhJO4J7{$@gmDPB?2h~)=?XU#(kO6n9(|XV3P|KosSI
+NjOtWnrVGzx^oN06_v=Sn>U+oq|_;_Pe#9JQ+y4xiQgnx8?=Ka<8ld3yHu^M5=#w6Lpa+|ZLk#*6X%6
+lllv0d%(>|B;~Xl%TwBb~?BJk%_uY1fB=ItMGGB;^s-2oln@I(y`n`V*!_-9#?yppa4?_5z?kS;3E!#
+8OF|052W^w|>pD>9zeicSV=>uJ@a
+P&YA(p;U>Jd(ga)-7g{Ub=bOn3f6h(*yl^N}D9PaP$d(y}D*#d2RMiBP>Zg+Jypt$)21CKi`}DNG@
+Z*T@!-;>YpYMhxxoK-0#eyeeb&>c;Avj+0jXgRgu{2G)FzQ`DNX%ev#0fk|i~Ev7^M#x)K4R6C*c$o<
+C8IkySn#+pMif6+sNLA~jl?|~>)Qz`{q+W@UA+kDj;cL7BVD&Z4*HCNqM_^xub(yPyW3#z*f?)Y{lR2
+!6wHr~8-F~Ujos!i|AB+{WdH@WTSsPLVDm?Hhh1M6UHld?4v!`*vI>k6_7}g3`Y#6r&x$C=58z*PHEl
+!n7Pf*f{lmQ4Gwj-^BcUF(o8$Yp4al&eA-e@^;8j&Z9R>WrzM(R0+4a_r&KumrjD*Eu>q$~Ku_C
+?k4$PhV4n8PPjbq8>u6^<*%jYnl9BDR|htJsKpf~b+2dleIAoe
+>w-mU^089J|ksM{Jamt{gm8ofU(H?4~-?ZfxjQ8W)u+IIpbUj&$_U?H@~sujV8ZLUV5q3cq*j{RwQgq
+_0+?DOih5UX|*AMD~MdcLWkZ-!XlX9o6X8}8vB_&?M_(KK+OgdNyH8YeFoAb=WTIUvFapyjGXo27XeU
+`wN95|OW8tFXWc4q)bY79|pAg*W&~9D2+|XK{~xLBW(Vo;PW;gS0cQ^X-{v^1Bgn*rpu7O{*p#8%n7{
+e9U$ji$d~GO7xa}jAbW;J3j~jj-flaf0i6^-X+dNUBhM$dNd45vG@8&90X)XzlVQ5cO~^j4K;^XQICs
+MzqlUn*^HiRK~YdP_aRB&RP^GE(omm{-dWh6EWA%w+ouX`igUw@JjUegvhBbMsgmUkD>bNCY0YZl604~W5T{%=S
+Z_4X#kvJOf|TF~xD|xn#4Gg#-r7ZYGGW3-H8(WCP(yKP{kMM(vsNwEm$qCoM4u1N)>511H|slpiH@^>
+pT_SvL(8?{rJuJRbn3@>8{r}04|vAmX$<@8jHPU3J>cuqSnrqZQ14E~)b&=3zbp}+YVJhD@4UW8gB2K
+B{i&|E98Z*BBQi$M0vtvN9ET5Y{mNjp=E0_}a_E)q6ZJcj`GDAEvfwoXH-mHs`lo@Xr;`4|8kBcR9k>
+lHog$#H%5D8(TXMp2!%Y~}z1-E~gH%EeAv7J;Gc@WWPd@CzmZYj+*;mW*c*!5CV>!~!MC
+1mRJLE4Px#_=d@{7-QFl$U12G6GTd{Wnlc0|XQR000O84rez~r#;P*J`ex^P
+&NPn9smFUaA|NaUukZ1WpZv|Y%gPPZf0p`b#h^JX>V>WaCyyJZExE+68`RA!BtUM#yaYDZ*jN{kh{w^
+ZZ~M^1W8}E$QfG2qGN7kNg(AUz99G8Z)QkJq$E4-?jCSP(b^I@9M0=ALpBJ4S4F-M*K3(nqR81Q$&+i
+o;(5gsuh!*Ya8ax{tGHZ=yvT~{&HiAI<;jW<7&}z#PKv7HITJaX6Ct(`8CMYux=pe*j{1oIvP7w3E|Q
+9;>`qimmS`e-?1pb(&=h_Eh1HeF?Fdl~6)-U;zC!aQ!dWAtE=7`8$OTg(zs@+jD`d)2uI5qznQL~pJV4BdoYb%&{^NlFf1Hg)CNsAP5Enu__B$v8j(=OQ%Kk6F(`El&9mtsBfKh
+C9-;nq%2b*)z)zlD5Oj(JN(n}^yu`{#hCH?GRf05?q%!Ll~8j#k>_eHc?@g8+r3EHD<@KP;!;=F*^|oeoy(``%MWyPf6}cHfHbFC8(
+TeohNr%#Al>4cHpTnYQJXB*u@eST!LI^{#%i!Fv%N@tf)C`Q!*D2De-)U>|4)OP-Zrz|YuwF!>u;P_bg++rC0~0H;VKj
+|O_k0jWe=+lPzE`9Xk+1$yT5jD5fzUX*+;7Gh50-khBNba-+QTxZ2qlIgJ^fsLy8ihU9(r%@Nj?&p7=!IX^!>n#8B)N0W1q0m&lL`x={HC=L4^_hP@pdd^o|dhqe^y$Il@<@e(oWxgP5iy8rr$8`bT*8l;N;kaUG<59c*paSYKhNL@i11@^-F4awmx->|f
+RynvHIo>c-A(gKq$L>9`9Hse7gK@~9Uv(E=
+@?(i^QG%S6D`Zkh?bos8O2j8vJ4Dg-%<*~^iUDHw0;g`1ebK-d;5$rPjVC5FXuBVH|Ey$wT2lK@Fx)+
+`q)f~>TRek(*C;W{|rat`USDoO$ZS_Zbr41*Do{^IlucN4y<612S+er04oKf&JLXwj72=uq}))q->1oOYbeIS
+eRkOv_^dq+BPopQ%5~h{rkVN(Mmf*G#eL%ri>u$j!;DEnVEP$^j~3=2-*(oFv{9VN;udn70@q}OTNV(
+v(D{=29NYw92Rbbg!XG~BG`N^3y8Irl_BKpPwkm%b`sCH&&XF}s9a8u
+14PYOuFk;0}E=XFO3Gl%`e$F12EYXpba`o}tasq)PPuffzEYAQ6f=U>u`ly%UQ2069e!$52pYi!qEYG
+L+C55=N57m_ZJvMb4c>Q-`gqqR1M!NU>{1p$sR~!_~S3PxfpMa33r-it4pTgL*i)cfB(5j)?*3(cYRj
+CfT%bM#JRJQ0|Q)iM%0lU?w6p#)6t{mfK@$i3J4%xPi=oM?5?RHiLBN5luj#IT}hka%1bF
+;4+F?c8}CVrs}~SU;z9t7AN6bc*XsalPcKf`BRtDXLA=j4?9l-93U|S+)Jhi9loaFCTeMxyG6h6O=C3
+;CG@K(T{O!kokhf1uMB}1u2afwA@fE+LBN(WL%qYbopJgY26oL$B?P+DVX(ABU7n`4NzjGc1zec16*V
+E?cI^K-!D=u6HpVS;3tt@X~ZzvK{Cs6^Q4@NdN4Jyr?ugU1!a+m@|@X#q)ezQnCTB69K$?$r^6>WX5l_qIhMq~qS$@{UZe7E
+K@Q=ogF@fN5|olUp9wzT{^4UT15H6vRYhR@zq6F6Z!&gPGwtZ96*6HU2Qga;NA;i4MFe&zO+~3c%2}F
+st8;4KK)n>5eTE6`Q4P-*)6Ph95IHNz=~YLC-kQcIfTL>Uz*phUW6pm-UP+6GULU((a5^B5z{g*=D!U
+Q;1`6>%7P2cDY~M&ORW4-DdWuTNmgCJ;@-*T{8MJ9rXXeu6qnL++m@;s1{A%%#j>h`myf1`KCDPF>l?
+5)uY*6qPL=Hq)}(|mt%Lbq}PB}Gsud%d9J%o>{6r$FJ}=ugYpcBK~kb7KY$^2wZ4vm4ylgozjx}kRkE
+R!zA6DxB#TN{itdJbH{(YFn~I-^0Ya&Gz{k4=nA!Y#3NDw=+&+h@oD_^b65l(1(NbsFH$
+(m}5ECJJ^(hArI2g6VS5>nxk~1|DtG-G$Q!sVWTdew
+H#~>=I^(T&^VmN^+AB+g+6e_n+!HOSW84C2y=g}efn43gk&Cib1ViM!ZoY8>01>@Uv&XRZ&>r1i^n)=xFcbNj4?1sK5Rs!u=;kq~
+2R6YvN)zZ!!uQOQ3g(xW@-=$#-l8oAMf%wwZLyNnf_@J9|ww!47)3zj(*G{-Y1&kr3K#GAHzV<$R9CX
+&N>9xd(2fvkE&n<2b+rmU=u(%OSx~|yhNyl}_pMZETM(n|St@!H)=lWPXMc}U*Tux+1-C%7m;nYg$>`
+v=ut4f|yMlHNuH%6Q$V-qE`i|X1+A8n;YKCI|W1t?0cl_%iIx?*$qUGe&CMU$#4_RU?g8DlhE7Flyh5
+;;SU3Z2qnQ9*{jSZCN5&l}L9&y|u}>(6T3G|q`Nhg@#DgS9vT5t+Ta8OEYV4Kl;Fl=0JPHZ@X>PzGVk
+TJd9AO&@YGFH(NQ@$a6dlV+n2GntPv>me{g5~hbkypp5qr
+e!SvH9op*{bj^8VY8zhB<8_yPSrdeY_l`}KbgMsqL0+}2l)oSFUYD(^l~9pieUVLRXj`>^7^EfBD|Vm
+L5|5REk4OwGm?KF5zO!IE?V!%1-_j+cZ~HH9dGnez
+ohE172bw|tS%POQUwvlMT-q^$uxBO-5YJ(J1^d?beF1?u(gPvjiu#?tNkg#Sl_ko|_ViI?kU9*7en_q
+xo$i&ffJpZAolM^lhF|`$KeKny`am>|G`-W#1%_N6LML7$Pirn!L5(R+T{xjWMKzUG2JML;Cg=VIEi!IfNh-qs(ucsDsY*=O&H+xniiuK
+R()y3$x2mRhWHqU4_J_l8-vv`snGsBx=OrC^d$(A4}e2+Gi%F_ouifP5C~*r5zAkh-TwgeI|8oPX9Sl}Vkpk*sSNfcVzn=0)B(F5%2a_{BrcVy4*A
+(2zj*L|67;I?HKUGPu$c&yo>J>fO))-jZ$((Z8YBzE_4PX8F&Y3h)65q^xFdvnimt3TMA{*LT}hsW^Y
+8~He@%TUckO!rmeII{mSVcfa>F&g|AP)h>@6aWAK2mlUeH&Pz#fx*%b007G}000{R003}la4%nJZggd
+GZeeUMWq4y{aCB*JZgVbhdDU9qbK5o&e)nI2QywJENbL3JgKm5?j$_B3#*WW%(&?lb86qJGHAScZXddaV#zm~HK`*(NK;;%}W(j+UDiAGnK_U93NF>5f3=f-k
+wceVlHx6PzdRm|mL&9xD_y_j0HFfaTcelR7^bKm#WKH~JG7AsLWb%2Ip0#>E9#3eV&T+V#o=?Oej3s|
+UlqAfl%Zd|9my)@^>unW09(pu?3?XW{D2i)@|Hv$*Ignvgq>v|s2qAShug_YrjH6mV%LTH{h5|}KUx?
+Imtq|?P0O3W%vz7}*2g}yK3w}`EZU4qY5A^}7(2Yo+ie|QaW0jL82b)_r8Kt#}K
+A<8E@;p*7{hGIspWX^TI!3o=i*NYh@wI=9GCguQlvXJF;Ixr%ik61>C;0K!)d?kjBE5AS}5fe5D7dm3
+_eaOcDrdiZ&y}t1?f!)YgBz(dSScjUDcH3wQ6Lz%}48Jio2lN(=S!M#wXALQ`S_*y!DKFstPTLNX&dH
+)85}YdAry0jDqIp4!=s8p?EYWGTOM#>>XcD}65Br4$%u@hQXe&Y&n-Hud
+&xkkwuzU8KB`xX=q!37p%B7Q!Z}=$-NcYpz6_Ia%Dv{y0AXQ29YlNhN}p2Wf<8<|$6X{8OrSVdkOj%?T*#sH%gA_-^l65{3uYrunC3!ZJ<;3DgQyl`~dHwyf^T8~RL1{*Z
+40NaXtF2tl^+={lr&&!YJ!LviPT7eHeG3>3>WyNz*+~W4*5OAm$j)Ep2{l}q<-tPkO){3;9Zs9aa0gd
+{PQFDyzMMc^SN4U`9R;tRptYn_OlKR<0^$lvt^`^*~1CK(}%}^A$m6zZDU6+H&l)L^yAqEX-2zpQ7;@7oiph5k;ZUSs>5D(*gkw6Y7jStZ{K8lAQh~>O2^+4BZ?7Qau
+VW9MmIY)yhTPvv6LJzuCZ1HlK)SeIx)8P=cFATpSIJuAjKMi8_4gIB`+*~3
+jsKXvf%oRZsNSB2b`~Mrh=Qg;IFQH)A68I;6L1V!i`WwHZ@!=Ky{dT|ZI
+rsy$0K>880k|v1Eu5$ph=Je%yJ^EtrEc4llxM(FA3rsXv1atKp3kRd6uw?VP8?E`uA%ClkB*r*VO
+GpHcn6X|yMoSP3}|a`BR2avU(GVkK!!+^&V+9A57cX#8@DDiRr6_zm8`;-`hu7UtwKrDDOr0uZP5Xmm
+0u$WOO`;khaF9TrjZ(wnaVb>I-Cmzfp{)WPhd9GF&@rsk^Ub=KlxM1VnA(%?Jd;rhl(y#@wd?GDP_-;
+%G-kQw@@jO0rBP62qk&pv^qA^V|$7I9uQ7ekTk%ifp9A+-}8A7Utn-9*-fGDit$3JjOup6*!fS=TMju
+JddCC;8ty!1>~^DeLAi?N1&%k{P$-cpY-EVi^I%b_g7G(OkgGePT^VD^$@Ks@6af&1Y~TRG6n)5573L
+ri;YEo<)}r_f!L2IRvOosl7Go^^03j65gaA$n+{8efbCrM(hwo|`nLt+*MJn+%=q3}8q#|G@>>!8P+<
+*Y%ax4onv;%k`p%i)rIAcngS|ufc*3iMR^kZCZgU`5PS3g+ie1i+Q6>P1LT|u4!v$N!i}7Lg)p%7N1Dt@Hqay5h06!91(&%8#gigwfl|
+()qudK(S3mjMHYk1-RZ~K)2$0Xq*WN0gX?42JEy5z=4$YH0|ZuLor8x=z!mr!C0diAuLQ-BU>sL3eA4
+#7mTuKeWcm?#cm$PLTmy8x@dXfY$90vXp>Z$cO0n9T!`203PyNd&b{PzVS%n#`hgbX_RL3l!1&gAB*k
+JfSNYwhDAO0xXL!pU09i?az4zx9mukw^_JBCJU??FiSp64#U%AG6lg6=U|rli_WQLSc>Q9WvuI;8~}L
+kyq(fevw4zbYsgcvS7zG3P^SFzf_*XFzQNo=$<`4j>r)PiDfFOu5hX#+VWUlN*~2fX-?>Fn{uA
+0e1pI0S1C42bkoTlPr}LhlAh_fgg;^p+ijgXNVVr-XTXRF8bL3M^ZqQCNh|*v8^7v#g*Mu?f?rQXwX`
+HMbRycqJ@#A(hyoEy|9?;YGvtD~&}7rr=2{`8!079A(^46#{6=gdpo0f&``|J%NrE@e~1}rDbT(aPgNeq$1jjHr^S>E8Qm
+OL!S5X$k@ngUkB2B&ir0QR&cMNtq5*wSBHS-hZ`jj)rjunAeK1wo`GRjIHBWXXj+StvF&jcrLo{>Mo>
+$*@1%SxjE25{MTaOn2e_bI(w9ZgRT-kmg2$eU?D)@2ZT;_U4OP#V%+iZ=j2lkY
+FzY@?eQ)vOHL0(LAUObi>hq!}R!f5NzZ-lREY8Q^oag`X`Q*0m+sEX5W?m^*E?*aap|)mr-cMCVvZB(
+70Q9gq{h3gTCxhT=DooVMmjYlt{hBLQ4A^i&eeqkn;;r*7>BXbogoV=r;%T-5Os(a*f`R{Qa7UUbE4q0zmGX2#tU1
+npY*pvHWl!@R6&2E`w+AXEt9f`1eU6h1jmuca~Cxfq
+qZ^I$sXfJP05t&p49D+m2rcSr2v;PBUj*GKQztGDd@?G-yaxH>#x@Q$I6!tckIZ_
+nuY^5{SBPcM(oj?S;%wJmjg`sOHMF8-21t93?sT&Nvy&k=)!1A)ReY71-VMZ(@9KHf<@Srhksg^5Ne5
+m_jCQVJ{x>&BaZwWWD5TJeo@HDV0joj}?uc_dJSF5tJiy*F-IsIH@*|zPP^}ieefnf?{MldW&e^AD
+MRPY6R&FxrPuB$U1%Pk4T#>uMPC(L1lvxpXGqw@+i`Kmq_aJ0}w*fmygL&>4ZvVE}LQUotc%^_YJuZc
+#YPL#YDziq)QFN}Cz|74We6c-$k9Ec}4D+?rA_n)#c9Pyv4|pCb+uo?0X{uJBR%uib=lJcHUy|b2-|J
+kz5kwXv{nII?xCe~JjTV4dkmw)5rh&~ine4UKb>usmCI8{)Um!_IGx6Mi9#s+m(f2?6_|wnN{ijpdYw
+#@h!2##b{inPBfEFQxfS(pqr3duTx^EYm#WQfaXH2`g)$SOU2~@yFHFW<>q&C3Pjv=V|WenZ5-Bwg)z
+7s^;fSt6YaZKt7kgzHZ*)`Q`4d5JJN-FUdlZhFRb8ed7;A6d>PyQvbnPoQPNzAd2Pz{(%O)P}>|uGk#k_yu$g?9PSyQP;r
+xu(-GTj$Qq!F)J`d0w8QL7@%RBbG8qNI&NZIY#=c&+y%7f-pE)}r{>;angRoGc<$)58C%IdkdhdG>>g
+d_h^{*0Rg*(i<=MF^Uy3)BDh{?ULpRgHg4@YTCL=`+8w%P!=d(iv*RV?GE^v93SX*z~I2L~QuOO5M+g)3p?qFvDFS3iG&CCSTrbW}DTLghXOSH{K7PTa0$6K
+VoeZRwtEIDzfn}?X<!6kcbFu}Yn5{=Rb|+2Ewo@e!Ahm>*ivbht7<7%X2N7;EH6uDY_nWWn6P=0B!
+j^j`>+<+S(a)is}=TdHlni3tW{GMY$2Ey8?_Y$-`+mwao2Q)x-}k&
+wu5m5re@}s}0LCzdOsA+|){2#urAFjTM>y9t^^~GKW!GbGwe8b;&KH+Qe@ot!T%4(;0fX{l$fZ&{md)
+9j`NP4y)OzV<{(!HXyCHFi(f+u
++O-_OZfXKtc1Ou1o2o4tur8t1_u0!AU@v=h`JSCeWv7jSBsqtLGJKB`C?XkyR3VmZC2Y3gU
+zE-^63&xtg*G5O8hgQ_XN|^e`cH~5H%rk=zwZTN$_JyPF?BRppuyDAE#-~Y6xQ$dc8ytRg1cC)R!9Zu
+D)l6PPXC@T9LC`JPf6OlNBet*Umw!155ttAklWES#7r9Qf?b!YE0fWAR%@}8_um%<@-{%V-&;#xmjeCqa=I(P*TlV()LTjb_6wlaYML{Eaw%aLvM=n|ff7`P)?6?r3f^jOoL5_wb$P
+2=XqR%1pBkrXg^=6%QL-vP+Y_A%|Q9i`I$PpvB2~O&RBj*+Lf~r!juyH|0V5v0e(Szwd^UjFy#{BIy`
+wQ!Y_rXq4(Y02!(B&QypcHHa-)GF5g6fT36DOs-6KqDBomn-jofpp*vYMr7*E^&3QCR4AbTG}>g{|`d
+Rw!YrA*`I|5W_kL*b;xGtnQ#itJtbk3tqbVGOc-j$5#mM0exoi6UJ@}2AMf?HzqYITqzgH_~7j^f!x6
+1Z+*#yaFT47b0h`|QqC65iahe&{@s3PIwcCJzA43o86j|VZEbDlGstciO@1eAs`Ls9srUY$G^P<|_Se
+7t^vkTJG4<*(Q(5IollM%CSp#|``vwJzQSeeogVU7KY%H~@S2mUCQV=w7TSns)fI(;k^7%PS=<3A#@U
+f1bD6d{yo-9-~8V}l-I%6N953EzZBvLIUNr}v>4Hh+EWI|~Sjv^`pof|BpXdz$%p)D^PLEB{|t>mRNF
+m3cV?=>zd(=B96{G?A@4DLdxzOYD`3&535#6F_n3c&T{hYMG$LhbZ>;jWPSySeK+*Rr-IqzO7e7aSjH
+FMV|43|=J5LN%5+Gi(SFLxzO^Nmhm0K}SmcE9P8^zepF^!B{i$EOv745AaM^jC%+EjAwu1ke&apOMd)
+ci}{TA7)nL*#
+eTu3grC2|TV!kpcj?Gg~PTFH!eSxDa7C^IvW$iiY4}NA@DDa*+OJ{yePDuJ;CYsl9plgq?Qr>nOgfWVBf4qv!9M&OXcIWR+kV`L
+$wV!1?>qQdByaq){aw-NX!Q1dYdKtfQ7A~0MXy5XWBfXkK=+K~ShneR%Y?f^0hfzA5~8s=f){28=(a5
+9#c5Zf0OVh!-8!T^ACYom_DQ*ze3BHc^hwDyB*>^=K
+M{SltM!B5%CyC>A+kC%VcDS-<>A5PiSDdIA|eZ-{mOrXKpI~@9~C4v%Q-DAs
+0rXnR6V)>nL*d!N)sB-9IORlL<4+17+vEe*(=n6CAlp&O;X34b67^3VMFL!)zo)KS+FRh49|5$bZpcf
+xi0Y&dP;4E09t2MlpIToew0b3t9a}F);sfCr+f$#qSG+NRFoZT_MQWQE1fFR~Y4KGR2iH03^honBAQ9
+Ms*adUgfDC1*$rA=KR!;IXvpq%rb1}0HM{poQqR+kKH1ri`zH^DxSbA?MrkRCI=Q#sFOoo6rLscHt?0;TU}5VfA9sF_S|zWmBtB3T=pveSkwA!B?O>b}eOl!I&vzXoqsO;(u+m9
+N$4?|_nmVL({TTE7CS0S#60eJdxvtLCswx7~rBzwg=mUTqpdX|Ule(wgwoZEms=R5NI_i$L$QmZbyA}
+7oJEm{G<+9|9QUsG2&u?re*G}YZo?d?5xoE}U%cem0gK4OKIjO
+2rJXoc{jGP+|Wzd$d@oY8o~`u%mp;{M$o^M;{)i^yybmYV^d?%g67pq{qB|IZ_wgfjmf0TwN9R<7BfObpx?ruThc!JX>N37a&BR4FKuCIZZ2?nZIDk(!$1(l@B
+1l+dTF617eOuPrT7muir7ObC2W&PGLY;pGZQ7>-fc=1q01hY$IN?ge---<0)-?er^wE>Nw3sOqC+581
+9ic(!t45doi88nme2XeD$Aa-2VcO%N%?F`OuAvPTcCzHu%Ljv&zMnV3<5-QK&+Y$=z#J31iFa;IR#%jzPK;rjW*dZ`h$moh#a<}-8~^|s0001RX>c!JX>N37a&BR4FK~Hqa&
+Ky7V{|TXdDU5MkK4Er{=UD0RX$h-Y#}|gXt0222SMvSf1K>drF0HoEDpDBbU?EB{>T@J*ZW%^c0u2Gvx$X+&kERwn3C
+d@pL-w~e@RGOcWj@*q^LyC7ra(}G#OZ_Xr&mRApaE7i8>#D9C)iM>#EP=2Ehypi>X@zsJwKjIywvZ7P
+GDa2DH+Qh^gWh`$Rjt}2I&%uGe4YPR%RSA+A{ti|1_lJzHzt(3?&`4i(Gk2Y#fH=$
+onpu3s=zIA>hdg9P}UM^e&?{Q~n*z@A`diCdXD+hDTb9g~WoCA5C-P2KYcQMSjn(_bL@Wy|d@?-gcF)
+TPmVSBbKQlvGxC$5SU@A94czrx&=It)RFH{8oI?Qe9TIV6$Q00t;vcHaYdTN4wMNJFINkU|pM??wgt^
+ZP{9|Udc+=f`lPu=<)66?=UoR(9i@I4lAB41;g7PnM!sFh3azXgkmc!ZV6v4Rv|oxK<0CAna>d}g7E#
+=%clNFl0OT}p~OJp*fRO-Twu0fccf|NI|84~))*jF9ol-MbVeYa`i^Ljyjxu*JkHu(?G4(l@6?Q4|Fg#jyE#7@R3tmc0XanB57MRszEu6fWksyn
+`*Fkk;;9-X*_5yaQ+3nj~h613s5(dg*`*-$UD={cZK6}Acq-MvBnpq~E+D2B=Hb-V!Q
+OS)IbupGu5=yY-ovsLnnBF+2-0PW{a&J%*0{%?}BvgPglfvP?VKZX$-?@@%tgrL!`jo9+)$grK5>pu;TyGIG{IdhXFXvq@`k_q7;Jc-#Nkq(}QB>Qe
+zTvj>SN-f4XL`1sT0mZ^MP+%Bjbo(qaeM`=*v5uKg2ia*wBPtdeaE%;?TGC-o&{}7p^DOtjmMA%2obA
+^MoM#7tI-)XQoz`|NzjWE`o~gulmMer7rGTHKgE`SpR
+265o8_AfrWfS)I`Ow{UH7brLllT_`DQ+dP|QmQ#|YO>8euxm=-tx2%iI#t7;$}RF?GMkDr}bx5FY)A{
+ZMfu4BPj{QYHJU@}mC{zGQHYM#!@kxKwGiq<+BZv*ED+5#ChXbp*E#Spq@^e2IW%M6Bgf=_R~gx(y0O
+Rsu=t1$zyl^GbBvY6Id>9RI-mzov>H*9I4AEsXc!fT$OsJ6$rCc;wWIed>DQD;
+fMv3K+fgHSh5w!wAPR|9`;>W7R;Q9KHsm1a$xUJhc?7Dj5w~0iC($_S{7L#PPX1iQoO%iusF^eiaxB*}7h0;tyih6pgq-kD(+X=sVhhm$)!)IQ
+H!)mkv0)?Uj-dw7E&+SJ;PW$gHTCdn!=~5ge@jU)CB9&(GxQcWbcjjIo{w9iG$q5Al6)wks%}^OqMQW
+nLL8xEGgCr8War1$%4b~Gj8CS<)@z8v}Egc)hG)F2RhyC8sJ%Tn16Tl2B-OST4Nvj6N6qqCSJ>ZBSb{
+(m)9j~Q3A$aaIl3ej5s@`plP2!0hR+(s$6EIlA4sbN^oH??G>@ahD*7d0o6IUS|uIkww{kO5sjG2JmlOT(~XaK*O)g(v@{tW}|}V3tiybXc5rHqh+W~la<`tu@Uymuw!%)L?)NA(wm@Zj7#_#K6T;C6G2Rn(SfKmuE+dWzPcMM@q8IsojJqIuQcd6Mq?
+|Z_V+tpv#*`tMyuy6T*5e`K2nH|0qzpdEU`0eecT{A+Zpx%WOE#}0ky`$r4<)B!iy$-8lEs|eOy-I0J
+>n#uhj%ikYO&(Vz*`|eoYMeM7|gWYVhG-4J^cBbHqK(jmZ
+qZD*`fyUK6GAb>`aT{orx$=hYW~O3pAL9>W;%`j$+4F*aWQFW#P{IYnT#C=)?elBJN5Xy3?j5|BIz@GQ
+Rpe70r0Lq`b=YarE1}^?gTsE9CUiulPd0Or9u{%t+c`RT0Th)n0(TxWT&bxcJ&K;~*@O!*K#2fWHsL7
+$Bf-w^W>?WE#wXBgryJ>TbXAO+2k+dAyBZsPV>@?;hlYFLNKO&c>L-vg7-p?S=Lt|K~s_Ef?{Q^qja0
+@v}BOM(YP1K!ZH<6lrz&RyEJq~KWX6`{xCf#NV_ED#N4R83tCPl+s`;hw~3Jfj1CgXHbC=52P28I~v3
+B&_D3O8cWJwi+}KOt3sf1uam){Q2d!NbvL0m1}DYPegi=pKe5ev%iMx&Z7*3Kq_C6r}47a7tN;WW(Ik|L;1u?>ku@AVYD%9!5TOz
+*jA6*fj(XlI_CT8t0y2r$Kf04!i5xlDOFV7IkxUu6mksZHK=XAHHwnN-M$<_Fq-(jMV2><|D8UO$!0001RX>
+c!JX>N37a&BR4FLPyVW?yf0bYx+4Wn^DtXk}w-E^v8`SZ#0HI1>JzU%_(`L|!<;p;+7j+4bRiX>wa^+
+AW&&4!ylXOG{MDMkaM46~|cgzuz;YD2bA@yZ&HX6lXZE&&;rF^p0g&+1j=dS;pk9){SL+V|3M8k@@G7
+lWx7>R#>?c;d#r=wvwCh_{C@y{#W|`UaI@>s7+dPyA6-#U`|d-I=q&3nmr0t=mtCT2ToK$jz`fLsTJd
+f_3yH7aZYaJQy>(|kU|@&cykz^B$XA7;#DeDA)eA)SCz=EZUW(rR1cS7@p(EgjmS!R?1|s|)oZtSjCi
+LDQJK^T;tw6Nx)G%bzuM2TSK2v-WWZcC&PWOq8e(@
+OMji7s`X4+1}bOb3DK7
+cEs1?Wa%AYQ+{r?=p9>I_hu7zjsym#80+4T+9yHOGu(?p^_saE(vD)r8)7;-~{(6St;qMVj09!E^5n?
+H$Po9jfQ6b;#DiU|38X@`?s8*^nzVI)s@Vptq#nzHBb^+1qXPBh-|ZBSjYw23sz`#X4#%A3$GpFCFm5
+UTT31ze>zh$5|>GUuX^N_EYcZejS%)>@%Orc(HeW`BNxVZCOj6YQL53WOAUZ^N_a1yPI^9uKZ-8;YXD
+LJQRG6~G!Dv9ZJ$YpRbP(N@MoSOFW8&X8;L1R1^ZDj&Rj$y#JwdX&htjxXxOJAsR)F|kxs-%VkY*TS9
+F|8F8k@E9e)svkOm&$mLx(wa^675yJCBo9yhIBNk|}23~4Zl;pOj1^iJ=C2xqW`hrc40gu;T3EZ7D}u
+*FkrsCI&+s@T0AvEy3-l;EnEYKWqSm}`2b5@^fuGH(O~9);UbWB-_fgEBqvMJmJNDzDl?IGqrv%xEU<
+nPGw(2W(bAw*6M-TPka8-)QSLPuS3zaaJtAZE?W@{H)@afP9;I*t&?~7b-L*{YmCEaXDc!&H}KBlA_=
+Fb+Ca&aSKpXw7c4PECM{BAZHNLtnZqZo&_2J4o8@EvRDCF7Z;1MF {I;dxHvW(-bO!tjMiHoZ#2{%
+4thRHA3Z9uV*nGPV%O)YX+%DnTjZ|3#{U5b5ajh%4OFp(1gZpHpbYDo>bv;mny>I({S?Nch9WQgkrlQ
+N}{TOCXC0n|G{|LN8t_f(gEpc`PKEMfWh43DI)ec5v}>KQkO3=x>r5BJmlC6xP()|Gp+SS%cv7^o;5N
+`Z>lv7Q}eE7*B^-%;B7%q<+8Kz+2YQ1;*wqpj~7jwIQkw4i4vuF9o@D+#RRxi@mez3aET?jI?y@B?5l
+EpiE>6slxs2d@Rj5uOIQJ=&v(K%h>$Xs5eB$fF*;91Po)j%!|Zy=%9yfTRnyUdKIjLd2m_#Ey)d8Pdn
+6X418+D{6_UkWLLh^suYGYffF=HgRq7Z_wJY%Zj8wN#E9@qu3?GUZV=w&j&jkBo*lUrGq2fpZ^kuRdg#uK+aJ>o*?=0>Md_zW
+8?)nAquV1x`14BN5mReIvKc<{P#?KKCTfC6OyRgb_nE9i|02#Hi5!QrCF=@#Ao
+^#y=LprqJ18R+-96V-C2gbBq>3uT5#0&OXU{cyiCCC=QtpGqUK6<&Wv-_-@9#;@@soT(Xn^a-r;xO3}
+gVDh0sKm&>+7+Z((>LPy^H`qGtJ&6hG5d{n9O@;JAo-FT%>ERRbkLUe$W2OzF{xF#n)f{?7rq
+*^2GI#WD)-Fq^&TLOz84d_x#KGNm(j>*G6#iIXSlzNfhtd8+r>fvX2mtQ~e!57v(=ro
+E@Zxhp|5*T5Ql!pKtxW5o4zdVjP&dUZ6n#aynr)_xDZiFX6G92V?0PbV|ss_Iajp0P@INw$td;8~Bwj
+$X%)N8A(}V?BAE`fL2O5tM;|7Fl?F^pd9Zlf^GPcu(WiX^Kx69!&}Qbnri3nq_m7#N5&z_a~7;Gvs)r
+K{Z7Y-XVCnFSK#&c$lEM^EW2W;fzM?FdqDY0yX9~qOWugWD7lrG?}h^FvN}@7s2nRhr$HUZB93c&wk^
+d))UhB^_0)iX7mhSXG5GU$KV;2HJa|G2+UvzMH^~_`2CJs%osE#xB?r1$?@@2=;ci!
+h;m^K5>hdl2y?^41dhF9WoZTk~B(*QCFGW#{hFb&*mmbDP9e%TavMHEBwv2{9Q5)#8(G-O$~-+oN%DI
+W^yrNoiDCjTXtIi3O9KQH0000801jt
+2QYR^T({u~~04Od103HAU0B~t=FJEbHbY*gGVQepVXk}$=Ut)D>Y-D9}E^v9p8f$OcM)JFU#a2Nf5|w
+#%ko4{hs6gu2Iirak*hvmO!ywk;O5&L!87^r@Df-`UX7<5dl9J^siU@EbEq7+;{aTL4K40p@860&Hjxv=!SPC<0(Ezk%c4osTYqRM#|i7#_e;#1i<@ZTuiQ(#_k@iCW8iO+?4GK6b
+gB%qKeOY=K}>@9rXv6WP4_HM;nlmgU`G)AO+AB>h_T8c|izC8T<{y5@HEctvhgi1XbLPZLXv_TorG*7
+_jVp!b{vQFjP>=z)lVAPQ=c`c_w%s^J*z~;A
+(EmssO`rEIG^Kc6mE!E!HLSVE{kC@7Lgjb8y%l@~bzcBffXPz5gvf{@2Ozukq!_^YgRwH`^hbs`WQ?;
++7{UKEMb9*R!g}Aa9Ao^&;;6u<{4>VXdU!Wjssn#Xb6#y;Wm)kclJ}KJAZpcu%`D;9*L~2NDZ2$
+TyHOa>4ljjlvKqjMmuuv37;f8>o6!ipOH_bEyIHgp^;=pCVv4JA9F9h@ST2FNMFARxy_JaO#kvGX3aU
+wP%@4l*c<|3Sy7?hIXn%e8!vQQzrnvj;&H2UU$?>bJ6F@df#Dc~1BCk2f%c2fssI>YFRVt2H02ULngP
+)0QdIEXowE&T?(_COys#icd{KL?;zy`9SxRWeP?*!vHGl(N4^rMnje9hz$`_Mwv1z2_^MZ`{`Wdv!jI
+Cvf%n#1V-3LL!3iHN|J1B3+*DHF)HJjqqjKwP6B5oqAg)0U$Fd%#V(5IPt-do9yocJsUVmP{t*%4VE>
+!?rZ)$})1Sd=y;(bczK8Y*D8x3UUFNR)u`rW$Ome9IqJ
+%i&~3HWE<9kOAD^0f66l{+@nnVZV!S7tsvWF{3s)j$jZD2_?cYYr6q-s@8y&wjX7x8lH5%hHc1mGyl}c6?AgrnS4$_-LG?L^H4kmc8Uh
+_O*MV@UmhM=WsM#P5E$dxWwQH^nkK^cgI;hKu%n1GHR;THggj5Yu)VGFxeDPyY;l~0uAU`6UEh)}0ce
+~o=ur7*}gNWOwf>u5Zry2sR}`EI1pJxogy%3t
+vGG*^KSyEa)Hu`3@VlBbMI*{mt+uY~&qeSqKdRM(8?<-S0b^+Wf-5>tL8CI^yyC50rNA|sEVCq`70E)
+`)G%8ebn!xkc@#t_*sKQLWFG3_4n>G(<+LebO_dtIooZHrvBsmU|yRBDxJh)s?i^SV)Vp(DUkY^)*+2
+XYor{Ten66W!;&2<%g!Grol&1EeJrZ*QrE(2S!)Hp0}tVBx#38OuviALgk1Mvz)htCtYI>2^B}Gxn#eljYs2-H{bKDL8BlH?YKue*?CQN
+AJ*Lbw_~!txeN&HcY4iYW_r|<|sZAB-53olOs|U>yMn>A`kP@~o+eP=Fkg@M(ox`2rO41pc)^_T0dPZ
+eJlZ!7U1S;%6U@s$t%&z_ZUG+z=JYPbH#s^lJK0P2?MQXPwN4qxj^XNZmiNra~Lp_7V96b2x1r@;|#5
+4AF(ej6G1Y+E0UgtCXbunc1_?8Z_x0fJdazr*y<%L7Q7wkD0gi(mfsy?@v*BTU7(E~Rj
+@vey)OA4brVgfgRTAHK?kU2aV0!-Svt^u`!O;x68E7~pdw=qty?F5>v*^41b)$r#`^G_;gpM3^oKP(k
+hKcT}>6aZAuwC;43h`Q=THl(H%+c^(iRT*SUPOm7~l`C6?Dy;?k-3^8vwGOD3v|0PAOi|v1U#ZhoVc3yTt32m-OL@<~d
+*c4{uKo=in(WNGUkmQiJeiG&^D)WYT*tNIclrdBrdyBtgG66r4wy|8)&aboo{9IbWBaphBx5!_v?j@_
+HkfuO6s9xo@9mQ|8>V>R7*~NaU!A?pDAr_Vgd6#l1b!T6@fxF@0#d`$Cku#Xt8uv@l(f%V833?D0@~f
+=IBtb(-L7vFl5fAWjyeD3GIfpBk)oasV*nVEw64;3)!rUdB4lmUV}Sl!q5fEM*0ZI;@M^QS3;Fu5
+eu_MU$$A*3sM10`A)_kO)>iR^>8Gx^DJB{&w1ZfreblOB-!nV2GA260$Ifjj#?0Ydommp{SEq^~;n(}
+w9*M273#kgb%WmH3jROJFewAK~xH4pyz%V!oKTS#zM*R4Kv=aj4}zG4H|*o?52#g*f2vE
+jv)9EOX#r^E1Ue9cWA@HBQrbzNuGuG)5o>aedKbk?TSIyQ5Ampk5Whe5oT7rAgoEx71Mj`g|V*d$iy-
+JNgrz_Ei>er|s{#cvlVEV&fi>O~)V4{4Sduwa@JR79Feg?A*nM{j#|8N=?ub3=Qjp%6HBvH7tDZ21om|)ktshetk2AKhxkSj_fUyjC$5>;U|6=lVmaTBF
+of3Lf_U(6?j{yDVwOoY3z#N;0K0lm(tMDPD&BYbvUYX+c)amTWn@cWxY}DcQKcY(0c$_fyp~_OZmti8izRj^uzZWJE)xsjIme
+y{;KJ@6-kD83SpV01F(l;RaJc*&8Ff*aPg`T-di}wv>}r+Yv8I=mO{h!%yJ7lDmaArr`l=j{pY(Eiiq
++-}F}FUY*nTct>P%r8Yz2%{F?H(yN~)#!0S+yrgsJ%@$9=Pv{eB7~O}?Q$Mo&e?*!CAE)t|xj*MN=Jj
+8>>O?!Yvwy_vNB;v*O9KQH0000801jt2QqFhkG-v<-0E7Sl0384T0B~t=FJEbHbY*gGVQepBY-ulFUu
+kY>bYEXCaCs$+F%APE3iZ(gW|0EHu%7XCZET^+k1FFb_x{J_GAMy4PEIr5{jB0|XQR000O84rez~
+C7Ak#^9KL`lNkU2BLDyZaA|NaUukZ1WpZv|Y%gPMX)j@QbZ=vCZE$R5bZKvHE^v9BSZ#0HHW2>qU%{m
+xB%zAB_M=x9D7s(^+BHF6FbswvDKc$ykwuN968qopjxQ1^%UL=DZETUe<2`rx+?_5iEwr{ymgtw|Kg{1v&>AuOMoNWZ(6Q-z8oY
+#`rm1Wwlrm(RW-}@u$XI^qCX&Lsc7!4OdjU@ec7xBHTHMDW|c~v5c_mWK&MzOvptiQ6
+S1W#@8JMBQVDj~ArA7q0Cj9xvvnf=`0Mts{KM~8A3o+^zJLCF{rNY*ZZq+CJ|pnaQbP&vn`26@K}C62
+)0BLITcqTs#aop1Y&KidjqgGlCq~o@ltbqvPRQju@|ibOKL+nzHA)=GEr*Mf4Huq!3EvQenE*sYc6Sy
+nbTb;AISE$5ue^zrJ5CAM)uG#VrNrlwccQ{DD&;QsbZl5njU+e_-Cp13@4tV$$v@ouar^1&+f_swt{@
+5_mNMErFu@yR5Pk$zooMvW>X8fZ_QKn@j8I7a=gpU2zecM}wl!06vV1*X4JY6L*d3o7`hcgRRibwSK7
+-Dx6M_O%3#)Qz1Ml3y4v{mG~S<}On5L`?hjiQ-;Y9o6w5!A8KJ;08})!^hlvW3)$${l~y3Dq@rxt9e
+?UA@jx#6UCvTl^%f;DTj@Qlpeaz0hbyoafyKF|#3c~m|*0mMc*`JU%%hpe!2SkHUItU)9o|_us4U$(DeXB
+U3YlP(Xy9%r~WXm3?vsfqT0N$BGfS*B1uB9wAakQoKTME4ta;DLfn!o9P2W&b)h$nVn=OQh^2wEvF7}
+bCj#pp6c0X54LR1|OV@VlZ&@jD!cuLRJAA7~8x@_Be9EsSj3k50m-&w)TSB+@w}9ZLv_!FM#COUcj1*
+Z4z+5ei$4Gv7=H?(}>tG6!eUnk?)F2=ozoniM3E1p_%s^0;Hw4jQ|EI;MGbD<`-E<-OJgZjip5zgc17
+zPP-+IL-axLN6DnGK5ewX1~RtLu(m!7g)D-H*A|WcVjF}aBYa@hE`O{QXFS~5@}$WA7L6nMtV_hZ7X=
+!${^)?raFz&!HJu?REjoGIITK8Q)S3WIkTeznkR$mex?-&vGZ6y)G}Fw{|~L>$8U09F8-6+dl{jRjGv
+xIHc*z&vo(HxfN4TCh@AJNu!8F+21fs#>>M{+5F34ftsusiJ
+f@-9!1Zy&qQA5%Xr+y0a=eUDGqwW=)8nMdZlOK)4>Nu+TS3GptUpM17onJLNBc1qCf^W1P=UdzThrH<
+T#sHXy%Xx<=#zDL}JellL$(;Gv^-6hXLZD6imlsQ4E8ttpvW1ACaNw*ieSfUh)l&o@4+LakZnB8Oi2m
+yq=#JuR(bp0v1j;$(hFHEqQ}G^gI&I&~H}f>B!t>cy-}XQ%FcY5iOoaL=|roYdRX%I32l4Aay3LXL~h
+fNM}`OM9|>jB_{b25x}eNsRCaJ1f^__@!8zexfDkTG7fu)KmG;uqtjmBH|5|uW~<4wW@4Q3(Du&E#!e
+VsHa)xV7$v9fyx~8chka)Hd3b%Un<6g!OxtAQE;Zvfvb&($t_DbTlcuGO8#Nth_+|}b4Yim{7sW4x<5
+c&^BsIld3-yi~nmTtp3)9{_HVLN#1aj<-_OHp-!R8UkPi9_h42NvfMr->q{}L8v?R((O1|U@!%9{`n1
+ml$+DMO=Ns=DXLRPVR1Z@A1*r41g(+va7O`Jw&q?JVyk{*8Ni$@IHI)5Mx_8s?D_7XhTQ!iLIXqE#OrQeNfXFE^31D00tr)ldJFphcYCNq2rrUy5jNK_=
+O@vRPt&xHLQlb-rEx+inG2dj}12P<_Y4uRSXH$ePzlre=%Ai@ub#Gi?J7l!er`(g8L#J;T?=A3df%%4
++|{3H$KjOHdgDnSN>vz5^^sphnk!d_J~s2L}$(M+Nu&HN!h9vQ9I18`m|>Uoh#^!mBOp>Lcd;Bg@Fe*
+sWS0|XQR000O84rez~V?zs_&kFzmc_aV;ApigXaA|NaUukZ1WpZv|Y%gPMX)j`7b7fy+Z*6U1Ze%WSd
+CgjFkJ~m9{_bBvcyX}Yv$f3zMGuSf9kMTJ-6mdR<4rFJ0)dujn-^J9Nol>lqW}G#Aw^k|Iz_S|;n(Pd`kPm8?e7EYG;oqWZ1fQwEJzsoJ{VdS6ZDiicv!!_TFTnau
+p)Q6y2Sd@Y}xqVo?Ibpj|URKjCFjHM$9w-Gde*7^h?)HTKmpmr{va<{Ow;k6xoE1#yxDGp|T>adWue`
+kcw&CG~BWD$qi*EeFti#XTci#U6Yt@9jgPO;TF&kGH`BB32~ugCDYy}!S^ADPGb{q6hd-NU=!>S6lkC
+b*g22esLU*^jfkpJw%;_tX2u!>c#9v-iR5ZV|k`dzjsfdc!Uy#8W7&?V94RcvM=)vMhhxDwQfbGEJa-
+4F6(rZFnZ~U8+9ALWu}lb8{sgWm@Q~LdMaJRJEyxL>}|&)EKcHYd;d15}_e>in}2ZonE$*u|N#wVp|2
+zMueY(jOUvm-6h?gvTMuOcMGpn`dK9J@(9`X#!gwanHG7G1uk<=^4m%sI%aE;2boIOBbHFe#PUDF=yZ
+BDwvYvptU_`fr%N6OG>p*z&f;qdOE;jzTIyWwpW(RAYTJAJVg4bw{{Hs*$Kd{9Hk;1AJH7Hzs=VN_NF
+Lp4RU~leIw+DzsNgUUTv>InzBDml_&Y3doZj=e5c)9R)bdrbAF(&s*ofI|LSBd9gr}RGW08VP;e(=k$?3Z5${>nhE=Mu^r+HDP6t5yz~vGiHw_S!3X6a^bl1h(d2y)jRViezHSShP6Rm@A)}(`8+obd)sjtFJ1*3|r#bsB#pPE*n3#G
+UijS7DZ)XXr?!55l0NBWo0F2dCKyQ)a7rsMpKhjOEG8$f^ysBd@E5`5m1@M4|yhYgQ?zd*xUzN2lAr^
+4+lKHW%M2K_i8p8HKh*g8+irA^Nj$Eqk{0*ZK9&UxD#_|R{SmhEXpVf3}dem05!^zucc~+NnOKgV%X(
+mpCY#*&Z*V*?txHy!vk8>hfOMXAi^;QWWcrqj}81CqqfNm0HrkPVk&TnKqdPw&bAO7^QSJ?JufI?@Q<
+U6j?;{33L=go?*eVPCoL$;S(Jjve39p%5Gxg`xEaO#PC;kvEu4pxQiAP72NS!Pq1w@eL>YXtMn8&;Gs
+eLLt&0{(evk&M3DhN0al{=zE%vTO(3=81jlVY+Go
+Ydr)|#K|%|zO949z6QU)ev#N1SF{*YH26(9PvPZu{+1`6+fSaOpDHsn!p|xDbf)dSem0Ob_VJvvU5dB
+SFEunrBhB}Ij8K-DemHpdPb&Nm5DJ2KFDMj&~I&usP~
+x~oY0DqEj5%@0Ed(HqasIVgPp7)pmYS+}_w2NRdZjz$vNJ$;#9IyDVT-_^WvY=j6#z5uKVDvZVv`B;E=KIzA>F66l*(C6pKPCRu+TBsaYe_SgWzUrZ;=(YbN7z
+0qEAKR;)VY;@Fk8}q^N8anK_gY2+oZpcHw`E>}5ajq@Zr@;%h8n{bO!#DW4;eBPij$+$EO)phjS&6;aZH*a}x%fpIHlyFUF
+&RvhK*lvlDjbSOAAX^e+=B9y?~4Q*LF+&W8{6#(q>0Bb1K16q;2CSU;<>VM2i;7m0;)W>Eqj9$>06
+K?q0XLGZ4pxavUNU(icRBi*t)Fhr@1t3mR;D17AMM8RbFA-6fe~0X^ZjX(*!`+8hPLHrZ7&A1+n^4Cz
+Vr%@5V4w6U-unMjcDx+1Z~n~eD6RL>|K_*+^-g2}Qo^8)Kz{Ku-~29jk-!c6GaUz;
+?JEOY;8xoOmKY)%Qb;M;$x*XKzLK{`fo(%m)sMaD)CRvd;!|9;J$H9C$4`z44bT)rj3_j68@x
+`E%m3Tt$paX7hET89h`>*M{#k=6u^!DNM}*M8+CAIxqzg?AKcXCHHvXQiV!rnKqfW9TA03k&2VYmnm>Yx)?ej_KN!U==Q7};+DM
+t(;la%{PJ6*{4MVNa86@pgVQy+2>vzMY@rnUw%bOW7k=lEQ0rO84^6wx{B>r0Q#9Wjs#Ou{mdck+$^;
+`Jy9S5X^;`{O#q-m(95*+6<_r7*i39(d`VVlDlwO2~MwEbs!RxEfvboKU^H2{GUUG{&)<-jZ21;hR9k
+wLau|uO5b&vua62J3aSqV5q8EG)qR-A&{c^f+_Q?gJt=e^G)x6I&CXK55rUvz&<&A0UQp+8)XAK_U9o
+RM-3ga2vzpgf4dU{0OltGe5PS0M@)6y8G)diEjG3=y>}${N7n0_N;3@3%QC0mkavem&VHZ^-mc`l|+`
+4zGj9O^Al&0olFe2`ztDY=WQNKv8>3iy(Z+i#c@oU)5cd17&bnBn)ceca-3qy47y8br$i?pOFYQ+7iY
+My#U-0tVD_SAhdI*62S3<)c!Tnm%YO3+b*Dr4F5o7W>cN7JTStdNYHP*xkEHFO{cYrjEl{^SGOCe<(5
+TxOzVODlI&?T!90fVpC!Cd|q_YKR(FKz~2H?!39Zdid_R4XXb1!?%BR0&{ssBEHzlKZ^Y_KQ}yZ46T^{hSCSRFB91KtB~g}o(@6aWAK2ml
+UeH&Vuv$TOB6007Ew0018V003}la4%nJZggdGZeeUMV{BZL)G4yoR$XGNBqdv0S``)~hazGSzyhFTuFwDd`Y}%cd{{}Yw$4?SNMNR?r@N=8yQg~;1
+i_$QC6!!=qHNM4uSJqC#C=t4%6c%kSxHe=X+BTOOp2APq)2Pg6k;KlX)aBlBA?5#m~9&I$Gm9%DAK%c
+lDtWiMv7)7*Ms}4m?c@Zjl_HCR>`C;axs%>eh=@H#sGRuo0UlB_~j%_%2MWwP|TAY{#Vsj0MtefX0my
+dG8bi1)v}I6nU?CaxR<%ClFYzs9@9DCoHw${ar`k&uU-|KY>|h}piFASo&iVVrU0bG9D1g8Bl8BDXPJ
+W>d|4J*Ry+dMK!}B`)B8Lc1VF{XGlA6N*Ep|vv0eiRH5kIJd)sz^
+u3Bb_y6(>Aacn*hzNs=OnA;V6d!;wTNSG9mgVFmqpcxWL6j1rjap!9}Lv-g>Y50_){o+hGyzd-@x
+ei|{|Zy^^zHZ@aVZ4^I%6ckldCi4%;J>X0@8YDnEiaebsS^7^I=gC^ST{Y*Ud6q_HRoqvyuHzZtsk?u
+FdKKUN_453>ub2Edmx}qS`5AB(MCiP#imIYNw$%-Z
+S9YDnu8WNgLR$EGEiEtVU=mAOtP`K*?_7W*v>s-M8jBt$d~E8i@;zo0QD%UB&}u4>o=AtFT+wHSg5tI
+uJ1=Yt7nL$oQk186TN6)A&$i4JMpf_CACM5gTJqE5YTA~B&k81D~%^M^qEJE7==;9b33i>YaUvt22%v
+%4zINM9F!8b<1w6eofa^mDQPnvAD4FI;R_AKi3mS^<`z@&>2s(gedtofX{_}_v;_4#3`H3I0(x@@FQd
+B5(q=dsadU5;1cVu}PCghu(8e~TpJUab%>fjMTOjxtCFO41!(d{CtH(T!NYKo=r4h9d#q1Y3Z>RwcF2
+rOaVDH(iVLxbS*IB^0y#Ix$#X{PtLbdmV;)C4Q&NQiiZWn?QJr@&q%0Nd49V3YJ?v}^9V=4kOv@pTWq
+#9@}?zG7G(4%CrP!v{N94ekvObxfO;>vs_=O1Dcpe&1Ln>1U*Y$YfV^;or0Ur$i@+sxvnZrATEKe+3x
+me*;G>s>sqq{O{rDN0#QYCx}y$}Man&OQ(3kbpO8rA&cX$y&dh(k|~U6Ju)>VpA^Aj&S>VbKu@i2YNe
+3bii&B^`-=g28jRyC7Z0lCM|;3{(4H6{s3s6;j}HE{MRQM49^W20a_mUKg>tAlcBFxJchowCQLKMU4W
+1@O*Qm}8Vgv;#4>7*L*VeY0kc}Q3dSN}uDegPROm-{dag;n9j+5tz>M>l!Hyiv^>%3{+S*6k4I{985;
+WQ3S(+zRD(m6Mw9z(Fgdc|HG5!l#pisY}=xksK7E3K%i;YC)q9Rl;CKH;rGUr6-!+H+ynF_iAK2cOqk
+D?H_0Wg6w`5?2Cuf_(%$Xiip$;DvhkojmAq*+b8*|RyhYc-+C*I7Y-M(Yo8Lk+QzupzF~oc2{1dQ&&J
+S7u3r7kRb?ggi@c2uKb`WAQ1R0zIeUXBN_$CbN*}CrR
++qWF0GV1At*?@RmvWhZAo|*l$b^B&
+-L?0S;0@s*6oEm(;#W!JRY?DL$FhrJSeBbgq^eIA=Aku`P)i08>EjHy|`%u$i3|ZF2DaaI6xLgl!qS*vTv!t*==Uq=KWskxmunqqo^;1Fa~f*Sxo$>nSSUfyV$1wN?Bghg?pMG<6OL&MJ?ZDS-o
+s10Aj+JIzAi)S*)iwR6mv0_F$o`QhVFk#6!A#pQpTCg;+2pD&;oMn(=2q2vykR>fB(;PRfQ53iuP4UN
+D`R4sT#<`NK9GgX2O}!xxF^=jZOFjhI?AmAcRLkE8nv?9LaFVEqO7?U`YqumCi;wIxg(CRPm@mK_*fY<8o64+J{Cx*dO>VJPM@Eg
+6mirv@Ph-Po`ZfBlmf1~?tG7+l1Ik?F$@g9MY$bzTi^QN?x6Q>%JlXIq*SjKBVnS??7zV?B
+RtQ%=Yy5Z$`~N12n&m+qA-09Co3=rK$5U!I9AqN-JFEZ106_n9^uE6@Oo7|(nqi=1|!Qv?H1ogQKXIP
+J8;MA0)$^KVhkAU!wS@tZW}l_1s;IFLoNWz0d|+B+DOxdj9)fU9IWjc4X!phMg3B8v@~>q(7~9-{feC
+6{2{H1oT6|KVB6u$csoJScNS_eCm(N9k;+txXmku^D*2C13h2W?%_hlU#C_y>CJ=GjY(a&AR!D)IiLj
+l)^hz-NM(#kQ7(G#gOl&)5y?IVg91$>B*%w+AEVaY^)b_%6M^FOxrCCw$m5y+t5LazIoc(7S-FdOen-
+-=oTuFYDK1kp@7y!klDK|}ILKDF0#UgFsJqLX;iaaBO9Qa@2KJ-d7DYy?&c*OMb0?eiiRR7-j;XX*sy
+s7EFPh~}L4Spd8E(L+XSUt}*I7UR3!LT3kpABQMZJRO9vz^F0ibaozRF@yq<~St-B1?w&9xVUCSW-(5
+NB7CGqGQzw3lVMJPY@#O%Y`gYVmL13p(H^#9vOYFoHQ2=T}$nuNc(X)y2)l+362pp59|r+l50
+uUOkG!<28{R+&&9vZ=E)BKvur!5VD9S9xvxZ+f8=
+w8YmQ4bi(1|ixEOFfjyxcG00g@pRTB-6$7zz^rg#GC#eU;`Q%KNvY*T5byo9hqc)KdpXlhOCKCUYNtx
+hB(LIN(RVj5QsYiE7o_+udh8o3x|ozIG?`WAZUwZ`LB;tY;WESqeS8Oy(=}J#)#S9d%ZjG>ruIxUNi
+~SC&~=tn5a|Z9>?#*e{Lf6>%%p@@g3S&|5}fE$1Fx{ANs-WmY6@%Di+*6JDc73XH9b`3K2ULNvRRh2c
+P*qe?zzy5vp4)>k)m%!_2$c9)#6s_P*s@5d1Sncj*XS9Icy$KzQglf{tdSon{&>V6GyIW+cP@M;?XB~yb%t+W7zTC_Q5r%KoL}>_lb(s!)3&D_4C~Qj+RRsDF-%7kw
+1Q8MqqM}|vk`c3cY}2
+JWIi&iH}5@8u#FCf$W-sW-A7PkDb)@^$&tU3j~ev5ttzuJOYDSp!jjaq}Y4H!DC!}u9_*U^Z{w|K~g}
+H-aC*`5nrDFC^(XN9KGl$Jl<5#F9=%63#pJMqOSA72*x8
+{6DrB4{pS6oijx>l1I>GN~qEY10>jv{sl-lNe5;7brSr&B)+cHNzvoy)o;o{}_rTF^AD_^&h3M3@mo~
+M@=BZ_u$1Ql$u3ib(nlO-uRAs!U9N7l(&ei46^vTUj(HiUhux+ECi%s^CqI0#OkVYr!=yi599T{*aR|nl#YSuOW?87fM
+{=y5=$v!p2kisEZQGB4Yv_?$8sLmIYEX_aEOhF8vg5v*@y%#~m1mfwEv}6rnvFV7C9p$OgVkFL&R2HI
+(rASyoRJ;M=($2-IS!bk2$0!FX4UX(+rdf|DCDnWdJ}hX84H$eNE_A#hh8Q7_?*B=voDNms(c>x`5%@
+alz#)uS84yCy4O>p1KPNmfl`jNww3=cpIxq-l@0$MfJA4fA7Cec&ua9
+0)mqzo#lMFRkcsj8Pd2`5=+J#pZq`(xyYvMF9*z!mW}AiP3%3?iHPSyuG=(yl#`xIjws7@|yGVvamYK
+%NgcZuP+qS_5usf^Z+_!r4Qdw67N$antL#ZFe2ydKBUc8o!GmPp*5gE8M8XR=n_u_XE7@ME2vj_Az%d
+7A)hHb38n#c%>wn}*OLl0I6H=0B1cW1h4achlT@K7ebr1JqI=-V*xm^iz?SnqO_d3aOCU
+1lQVKR<7c}!+C{?^BS*rZn3Ln?jmLFJ&RtQTaCK5zug0o%hq4>V$Cb2@?hc>?=O`#bM9o~eTgy43Q3b
+7$LViSW~Vhoe?Z8n{0L^G8Qg)z=e;8Lq+f+H8g<$pwvWBQc8GxOp~(USuJr)M&2(O-$!}2?N@}w|Fc>
+67t=17%=GVhyfVZf&ep@QyG58WkC@P+-OdEiPF0ic(r(0L6Jgvy+QuQ^5Z<)z?7`oQwZzfA~QGV8QS0aX|I
+NG8vH*bi97v1LU|;yvT3YN2wN0!mH_uyq^WLY*_`!B|5=;sUhT7mL3RPra3yvs9s=(T(iqD<3JIfia6l1~Cp9C`yxlXAE+8T$_AR|}>
+R48Q%gA}Ud&|rqs2i^gSb&27#HasNgI@yXP<_&kcw!96l=%-JLca>Gv6r!sqOiv4WC{hwSMG;KVCD*njm+Kr1GA
+6@3%E3dqui4h;^2Y{9^QPHkruHx;Mis|hz4D!_4?FN-nPJjGa=G)CEg#rAje=5}X@F^ZrN;OE7N-_YH3LlcdtJ)5FiR%v6AGhbKtPn
+g-jSRRRLuxY;--%b#4nW*0LfHJ)7|Ci@m6V1f4BDw92yJq(1NP)Zyll-h7mt!Us>tFz;Zh9XD>L+)z)
+ns3sRZu!g)MPW!?5H5_AmWRVm}Cg!$tmpNzZBJEo#sX5E;B+U$!bd0m_sYoQj*d^X^ORJ1Hdt#O-}>Lb15JRm3d<6sl)r58=NvzKK#)gaT85FhP=%vf
+Ak>i{?RP3r=MV2lcncL}V@HC_N?4j93KcMHF857glHBL8ZJVmBW6eY?k2}CdXyWk>yRd^a!>|?k&wdV2926jwMgjv_`xKZns4*-tcuPK#Fa#Vc#rQb#rQn1!eNWPsuRZIOug+PU2j}#d+O0d%0yRSkQ2@mIMsw%GgEfA`E_stF6!L4359+3`P^fvO%h&
+?TRYVB)@48-@&l?C23bs2Aegq$59_r?xvM-d8-S!8u=&}w%Kis6_jloKh!Xp}cf&yjwogvnJsP8y8SKfxtI6h#JhKs!Jw3Lqz}!$2+LI#T@Gol-p~a542fuLR{UWX{nEp2Fi#`>3qz&k|TPr&$!ucJp{+agFgXDi+BIjG%c-FB73GaN;&OR$8NYjPW$y%6lquEbp?iHZD~=tw@(gv@h1>
+M>9}M;-r}>#tl-5&w1kakPEmVNaFu(T*AnHUtnOQ&s;SXqc)?%WBzBn5<19G;5)JTmMj-4StwZGQ(#OQM#_PY^acPH_h|f4dSacht&w2`K?VK;FlJMaF%qL
+dIkKb_ggN6zzW##o3hh7FJSWB0Lfljvb<5mvsl1VA0+-ffQZ4G1`^9(6!Olod$}W(koFfJ50v0b#@UZ
+}Rc=y|5vaRW0C~ZvZuCyCXk!m5QQ=B2i1}Lbrj(S{hSA(nD-3D6U9VoJO7ye$QzT?=W?@-Wmb=A49*D
+?G$E~OX1(cJCnTN_B($*q-9$INlMI_qF!MZE%KNMJV)U%&kL;9p1V=pygCtnk6k=Tb^=AP1ykn#%m1`7VO36
+})`Ij-EJM0E3cAVaE(VE*~$02>>$Al_L0%fg$LlJ}Q0j6Zo1;?yOphmvZ#018HuRjiML|;mSLq{jx@O!DW^BNGEM(d)!L&k!4p(`B)jb#@eKLv{I
+i=xZxE6c`z?61OG*+pUfww?af)k1Fw;IyeuMJL1&V<3byBcr9#2wT0JBleP3=sn?6Vc|(`u!fa>NkOY
+`e=hgNS^z>6Z%u{yi&|9WtA3-R9$08=we|p-^9;1aneZ^89NEaj?Fo(r$Lr{YZlnJ4@pYo;oCgbeT|?
+-*1R}KXV^N>FDT^ITg+Nk_cF%&!GGV3kvDwytjt7kc*v6plI*^iF4B966?*Fa6jfk|&p2?F=?fI7a+-
+AlRZP%b%<9|>AyG19)Jm`NjU2uS-CD4HZ$ZXBeP%b_jWyy3V~toVi)tE<#mj?PK;G5Y;iQR0qLRr-
+oNvoQDH!^0Qtd9?Dc+Uq6b@ul&Kr+SH+axcp0bLuHYa-SeE*wc1>l1i2`;T=&IY(?V6kKm+QyVIpAxj
+AxVrRPIym2e_n(1vNQJ>TO0|amC-T{A7HV?x#jwW6GjXugxvQ9~B)M>&(~w;fn
+B&;t?kd&M@$oRe$=1-qzb=2@vA)^tKxdj`ce)M-ofQ3qZnP}y_1WZ!IQOC-ysP*u$({R{4KvhVBp^4u
+3MuhO-F4<%UOUoUR^?WQ8Lb+6yw4j!`{z(h}A{$hb?_
+SIcB2zwXfOehyG;cat-SjLy-#!_V-)`nbpd-{XRnW3vol_T651T}B`}_$T6%
+L=&+1s6F1ESu_t~5ArAxEzJyu`6`053ya&T>du(<6nle*y(s5_Tj=QK7M(YjzE!6U^nZ(~?#1=>KLJA
+y`W?iD|ZSV$|)3%U3LlG#ok)w-~L9|Ce<%aYKgnp0}8=x4F&C8G{%>pzO+{~4?=xU_NL-KWfdxy-vxc
+`#6a70mo8lut}l(i2k=sw_AKQtKZRSeOd?cLC^LW+#`)z1P@2?%oP)->EAdy$62o6kTR&zh;G#6s|8|
+^a9==x9-q%v!8vSuC%icynEoBcFwgW_9Z7|CVskH0lRM0Ibgfa^&S
+P_yPh*YZZG;-%=W_zaJHBElb;mp94pggQJ<7KGpf{Cr0SS(+cWcoatzL2+%D4Iu42(fISJx176!`fw-
+9%L*IIs-g6U!z)@x416glN#xElEir8I^KxHqrf=aQN^gxlUP;YBZLx8%hE9B#&zn5*?ulOx%q}f`v(;
+%WSAIVOcUajz_VlD){T`1W9<3(_8v!4KzmeH1t@QTJ-`h~*mC-(8FOGGBsn#YW8}ukBjqLZP(4Vy3`5
+r-A9^cwR?g=x+i}^htgm$oGNFOlgphhzFS=^SE}#WzRi6ad`epiSz+)F=t7gE{wwp0?>v)gra-eM{U@
+vVal)(KFq)>9lQcy!Nb#LQ}#Oo$F68FQp5|jd6DKTI=>?-@G3H3O9KQH0000801jt2Qqragc+ms^0
+5}Q&02u%P0B~t=FJEbHbY*gGVQepBY-ulTVQFqIaCv=JVNc{X5dEHC;RaP?rQM+WibSOor9D*2A$0fQ
+giz#7CW(vJj%;U_?WzC0Z|r0juF#c0jx+OS{N~L#d7j@nwUKTw_EwL9s`Q*?)4sN~)O396I%T@~(fWDi_dZL|gBr>T(a0I8%UY{aj=|P;GiZtl%>j
+?Q^q%KNDpL*8d2+K`e5&BMk*0amFTL`!L+wb0|Mj5fng&ko;B%*jE9b0x%X$n-9}F8B93`UPwJpPb0B
+5typWp7jRhOTxF8`?Rzuw+n-~JA++c&n)Gl5@3eT{IVd{~OlF=eT67YorSoFwS|PvWbO!NOrnC@*9k)Ry!fFpcuH9i8l`5$io4`P4_0fIo7+6kmE0
+9C#V!6RXbA*3`?bvQF3*Frf!*JDNJF!V5pH|3W+wtf+fwI=Fi*rPgocgM$Er4l5tv+x9f>DncL}W~$K{>^>
+=a@lDg56_6HBPf);`BiM_))Eh8s!;>rr79ESOl>A``p>6fC1oF6CC2wUQRwXw~pshI3}huiHUuc|mQt9%jhZ*8
+Ddu6UYQC3;qg=2`Tz#k86`VhL`wLdtRyLChC!I1EFV;-lwQOdTk=H~3WpYR!IzjGBt5Q}Y6ZotG(%Nw
+Dm{CN8J)ek3Mna6D#e0@n?-NsUay#jQ28NCWYNry-q-Vjh4GJP#jyaF34*vHAr#AsS++vM;B~?#Y{fa
+rfdt{KJRy$83VWw5C-ZE=GY8yqxZkwPSvwq>#1e#tgl)W7mr`fPKVx;ZrIDeQRA!zE!d-7Ae}x3vk|p
++KzeFo2E)rlvh*MukOD{<RbOYCrS3F&$32*#)N0WIgsol}UIU)|q-zCRb=|H(^?jg1Ti92SfBJ*+Q
+LO!73mHey8;9~Lu*w?qy4l1EYcc;Nd8q+l>RyfL-q#w&iqSfd5g$&+jHWevP>gU(LzQ=)1JPxN2Drf8
+l*S{2jA&1LoR=4L5QPhU|ry*<)(L^=@%5J=eYNRfQ2;OeQJ^gU~9dd*XHM0IhoNUi>+=0!SO?Xscu*c
+JJ8XKWn16yyDjZtTf$oH&9L8hV*hj#GhA@Ymlj#ZeRrA8dRJT@?9hH9zD`;VhTMR1-(|)-y9^{HiJrH
+rc;WO9KQH0000801jt2Qt8?DFH{5o01gWP03ZMW0B~t=FJEbHbY*gGVQepBY-ulTVQFq(aA9(DWpXZX
+d5u9=xlZku7h0YqTOCMo#kx%gzl_sPid8cIke7HGuwgn@=h
+c6$$6zA{Woc~pP`h0nLarq}TVt?ZGHURoL)HT9;uIbWOeJ3yof}&tT6a}2YE-V!?gN1E$F|;8}A#_i^
+FkwzH74G4wZ=4J%U)X%Og*buD>k|!hP9&gnhoGI%6q;U9U5|9;R7o|7G@QS`@PUDQ7(9yGJEH#J-q>H
+%YgS{lh3KF52U}P8ZDjr$cBAt0D4qRTRTVcRpkgpm{VwushB8z
+Xlk9u5Qi|+KaaPiBR)1{Mzb5?Q9t_2Rl(H;H6s$iM$r-Ykqo`x3!rkiCe+xXVgmfIS}VP?Rn
+inck8#$pTO5m5)JpbUyfBV1gCQMxthn3yucCdHiISF%k!=!8y@1Rgx%c42ixE6FRvcqVT7aV?`5WYI;g{Alnqp=XF`^ws5nWcXq(W+
+r?89#;=kHV88_J29@?0E)$kQNl6sW=D|s6)-jC%Q2FtJQVRTmm9b26oPp(}NJNgvlZiL;cu*Vc8L%tU
+4scqn^ekl!Mj;>S+q2W7%O?|%=YML;RdpdFLJ4oTcX-`Pdo#4iK@|GJ;TD1UlF!Gdw;ToyzXiZ*M{k2
+zu`_|Dc94HkD0%-wcqZds#eFj-WCGbUZiMAw)&BpKsWpB=YjZ%m>eLabvecWt%x~+Y>xV*TMQs^l6(S
+9aIVrw8m%9m*h%f-6{>5Fm%=9kBIQZaq)Gi@qjo!u#tYP{Yu$
+&)F3Hc;wJ@D??8$;t`uxtVoD`wG5&bN{(rK+5bCwcD-laY~4HE6w8G)V+8*?S9JPjON7#M6T%q+u590
+laq7eJFQqtw4U8L$aFhAtL&I&W=mz
+C;$K(00
+01RX>c!JX>N37a&BR4FJo+JFK}UUb7gWaaCyyI>u=mP694YMf>`4qsa-2ci~F*ui_5iX8(feCL34+LV
++gdw-DRy6Rg$v37vz7x89pRZq8}~p!wG@2%f}2k&)-Fx#&nwrDBpOriXsDTAiGnl3(|X
+Y(?9OTi)$REe;3PX`=RGXd80Hh-3$G!x}$xZ`wYU0V}+z3dw?inCxg<)-5lUrg~6SEg
+Gi$#*c6R@%G)n-d3+Ze0cXExlwdmz8fSpT64R82nW~k*H=;snWAJR0c!0*fsW9Q=?bO~92QiH|A*bb@
+xWE>w@KE}T32+?`wBNyg9K@!n!u#ay}nAI{>F^uRn^f0Xu3E#IjLK!6nQV1*2iC1+y5lwfokBDd&QQo
+y9P{;HPLjjIU(?XvA!fd?&eHBYe6&QhRG`droD&dV8L!Zej071G&YX=!4ARnc*k{B<%+f2HTjClor3?
+qy1vCvjuAemmS!&$H}XFWN~0^#mhU=ngH`+klDA-7Yn
+(O0uZmk^Wc+N_hPZ^mN$BD<`&w_i;L%%lfw;_+k-yO$akN=e4m*K#rkvjlm+}z_x|$-dlqWq8$E;76#NEM*+Q@&V(a6hV@PP%kOR{cI
+H~evB(uS72e)`b2t?7A;r1NjrHxT*@B@gW@Tpi6R_-<=&(5}Zw6imNxvZGea~IlpmQK#@Gzso-e&FtI
+0e+vlGA;w_xVW5-&;32i%A6O)tR{i^T_x>%h;{jLE!b6&qJ~#~BC&DloL0*^T%-!}J$aF!!#l`aI)CB
+SU8L@%=`~Z;4Q&VTf|!Vx?YUp;2W-5+5%6DKLiU27RNQ+Jr>xTID0fu+wjwx|bAT)>e}kN9FSqceJ);
+dM*_pWe791V!<_5|6ImzCcld3Gf+sJ9o+i(4vWSdW2w%|S}x?_&F`FxN6yy_I>Y)tv^mn$N=_6UC%>D
+X<{;r}b9ZyD<>5#v4v9&icnEX(ZGM5=6~1$^4+;?j-xveMI6L^7#u~#mhgEgNZdRfa0-K?x6wb7
+Dsb?$u(I4i=vo|3pg!A6dcb9Dj129M$708LZY@Mh$y6J2_PpKt|wZ6h(bvOld(=w@l-*8mWHiOGZNy+
+f$}b!88<#Hy<#m2>IaN*U8AyS2?GrFz@{IkbHw{jE$nMVJx0ep-V;*>r>(aDNEmKim+6Q=c>VK8+bt6
+8bI@#7Jc;KPbKJ<$n3?Kn{im2q%Y4q*+Q}L%v;(uS#`FNm$4xFY7iV}6(91r50Z)xg+~_DayOj5*(8p
+5gQ>d65I_o(=IA`Pb%ahF8E?ru-9Zzz%Q-AD~k&NvjQPOKS5gZll!!E=0XJ;V*nlOdn(0su91$LLJZ@
+IP>csY*-t54m^hVGH#gk(SV4FK_6~#mx`&Vn{
+|00Z_rn<5xC1~41`>?0yB_=kgFeh2)`Ys!&Je&M)D)!jTc84pl#`xH;
+6H_bz_9s~QxZJ7y@B2~(2RoMXA_1tOJaKo7L}Eij%TdG@LBr7xeLw?k=lZ
+VO&%bHiG;!RXigSfJOs5L5=sPUW=FzMH^VIm2R?pylP%H)SAdl??P`|CRMt_&nn)oFIb6ge0hYw)l)M
+IR+A4(_vssf{=9>rf%9QtT^53w4a$YrB847HEbR_h^@sY!mjy*dl`W8&0k;iM7v_f5upG(R57V=EKSd
+I^nS|^L+9A*-La3nhh6B`jiho7qAa1`zy#6!fxzEavrG4#%ycysqqbqh}V+Uy0@5KH}M+>IR`N_PAP5
+}z+p%Mgbd9^N@<)5N^fRU=))4W@z!Xe1NM;AiG-
+77I97<0Bbnl)4>U2o*LYyZX?bE|iL#0!F~}Vl$-^v_6hRmiL@zJp}$ZP8zexa3~
+9dr4p^F<)dXQKfGEK(|??qo4o?;iP~tn-xbgY8Kbj|$60n&qD=kdW{Qz&G83%HH9M{`t_0%H@|eU(E-
+P4Sw(=c!PYCO-X1$)D_@B7ibPnN?xF%-ML$1*I>LuVcvqseQ0C1rp%^+>BIFKBcWh;+Zfm9J^San3x2
+B`II*zLjAm5>e8f=v}stGH$dHTT-nSXm}kDU_8$?}BJHbdDN<0;mIJkazgqz@DkLMARyI!z^n|7pq+>
+u4oIUGHMx+`UcE-vkFqlDS0md^$x4nrirV3tRzaTCWZ)t)6ZJj6Ngf4WuU%6O3(RY>CeEC5ju
+Kf>-GnMy$9>E2mjbJSBYB87z3{^^w?AmrAuTlPC#I^A;e^)v!w^ywz(Yzc2yR1j+uQGPEYHGi5m=YBL
+8ZSL-CX;Es#=VljfX2k!C@tDE=P96uuCcZu|wg~*e+5BTwdg8&g6Fn?wA73>oF6=>GNYyf>_KjW(?CFcUa8S3b@9_+c8&6a
+SbM2-YChB0%svBYuy5l>{*R1hCQrr(cJLHH3VadQbY_3sXGkE#wBx1nW~t2|5g((A$lDK4DQ$j?pt=}
+PfYL?4J!k$1^*hc@$D91bJxc+4QmWWaf}dAi^H(DT`)uVYdm7Hs0VD^@pr@+gRjw;e`5%tz*SY`RkqFxVP`K9hQK`}8XVx%TiWTdm<11nTi^!(arlMT2s>uPYS$Gj=OMt|6OOj5EAdGOoT=wbM`z75fL
+4-KS`G|5{`T7z(MPIbx5()JaaQEtSmseG_m4~IQw~qlGRiagI~~jM$v%Jar8Pz7ym65mEfMBCD#=ieo
+%o&JPYL`AUpE`i-5!A)UVuSrwgg*#&B&3dXPp3Y_me>hJ~M*D_WX-y~Omj5g)i6*EkHy)-S5cr|0j!Z`Wr2SaeM~=)G-8fYzKk
+KG?g{Ox5*Ef27=Z5tqN~%?B*Go&_i@=$%EMB_kjZ)j8PCnz}Eh!HfG^L!pN+K;jaTIOCEN`g@t=ju@I
+LDh3#)(1cEJ>PqKUnl~=UBPMm8@WLV;-`(6HlNqj{+y;5^Y!o9b>_e#EG5#0^8Fl^D{_RR_x|D2Ma43
+ePNtg`o5EWz?BAntBhnPHGm;xx7-OYCtI#@17}4i}Hg2rpm@iA41m>n8O^#zTlll#W75^)S^%pt4JAV
+bekfEznd(J#W%vV43@M!SoKw_u(R!h~ZMyz8&98Seg^mL_>)?afuGiJBxiy<3T`02Tne?u6x}1rdw>F
++fb;vg*X8)oKTl?sL6JLw|m=^^K07MugXAkE>+zhVj!0Q4h`x@YUJj4Bcey9CqgZk0N`X
+7&!_qlVT-7^Lrw`cKMdu~oMOENEO3?8sS>!5b?Hk@e%`CkhhRjG7?8jKgEbiKkinPXoFDHkXI1yD-^1
+QY-O00;mMXE#!0Eu}0l3jhG2BLDy*0001RX>c!JX>N37a&BR4FJo+JFK}{iXL4n8b6;X%a&sn%JQ&k3HE!R8G;-XaZQfM7ddA;xj2e(%;%Va)3mt~R(ZEs!VNhy{hH$21j0b
+aV0c`j;xSMIVc83Y$4q>U>hGaV;tS#T59zrVQr{$KB}_Ak%Wd=A;d`nez^QWDG%s(a~{QYV3ErphHZ6
+D@xe`w7gZXzlaMhu0q_=RdwY|7r5(-R0%Q#L16V)>GmGPnvDU0BxkPCO9nL==X
+-v|m8ai4(SEr|eSYVlWuM<=8}vOeAI!3_VFQuJx!W1q3QZI%YGTWmBHqMvl!r(qEjgk@X+^iP)om(6@
+am@A3xoS3cYSX6_i21w*B*=ZPGJ=rdH
+rbLm7D{V5g{aAbmpp+3YSL}RVPT`}#w%$SZf(HFv#aH3(VnvFT8bT93DRX@HWPr84Jm1?VO6H
+?R*C@8Ch*8iea`ECq^_}y|mv)Jb;{9G{$ucc=Ry2+@7))Nk76?js&YlSGW_};Zb#x=Efs0*<8UY2$3a
+JDh{fk^fFE#xLmOdj4heP}QqsR)t3A{wEQ5+rg*nNh`&!t|BBJw~=ZU~r^shr)4%~bIc*oQr0=QwZ4q
+*$g_8X>&OGsRO)tf!(`3mz0jsxmAS{LcD}phU>wbQ%uoEIrEPtzZk8qMWd#Dm4;p1V#%KnD%x~Tl~;+
+DKlQymiNHH^QXl6fri--1U3`PIpDFNSVjwr!I(`e%17j{cQ8J3Fnb(789PMW8ir`G>}QJ9BxcwM2ru=
+C6Y6oyE{p|BQ}YmGQv=7c&z{(4DT*J^b9@?^Y)8R-6G3I9$b=Eu#*sd?qy(6Nwp4#sdA(TXAyzM+_+xg+I9tWZL6cLw}B>v3w^E#FG55C3`t$#mhnhVLd0jBZTfp`VN9VTn$AQwlIr8E$<3=J-
+_lk0Ftp$oRl+*9;%SZrE6Y>VItBA@lN1$P`O>77)SuF+e;_>|IRj%;9a4z*J)ey=T5W1Ie6jiBZ5DFb
+y89I?v`6qtOPA*mqQWU1x3;6)+waf=znJRICN9b;m+q`oAuBL_yQLWF80NZTHeU~o+cU?WnSxW(@+RI
+)cwagZ%-D;Fd{8g#NF8TrX!%XP*sE?fL;lT>nvBF%pC@paMU-LMcU^czb$tWP>N-)GmJai)ncUkJo5Ew0V9dBoB4f$@f=0t;W>>QS%zRopxWZrN|gOE
+`>F7&YvsP^>kFA}3q%drooMnIjaXDmq(KY>B0AZ-Ra@?J>WI44d@5#S31oRdXlsuznS1QAZHHhkZx59
+t#B720MF<|8iGEAS#s+Ax&=2kbyDjhGWHjo6Qnx=>kRdl{k7(kFP8wjVB1LBY0xvGWu4elptHjHt`Y4
+HWw;2nY=xR2TYXsBq{s=yk;CYnZzwfj|7doMi&n;lh&4$X~bbUE)jH=;(-W?wwKYsP>>38VUTbJKpfF*~Xm6Xe4qJ^Wmq5r_r@IELcS*Ei?^qR&$R3)$~~3}YwsC=gFfy1!Ng+E#N*2a`T
+5r8$uMsr6h_E|#WS@;6c-S+6_y?y(n7kDs}dnM7d-O$>6mZ8lJ6#g<0B0sMM%{_nG+S;lY0^GDNaJ{7
+#IBl)}CrUO%k86h=~){)geSHA*C5@S#H4>{~T{26oQ-;}zjtMd|IS}m8hOj5&WyUK7(MKuo-t2jbwT=
+}7uon2mCFghX7Eq-=TvxiCHfG=iO%AaDi2XSII@tk0%S3J`w)Om}Q7pvQYN;j{w9KmcS@VN?gpM-R2H
+L`1vN7c?=EoRht3F^k}7#CY8rl?I#b*G~kXQWjLKXrrckhpma+M|yII?x9NSoWU
+BCR@li(FOng>Bf8iZNK)9fuCpTrum=x=^`2ha8eghFclQpKsei!p$%Z0*9k}do_xLHBEc$`Ra1lcJ-Y
+qx9!>e$<9e|z7WZ+2b06}WtHay1~PPTWdL!p-H-glKccZ0eL
+hDGd`{`{iLuv8ONe6k_q^dIZZqpg|_4w@pplRqL&6-QsW!YOz6B6lR)3LijyieafIDAS?e8TavuZEq$
+CU9)eP5t{cqtzikUnuD(xb3_H{dyF3SRK?NjC=nZ1F+8gcxdCm*T1p-Yn*%>UI-ud_Al_~R>Mk--oy^
+EU({T?Lpp6=Q@K`d=(v=_sHb@NXArJ_a~~%gSk{#eH$*p?&NtS!32oCyf8u;LiwiuLm^^skUQ}Io0P#C_U4bT7z#62YS5TNMx@)W?y<}dBUMlyjxp%XDZfu*uEFY23l*
+V72y_vlI@cQKyH2B>v9je)E2vB#D&v-W<`FEQ`m0OCv`Ek52h5`ew6Dixfeh!h#(rv1q|CaFy9)jY&v
+vE&$+0SM0hkyCMy#U{L=tSwYu76iJB|b~OKDBS^`#V{33ce11QY-O00;mMXE##IpWxjT5dZ*3KmY(B0001RX>c!JX>N37a&BR4FJo+
+JFLGsZUt@1=ZDDR?E^v9(TVIdcHWGjLry!h%wF6t}<w=YyleWkiD#fq|?6r5+G*s`p=E%GwS*b{b{q}R!oe
+nW~Rl9RB*Lm
+yiTLZbUK|(48OeGZedvVwp5diEca~F6lqu@qswf1)-*}0
+JPIK&9o;|>Os=NyD5Ew`7VxIVKF$LT7)s_{lIs}-rc)*)hm9M4sxIP!-{#FgZmb|!D_W0=H-OMn3n3c
+ld=Z7HvT4dK4+z14&eQCV?7Jqj*@PAgIeP4|ZX)(FY>yr?hro8Z_b{|&@ds9H8Cn|9Q*34;q%wgx!I&
+?-ja7!;^Z);V8o1b34e)0NyFbbQ
+%<5Ln9aRt?-$yy#iCwT*aYTx@kJSz?hK)_<|tBww(rrpo!GBk5@~7_*l9FFVfjGkh}E+QDjKEv$$m@y##c`4Bc^uE78F@cu?0_+iU`$0Z3mDk>sa{+3G5GsTJ
+5RPp0=5CGXid9ys@5^aYqYPiu|TtVnpbK~MG@n#-O8)Us~02uU*SaU*jzOLOqQ#`lE=uXTy0(DsDN^Bz{
+~!-uv#2;>c~8;Nm84zF3cVblx5UNlY`#pSY+<&DT70x*3>R+QTC*>S-H-*?=>06?(9VCYF*%b6ivuxU
+~1xl9-AyChfKnE_tF2^bB@+J1lz