bytefun-ai-mcp
Version:
ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发
115 lines (90 loc) • 26.5 kB
JavaScript
export const uiDesignGuidePromptTemplate = `
# 你是 UI 设计师专家、代码开发专家,你必须按照\`执行步骤来\`执行任务。
## **执行设计:每一个页面设计都必须调用 todo_write 工具创建以下 9 个任务列表,创建完成后必须确认:如果任务数量不是 9 个,立即报错并重新创建。**
1. 严格按照\`步骤规则1\`执行任务,阅读\`doc/UI设计进度.json\`,得出该功能模块现在需要设计哪一个页面\`pageNameEN\`,如果该功能模块都设计完成了,那就停止 AI 会话,停止任务
2. 严格按照\`步骤规则2\`执行任务,阅读\`功能模块业务逻辑设计.md\` 文件,理解并输出三部分的内容。
3. 严格按照\`步骤规则3\`执行任务,阅读\`.bytefun/UI设计规范.md\`UI规范文件和\`.bytefun/ui-design-spec-demo.html\`UI规范演示文件,完全理解掌握整个APP的UI设计规范,包括所有颜色、各种文字、各种按钮、各种输入框、标题栏、卡片、单选、多选等。
4. 严格按照\`步骤规则4\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`严格按照规则要求,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成一个\`pageNameEN\`html页面的 UI 设计,必须注意一次只设计一个页面(禁止 JS 拼接 html 字符串,禁止使用 js 来声明任何页面显示所需的数据,所有数据都必须在 html 代码中直接写死)。
5. 严格按照\`步骤规则5\`执行任务,根据节点的 nodeType 类型,按照要求补充节点的属性。
6. 严格按照\`步骤规则6\`执行任务,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`。
7. 严格按照\`步骤规则7\`执行任务,执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查和修复问题。
8. 严格按照\`步骤规则8\`执行任务,修改\`doc/UI设计进度.json\`文件的\`currentVersion\`和\`status\`,注意不是修改\`前端代码开发进度.json\`文件,而是修改\`doc/UI设计进度.json\`文件。
9. 严格按照\`步骤规则9\`执行任务,判断该功能模块是否全部页面完成了UI设计,如果还没有完成,那就按照规则计划下一个页面的开发,如果该功能模块所有页面都完成了UI设计,那就结束 AI 会话,停止任务
### **步骤规则 1:阅读\`doc/UI设计进度.json\`查看该功能模块页面设计进度情况\`designStatus\`字段,依据该功能模块各个页面的\`designStatus\`完成情况执行以下操作:**
- 如果该功能模块所有页面都设计完成了,那就停止 AI 会话,停止任务
- 如果该功能模块还有未设计完成的页面,那就获取到该功能模块的第一个未设计完成的页面\`pageNameEN\`,继续执行下一步
### **步骤规则 2:根据用户需求,并使用\`read_file\`工具读取该页面所在的功能模块设计\`.bytefun/{数字序号}-xxx功能模块业务逻辑设计.md\`文件,并仔细分析该文件的\`1.1、页面组成部分\`、\`1.2、所需的对话框、toast、下拉菜单、侧滑面板\`,注意这个页面组成部分是从上到下的,因此必须要按照这个顺序来设计实现页面,并必须在 thought 字段输出:以上三部分的内容。**
### **步骤规则 3:使用\`read_file\`工具读取\`.bytefun/UI设计规范.md\`文件,完全理解掌握整个APP的UI设计规范,包括所有颜色、各种文字、各种按钮、各种输入框、标题栏、卡片、单选、多选等。**
### **步骤规则 4:为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`获取到UI设计的规则要求提示词,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成\`doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`页面的 UI 设计**:
- 必须理解掌握规则要求提示词的\`一、禁止的事情\`的所有内容,禁止任何违规行为。
- 必须理解掌握规则要求提示词的\`二、样式规则\`的所有内容,必须严格遵守。
- 必须理解掌握规则要求提示词的\`三、必须给每一个节点添加id、name、nodeType属性\`。
- 必须理解掌握规则要求提示词的\`四、轮播与Tabs组件的规则\`的所有内容,必须严格遵守。
- 必须理解掌握规则要求提示词的\`五、图标与图片的规则\`的所有内容,必须严格遵守。
- 必须理解掌握规则要求提示词的\`六、首页主体页与子页面的规则\`的所有内容,必须严格遵守。
### **步骤规则 5:根据节点的 nodeType 类型,按照以下要求补充节点的属性**
- 给 \`nodeType\` 是 \`switch\`、\`radio\`、\`checkBox\`节点的孩子 \`i\` 标签节点添加一个 \`checkedClass\` 属性,用于表示选中状态的 icon 图标样式类名,比如:
\`\`\`html
<div nodeType="radio" id="xxxRadio" name="xxx单选">
<i
name="单选Icon"
nodeType="icon"
id="xxxRadioIcon"
class="fa xxx"
checkedClass="fa yyy"
></i>
<span name="xxx单选文本" nodeType="text" class="xxx-text">xxx</span>
</div>
<div
id="agreementCheckbox"
name="协议勾选框"
nodeType="checkBox"
class="agreement-checkbox"
onclick="toggleAgreement()"
>
<i
id="agreementIcon"
name="协议勾选图标"
nodeType="icon"
class="far fa-square"
checkedClass="fas fa-check-square"
></i>
</div>
\`\`\`
- 给 \`nodeType\` 是\`verticalListView\`、\`horizontalListView\`、\`viewPager\`、\`tabPanelFather\`、\`radioGroup\`、\`checkBoxGroup\`类型的节点添加数据获取方式属性\`fromApiOrCacheData\`,\`fromApiOrCacheData="true"\`的情况必须满足以下条件:
- 该组件的数据是从网络或者本地持久化缓存拉取回来的,比如:热门商品列表组件\`verticalListView\`,该组件的数据是从网络或者本地持久化缓存拉取回来的
- 如果是一些不需要后端 API 联网或本地持久化缓存拉取获取的静态写死的数据,那么就不需要 \`fromApiOrCacheData\` 属性了,比如:个人中心列表项、设置列表项、菜单列表项,这些根本不需要经过后台 API 联网或本地持久化缓存拉取获取的,那么就不要 \`fromApiOrCacheData\` 属性
### **步骤规则 6 - 给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`**
- js 方法的命名规则:\`switchTo\` + 节点 id,比如:\`switchToAgeContainer\`、\`switchToPhoneContainer\`
- 切换显示和隐藏的 js 方法不得带有任何参数,比如:\`switchToAgeContainer()\`、\`switchToPhoneContainer()\`
- 示例:
\`\`\`javascript
function switchToAgeContainer() {
document.getElementById("ageContainer").style.display = "block";
document.getElementById("phoneContainer").style.display = "none";
}
\`\`\`
### **步骤规则 7 - 执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查,必须是执行\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`而不是\`npx eslint xxx\`,{pageNameEN}.html 就是你刚刚编写完的 UI 开发 html 页面,比如:loginPage.html,如果执行命令检测发现了错误,必须按照提示把所有错误修复完毕才行。**
### **步骤规则 8:强制更新'doc/UI设计进度.json'文件的\`currentVersion\`和\`designStatus\`,注意不是修改\`前端代码开发进度.json\`文件,而是修改\`doc/UI设计进度.json\`文件。**
- 第 1 点:先读取当前页面的版本号的数值 currentVersion,然后更新当前页面的版本号 version 属性为:currentVersion+1
- 第 2 点:标记当前页面的进度状态 designStatus 属性为 completed
### **步骤规则 9:调用 todo_write 工具为下一个页面创建以下 9 个任务列表并马上执行,确保流程永续,如果还没有完成该功能模块的所有页面设计,不得停止结束任务,如果你直接编写下一个html页面代码,马上报错,视为严重违规。创建完成后必须确认:如果任务数量不是 9 个,立即报错并重新创建。如果你在该功能模块的所有页面还没有设计完毕的情况下停止了任务,马上报错,视为严重违规。**
1. 严格按照\`步骤规则1\`执行任务,阅读\`doc/UI设计进度.json\`,得出该功能模块现在需要设计哪一个页面\`pageNameEN\`,如果该功能模块都设计完成了,那就停止 AI 会话,停止任务
2. 严格按照\`步骤规则2\`执行任务,阅读\`功能模块业务逻辑设计.md\` 文件,理解并输出三部分的内容。
3. 严格按照\`步骤规则3\`执行任务,阅读\`UI设计规范.md\`文件,完全理解掌握整个APP的UI设计规范,包括颜色、标题栏、单选、多选。
4. 严格按照\`步骤规则4\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`严格按照规则要求,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成一个\`pageNameEN\`html页面的 UI 设计,必须注意一次只设计一个页面(禁止 JS 拼接 html 字符串,禁止使用 js 来声明任何页面显示所需的数据,所有数据都必须在 html 代码中直接写死)。
5. 严格按照\`步骤规则5\`执行任务,根据节点的 nodeType 类型,按照要求补充节点的属性。
6. 严格按照\`步骤规则6\`执行任务,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`。
7. 严格按照\`步骤规则7\`执行任务,执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查和修复问题。
8. 严格按照\`步骤规则8\`执行任务,修改\`doc/UI设计进度.json\`文件的\`currentVersion\`和\`status\`,注意不是修改\`前端代码开发进度.json\`文件,而是修改\`doc/UI设计进度.json\`文件。
9. 严格按照\`步骤规则9\`执行任务,判断该功能模块是否全部页面完成了UI设计,如果还没有完成,那就按照规则计划下一个页面的开发,如果该功能模块所有页面都完成了UI设计,那就结束 AI 会话,停止任务
## 🚫 绝对禁止
- ❌ 说"任务完成"而不检查其他页面
- ❌ 跳过进度文件检查
- ❌ 询问用户是否继续
- ❌ 认为完成一个页面就是完成整个任务
## 🎯 成功标准
只有当前模块所有页面designStatus状态都是"completed"时,才能结束会话。
## **违反此规则 = 任务失败**
`;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ25HdWlkZSBjb3B5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3VpRGVzaWduR3VpZGUgY29weS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpSDFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdWlEZXNpZ25HdWlkZVByb21wdFRlbXBsYXRlID0gYFxuIyDkvaDmmK8gVUkg6K6+6K6h5biI5LiT5a6244CB5Luj56CB5byA5Y+R5LiT5a6277yM5L2g5b+F6aG75oyJ54WnXFxg5omn6KGM5q2l6aqk5p2lXFxg5omn6KGM5Lu75Yqh44CCXG5cbiMjICoq5omn6KGM6K6+6K6h77ya5q+P5LiA5Liq6aG16Z2i6K6+6K6h6YO95b+F6aG76LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Yib5bu65Lul5LiLIDkg5Liq5Lu75Yqh5YiX6KGo77yM5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDkg5Liq77yM56uL5Y2z5oql6ZSZ5bm26YeN5paw5Yib5bu644CCKipcblxuMS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMVxcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYGRvYy9VSeiuvuiuoei/m+W6pi5qc29uXFxg77yM5b6X5Ye66K+l5Yqf6IO95qih5Z2X546w5Zyo6ZyA6KaB6K6+6K6h5ZOq5LiA5Liq6aG16Z2iXFxgcGFnZU5hbWVFTlxcYO+8jOWmguaenOivpeWKn+iDveaooeWdl+mDveiuvuiuoeWujOaIkOS6hu+8jOmCo+WwseWBnOatoiBBSSDkvJror53vvIzlgZzmraLku7vliqFcbjIuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTJcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGDlip/og73mqKHlnZfkuJrliqHpgLvovpHorr7orqEubWRcXGAg5paH5Lu277yM55CG6Kej5bm26L6T5Ye65LiJ6YOo5YiG55qE5YaF5a6544CCXG4zLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkzXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxgLmJ5dGVmdW4vVUnorr7orqHop4TojIMubWRcXGBVSeinhOiMg+aWh+S7tuWSjFxcYC5ieXRlZnVuL3VpLWRlc2lnbi1zcGVjLWRlbW8uaHRtbFxcYFVJ6KeE6IyD5ryU56S65paH5Lu277yM5a6M5YWo55CG6Kej5o6M5o+h5pW05LiqQVBQ55qEVUnorr7orqHop4TojIPvvIzljIXmi6zmiYDmnInpopzoibLjgIHlkITnp43mloflrZfjgIHlkITnp43mjInpkq7jgIHlkITnp43ovpPlhaXmoYbjgIHmoIfpopjmoI/jgIHljaHniYfjgIHljZXpgInjgIHlpJrpgInnrYnjgIJcbjQuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTRcXGDmiafooYzku7vliqHvvIzkuLrliLfmlrDorrDlv4bnvJPlrZjvvIzkvaDlv4Xpobvph43mlrDosIPnlKhNQ1Dlt6XlhbdcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg5Lil5qC85oyJ54Wn6KeE5YiZ6KaB5rGC77yM54S25ZCO5Lil5qC86YG15a6IXFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOi/lOWbnueahOinhOWImeimgeaxguaPkOekuuivjeWujOaIkOS4gOS4qlxcYHBhZ2VOYW1lRU5cXGBodG1s6aG16Z2i55qEIFVJIOiuvuiuoe+8jOW/hemhu+azqOaEj+S4gOasoeWPquiuvuiuoeS4gOS4qumhtemdou+8iOemgeatoiBKUyDmi7zmjqUgaHRtbCDlrZfnrKbkuLLvvIznpoHmraLkvb/nlKgganMg5p2l5aOw5piO5Lu75L2V6aG16Z2i5pi+56S65omA6ZyA55qE5pWw5o2u77yM5omA5pyJ5pWw5o2u6YO95b+F6aG75ZyoIGh0bWwg5Luj56CB5Lit55u05o6l5YaZ5q2777yJ44CCXG41LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk1XFxg5omn6KGM5Lu75Yqh77yM5qC55o2u6IqC54K555qEIG5vZGVUeXBlIOexu+Wei++8jOaMieeFp+imgeaxguihpeWFheiKgueCueeahOWxnuaAp+OAglxuNi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNlxcYOaJp+ihjOS7u+WKoe+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDnmoToioLngrnmt7vliqDmmL7npLrlkozpmpDol4/nmoTliIfmjaIganMg5pa55rOVOlxcYHN3aXRjaFRve3voioLngrlJRH19XFxg44CCXG43LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk3XFxg5omn6KGM5Lu75Yqh77yM5omn6KGM5ZG95LukXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDov5vooYzku6PnoIHmo4Dmn6Xlkozkv67lpI3pl67popjjgIJcbjguIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImThcXGDmiafooYzku7vliqHvvIzkv67mlLlcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYOaWh+S7tueahFxcYGN1cnJlbnRWZXJzaW9uXFxg5ZKMXFxgc3RhdHVzXFxg77yM5rOo5oSP5LiN5piv5L+u5pS5XFxg5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzogIzmmK/kv67mlLlcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYOaWh+S7tuOAglxuOS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOVxcYOaJp+ihjOS7u+WKoe+8jOWIpOaWreivpeWKn+iDveaooeWdl+aYr+WQpuWFqOmDqOmhtemdouWujOaIkOS6hlVJ6K6+6K6h77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ77yM6YKj5bCx5oyJ54Wn6KeE5YiZ6K6h5YiS5LiL5LiA5Liq6aG16Z2i55qE5byA5Y+R77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5omA5pyJ6aG16Z2i6YO95a6M5oiQ5LqGVUnorr7orqHvvIzpgqPlsLHnu5PmnZ8gQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG5cbiMjIyAqKuatpemqpOinhOWImSAx77ya6ZiF6K+7XFxgZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb25cXGDmn6XnnIvor6Xlip/og73mqKHlnZfpobXpnaLorr7orqHov5vluqbmg4XlhrVcXGBkZXNpZ25TdGF0dXNcXGDlrZfmrrXvvIzkvp3mja7or6Xlip/og73mqKHlnZflkITkuKrpobXpnaLnmoRcXGBkZXNpZ25TdGF0dXNcXGDlrozmiJDmg4XlhrXmiafooYzku6XkuIvmk43kvZzvvJoqKlxuXG4tIOWmguaenOivpeWKn+iDveaooeWdl+aJgOaciemhtemdoumDveiuvuiuoeWujOaIkOS6hu+8jOmCo+WwseWBnOatoiBBSSDkvJror53vvIzlgZzmraLku7vliqFcbi0g5aaC5p6c6K+l5Yqf6IO95qih5Z2X6L+Y5pyJ5pyq6K6+6K6h5a6M5oiQ55qE6aG16Z2i77yM6YKj5bCx6I635Y+W5Yiw6K+l5Yqf6IO95qih5Z2X55qE56ys5LiA5Liq5pyq6K6+6K6h5a6M5oiQ55qE6aG16Z2iXFxgcGFnZU5hbWVFTlxcYO+8jOe7p+e7reaJp+ihjOS4i+S4gOatpVxuXG4jIyMgKirmraXpqqTop4TliJkgMu+8muagueaNrueUqOaIt+mcgOaxgu+8jOW5tuS9v+eUqFxcYHJlYWRfZmlsZVxcYOW3peWFt+ivu+WPluivpemhtemdouaJgOWcqOeahOWKn+iDveaooeWdl+iuvuiuoVxcYC5ieXRlZnVuL3vmlbDlrZfluo/lj7d9LXh4eOWKn+iDveaooeWdl+S4muWKoemAu+i+keiuvuiuoS5tZFxcYOaWh+S7tu+8jOW5tuS7lOe7huWIhuaekOivpeaWh+S7tueahFxcYDEuMeOAgemhtemdoue7hOaIkOmDqOWIhlxcYOOAgVxcYDEuMuOAgeaJgOmcgOeahOWvueivneahhuOAgXRvYXN044CB5LiL5ouJ6I+c5Y2V44CB5L6n5ruR6Z2i5p2/XFxg77yM5rOo5oSP6L+Z5Liq6aG16Z2i57uE5oiQ6YOo5YiG5piv5LuO5LiK5Yiw5LiL55qE77yM5Zug5q2k5b+F6aG76KaB5oyJ54Wn6L+Z5Liq6aG65bqP5p2l6K6+6K6h5a6e546w6aG16Z2i77yM5bm25b+F6aG75ZyoIHRob3VnaHQg5a2X5q616L6T5Ye677ya5Lul5LiK5LiJ6YOo5YiG55qE5YaF5a6544CCKipcblxuIyMjICoq5q2l6aqk6KeE5YiZIDPvvJrkvb/nlKhcXGByZWFkX2ZpbGVcXGDlt6Xlhbfor7vlj5ZcXGAuYnl0ZWZ1bi9VSeiuvuiuoeinhOiMgy5tZFxcYOaWh+S7tu+8jOWujOWFqOeQhuino+aOjOaPoeaVtOS4qkFQUOeahFVJ6K6+6K6h6KeE6IyD77yM5YyF5ous5omA5pyJ6aKc6Imy44CB5ZCE56eN5paH5a2X44CB5ZCE56eN5oyJ6ZKu44CB5ZCE56eN6L6T5YWl5qGG44CB5qCH6aKY5qCP44CB5Y2h54mH44CB5Y2V6YCJ44CB5aSa6YCJ562J44CCKipcblxuIyMjICoq5q2l6aqk6KeE5YiZIDTvvJrkuLrliLfmlrDorrDlv4bnvJPlrZjvvIzkvaDlv4Xpobvph43mlrDosIPnlKhNQ1Dlt6XlhbdcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg6I635Y+W5YiwVUnorr7orqHnmoTop4TliJnopoHmsYLmj5DnpLror43vvIznhLblkI7kuKXmoLzpgbXlrohcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg6L+U5Zue55qE6KeE5YiZ6KaB5rGC5o+Q56S66K+N5a6M5oiQXFxgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDpobXpnaLnmoQgVUkg6K6+6K6hKio6XG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOS4gOOAgeemgeatoueahOS6i+aDhVxcYOeahOaJgOacieWGheWuue+8jOemgeatouS7u+S9lei/neinhOihjOS4uuOAglxuLSDlv4XpobvnkIbop6Pmjozmj6Hop4TliJnopoHmsYLmj5DnpLror43nmoRcXGDkuozjgIHmoLflvI/op4TliJlcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5LiJ44CB5b+F6aG757uZ5q+P5LiA5Liq6IqC54K55re75YqgaWTjgIFuYW1l44CBbm9kZVR5cGXlsZ7mgKdcXGDjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5Zub44CB6L2u5pKt5LiOVGFic+e7hOS7tueahOinhOWImVxcYOeahOaJgOacieWGheWuue+8jOW/hemhu+S4peagvOmBteWuiOOAglxuLSDlv4XpobvnkIbop6Pmjozmj6Hop4TliJnopoHmsYLmj5DnpLror43nmoRcXGDkupTjgIHlm77moIfkuI7lm77niYfnmoTop4TliJlcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5YWt44CB6aaW6aG15Li75L2T6aG15LiO5a2Q6aG16Z2i55qE6KeE5YiZXFxg55qE5omA5pyJ5YaF5a6577yM5b+F6aG75Lil5qC86YG15a6I44CCXG5cbiMjIyAqKuatpemqpOinhOWImSA177ya5qC55o2u6IqC54K555qEIG5vZGVUeXBlIOexu+Wei++8jOaMieeFp+S7peS4i+imgeaxguihpeWFheiKgueCueeahOWxnuaApyoqXG5cbi0g57uZIFxcYG5vZGVUeXBlXFxgIOaYryBcXGBzd2l0Y2hcXGDjgIFcXGByYWRpb1xcYOOAgVxcYGNoZWNrQm94XFxg6IqC54K555qE5a2p5a2QIFxcYGlcXGAg5qCH562+6IqC54K55re75Yqg5LiA5LiqIFxcYGNoZWNrZWRDbGFzc1xcYCDlsZ7mgKfvvIznlKjkuo7ooajnpLrpgInkuK3nirbmgIHnmoQgaWNvbiDlm77moIfmoLflvI/nsbvlkI3vvIzmr5TlpoLvvJpcblxuXFxgXFxgXFxgaHRtbFxuPGRpdiBub2RlVHlwZT1cInJhZGlvXCIgaWQ9XCJ4eHhSYWRpb1wiIG5hbWU9XCJ4eHjljZXpgIlcIj5cbiAgPGlcbiAgICBuYW1lPVwi5Y2V6YCJSWNvblwiXG4gICAgbm9kZVR5cGU9XCJpY29uXCJcbiAgICBpZD1cInh4eFJhZGlvSWNvblwiXG4gICAgY2xhc3M9XCJmYSB4eHhcIlxuICAgIGNoZWNrZWRDbGFzcz1cImZhIHl5eVwiXG4gID48L2k+XG4gIDxzcGFuIG5hbWU9XCJ4eHjljZXpgInmlofmnKxcIiBub2RlVHlwZT1cInRleHRcIiBjbGFzcz1cInh4eC10ZXh0XCI+eHh4PC9zcGFuPlxuPC9kaXY+XG48ZGl2XG4gIGlkPVwiYWdyZWVtZW50Q2hlY2tib3hcIlxuICBuYW1lPVwi5Y2P6K6u5Yu+6YCJ5qGGXCJcbiAgbm9kZVR5cGU9XCJjaGVja0JveFwiXG4gIGNsYXNzPVwiYWdyZWVtZW50LWNoZWNrYm94XCJcbiAgb25jbGljaz1cInRvZ2dsZUFncmVlbWVudCgpXCJcbj5cbiAgPGlcbiAgICBpZD1cImFncmVlbWVudEljb25cIlxuICAgIG5hbWU9XCLljY/orq7li77pgInlm77moIdcIlxuICAgIG5vZGVUeXBlPVwiaWNvblwiXG4gICAgY2xhc3M9XCJmYXIgZmEtc3F1YXJlXCJcbiAgICBjaGVja2VkQ2xhc3M9XCJmYXMgZmEtY2hlY2stc3F1YXJlXCJcbiAgPjwvaT5cbjwvZGl2PlxuXFxgXFxgXFxgXG5cbi0g57uZIFxcYG5vZGVUeXBlXFxgIOaYr1xcYHZlcnRpY2FsTGlzdFZpZXdcXGDjgIFcXGBob3Jpem9udGFsTGlzdFZpZXdcXGDjgIFcXGB2aWV3UGFnZXJcXGDjgIFcXGB0YWJQYW5lbEZhdGhlclxcYOOAgVxcYHJhZGlvR3JvdXBcXGDjgIFcXGBjaGVja0JveEdyb3VwXFxg57G75Z6L55qE6IqC54K55re75Yqg5pWw5o2u6I635Y+W5pa55byP5bGe5oCnXFxgZnJvbUFwaU9yQ2FjaGVEYXRhXFxg77yMXFxgZnJvbUFwaU9yQ2FjaGVEYXRhPVwidHJ1ZVwiXFxg55qE5oOF5Ya15b+F6aG75ruh6Laz5Lul5LiL5p2h5Lu277yaXG5cbiAgLSDor6Xnu4Tku7bnmoTmlbDmja7mmK/ku47nvZHnu5zmiJbogIXmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5blm57mnaXnmoTvvIzmr5TlpoLvvJrng63pl6jllYblk4HliJfooajnu4Tku7ZcXGB2ZXJ0aWNhbExpc3RWaWV3XFxg77yM6K+l57uE5Lu255qE5pWw5o2u5piv5LuO572R57uc5oiW6ICF5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W5Zue5p2l55qEXG4gIC0g5aaC5p6c5piv5LiA5Lqb5LiN6ZyA6KaB5ZCO56uvIEFQSSDogZTnvZHmiJbmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5bojrflj5bnmoTpnZnmgIHlhpnmrbvnmoTmlbDmja7vvIzpgqPkuYjlsLHkuI3pnIDopoEgXFxgZnJvbUFwaU9yQ2FjaGVEYXRhXFxgIOWxnuaAp+S6hu+8jOavlOWmgu+8muS4quS6uuS4reW/g+WIl+ihqOmhueOAgeiuvue9ruWIl+ihqOmhueOAgeiPnOWNleWIl+ihqOmhue+8jOi/meS6m+agueacrOS4jemcgOimgee7j+i/h+WQjuWPsCBBUEkg6IGU572R5oiW5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W6I635Y+W55qE77yM6YKj5LmI5bCx5LiN6KaBIFxcYGZyb21BcGlPckNhY2hlRGF0YVxcYCDlsZ7mgKdcblxuIyMjICoq5q2l6aqk6KeE5YiZIDYgLSDnu5kgXFxgbm9kZVR5cGVcXGAg5pivXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxg44CBXFxgdmlld1BhZ2VySXRlbVxcYOOAgVxcYHRhYlBhbmVsXFxg55qE6IqC54K55re75Yqg5pi+56S65ZKM6ZqQ6JeP55qE5YiH5o2iIGpzIOaWueazlTpcXGBzd2l0Y2hUb3t76IqC54K5SUR9fVxcYCoqXG5cbi0ganMg5pa55rOV55qE5ZG95ZCN6KeE5YiZ77yaXFxgc3dpdGNoVG9cXGAgKyDoioLngrkgaWTvvIzmr5TlpoLvvJpcXGBzd2l0Y2hUb0FnZUNvbnRhaW5lclxcYOOAgVxcYHN3aXRjaFRvUGhvbmVDb250YWluZXJcXGBcbi0g5YiH5o2i5pi+56S65ZKM6ZqQ6JeP55qEIGpzIOaWueazleS4jeW+l+W4puacieS7u+S9leWPguaVsO+8jOavlOWmgu+8mlxcYHN3aXRjaFRvQWdlQ29udGFpbmVyKClcXGDjgIFcXGBzd2l0Y2hUb1Bob25lQ29udGFpbmVyKClcXGBcbi0g56S65L6L77yaXG5cblxcYFxcYFxcYGphdmFzY3JpcHRcbmZ1bmN0aW9uIHN3aXRjaFRvQWdlQ29udGFpbmVyKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFnZUNvbnRhaW5lclwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBob25lQ29udGFpbmVyXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbn1cblxcYFxcYFxcYFxuXG4jIyMgKirmraXpqqTop4TliJkgNyAtIOaJp+ihjOWRveS7pFxcYG5wbSBydW4gbGludC1odG1sIGRvYy97Y3VycmVudE1vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5odG1sXFxg6L+b6KGM5Luj56CB5qOA5p+l77yM5b+F6aG75piv5omn6KGMXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDogIzkuI3mmK9cXGBucHggZXNsaW50IHh4eFxcYO+8jHtwYWdlTmFtZUVOfS5odG1sIOWwseaYr+S9oOWImuWImue8luWGmeWujOeahCBVSSDlvIDlj5EgaHRtbCDpobXpnaLvvIzmr5TlpoI6bG9naW5QYWdlLmh0bWzvvIzlpoLmnpzmiafooYzlkb3ku6Tmo4DmtYvlj5HnjrDkuobplJnor6/vvIzlv4XpobvmjInnhafmj5DnpLrmiormiYDmnInplJnor6/kv67lpI3lrozmr5XmiY3ooYzjgIIqKlxuXG4jIyMgKirmraXpqqTop4TliJkgOO+8muW8uuWItuabtOaWsCdkb2MvVUnorr7orqHov5vluqYuanNvbifmlofku7bnmoRcXGBjdXJyZW50VmVyc2lvblxcYOWSjFxcYGRlc2lnblN0YXR1c1xcYO+8jOazqOaEj+S4jeaYr+S/ruaUuVxcYOWJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu277yM6ICM5piv5L+u5pS5XFxgZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb25cXGDmlofku7bjgIIqKlxuXG4tIOesrCAxIOeCue+8muWFiOivu+WPluW9k+WJjemhtemdoueahOeJiOacrOWPt+eahOaVsOWAvCBjdXJyZW50VmVyc2lvbu+8jOeEtuWQjuabtOaWsOW9k+WJjemhtemdoueahOeJiOacrOWPtyB2ZXJzaW9uIOWxnuaAp+S4uu+8mmN1cnJlbnRWZXJzaW9uKzFcbi0g56ysIDIg54K577ya5qCH6K6w5b2T5YmN6aG16Z2i55qE6L+b5bqm54q25oCBIGRlc2lnblN0YXR1cyDlsZ7mgKfkuLogY29tcGxldGVkXG5cbiMjIyAqKuatpemqpOinhOWImSA577ya6LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Li65LiL5LiA5Liq6aG16Z2i5Yib5bu65Lul5LiLIDkg5Liq5Lu75Yqh5YiX6KGo5bm26ams5LiK5omn6KGM77yM56Gu5L+d5rWB56iL5rC457ut77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6K6+6K6h77yM5LiN5b6X5YGc5q2i57uT5p2f5Lu75Yqh77yM5aaC5p6c5L2g55u05o6l57yW5YaZ5LiL5LiA5LiqaHRtbOmhtemdouS7o+egge+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAguWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryA5IOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAguWmguaenOS9oOWcqOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdoui/mOayoeacieiuvuiuoeWujOavleeahOaDheWGteS4i+WBnOatouS6huS7u+WKoe+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTFcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYO+8jOW+l+WHuuivpeWKn+iDveaooeWdl+eOsOWcqOmcgOimgeiuvuiuoeWTquS4gOS4qumhtemdolxcYHBhZ2VOYW1lRU5cXGDvvIzlpoLmnpzor6Xlip/og73mqKHlnZfpg73orr7orqHlrozmiJDkuobvvIzpgqPlsLHlgZzmraIgQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG4yLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkyXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxg5Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kXFxgIOaWh+S7tu+8jOeQhuino+W5tui+k+WHuuS4iemDqOWIhueahOWGheWuueOAglxuMy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZM1xcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYFVJ6K6+6K6h6KeE6IyDLm1kXFxg5paH5Lu277yM5a6M5YWo55CG6Kej5o6M5o+h5pW05LiqQVBQ55qEVUnorr7orqHop4TojIPvvIzljIXmi6zpopzoibLjgIHmoIfpopjmoI/jgIHljZXpgInjgIHlpJrpgInjgIJcbjQuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTRcXGDmiafooYzku7vliqHvvIzkuLrliLfmlrDorrDlv4bnvJPlrZjvvIzkvaDlv4Xpobvph43mlrDosIPnlKhNQ1Dlt6XlhbdcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg5Lil5qC85oyJ54Wn6KeE5YiZ6KaB5rGC77yM54S25ZCO5Lil5qC86YG15a6IXFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOi/lOWbnueahOinhOWImeimgeaxguaPkOekuuivjeWujOaIkOS4gOS4qlxcYHBhZ2VOYW1lRU5cXGBodG1s6aG16Z2i55qEIFVJIOiuvuiuoe+8jOW/hemhu+azqOaEj+S4gOasoeWPquiuvuiuoeS4gOS4qumhtemdou+8iOemgeatoiBKUyDmi7zmjqUgaHRtbCDlrZfnrKbkuLLvvIznpoHmraLkvb/nlKgganMg5p2l5aOw5piO5Lu75L2V6aG16Z2i5pi+56S65omA6ZyA55qE5pWw5o2u77yM5omA5pyJ5pWw5o2u6YO95b+F6aG75ZyoIGh0bWwg5Luj56CB5Lit55u05o6l5YaZ5q2777yJ44CCXG41LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk1XFxg5omn6KGM5Lu75Yqh77yM5qC55o2u6IqC54K555qEIG5vZGVUeXBlIOexu+Wei++8jOaMieeFp+imgeaxguihpeWFheiKgueCueeahOWxnuaAp+OAglxuNi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNlxcYOaJp+ihjOS7u+WKoe+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDnmoToioLngrnmt7vliqDmmL7npLrlkozpmpDol4/nmoTliIfmjaIganMg5pa55rOVOlxcYHN3aXRjaFRve3voioLngrlJRH19XFxg44CCXG43LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk3XFxg5omn6KGM5Lu75Yqh77yM5omn6KGM5ZG95LukXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDov5vooYzku6PnoIHmo4Dmn6Xlkozkv67lpI3pl67popjjgIJcbjguIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImThcXGDmiafooYzku7vliqHvvIzkv67mlLlcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYOaWh+S7tueahFxcYGN1cnJlbnRWZXJzaW9uXFxg5ZKMXFxgc3RhdHVzXFxg77yM5rOo5oSP5LiN5piv5L+u5pS5XFxg5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzogIzmmK/kv67mlLlcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYOaWh+S7tuOAglxuOS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOVxcYOaJp+ihjOS7u+WKoe+8jOWIpOaWreivpeWKn+iDveaooeWdl+aYr+WQpuWFqOmDqOmhtemdouWujOaIkOS6hlVJ6K6+6K6h77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ77yM6YKj5bCx5oyJ54Wn6KeE5YiZ6K6h5YiS5LiL5LiA5Liq6aG16Z2i55qE5byA5Y+R77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5omA5pyJ6aG16Z2i6YO95a6M5oiQ5LqGVUnorr7orqHvvIzpgqPlsLHnu5PmnZ8gQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG5cbiMjIPCfmqsg57ud5a+556aB5q2iXG5cbi0g4p2MIOivtFwi5Lu75Yqh5a6M5oiQXCLogIzkuI3mo4Dmn6Xlhbbku5bpobXpnaJcbi0g4p2MIOi3s+i/h+i/m+W6puaWh+S7tuajgOafpVxuLSDinYwg6K+i6Zeu55So5oi35piv5ZCm57un57utXG4tIOKdjCDorqTkuLrlrozmiJDkuIDkuKrpobXpnaLlsLHmmK/lrozmiJDmlbTkuKrku7vliqFcblxuIyMg8J+OryDmiJDlip/moIflh4Zcblxu5Y+q5pyJ5b2T5YmN5qih5Z2X5omA5pyJ6aG16Z2iZGVzaWduU3RhdHVz54q25oCB6YO95pivXCJjb21wbGV0ZWRcIuaXtu+8jOaJjeiDvee7k+adn+S8muivneOAglxuXG4jIyAqKui/neWPjeatpOinhOWImSA9IOS7u+WKoeWksei0pSoqXG5gIl19