bytefun-ai-mcp
Version:
ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发
313 lines (247 loc) • 36.4 kB
JavaScript
export const uiDeclarativePromptTemplate = `# 你是一个前端开发,你需要根据业务需求,根据\`UI设计要求\`、\`组件声明式写法规则\`、\`高级组件的使用场景和固定结构\`等来实现业务需求的UI界面
## 输出的json文件路径和json格式
- 输出路径:必须是\`doc/{moduleNameEN}/{pageNameEN}/{pageNameEN}.json\`,其中\`moduleNameEN\`就是功能模块的英文名字,\`pageNameEN\`就是该页面的英文名字
## 设计规范
- 页面的左右边距是16px
- 当需要icon图标时必须使用FontAwesome图标,比如:iconClass: "fas fa-weixin"
- 当需要img图片时,src使用图片地址:\`https://oss.bytefungo.com/f1/showImg1.jpg\`),其中结尾的’showImg1'可以换为从1到30的数字,1~30的数字必须随机挑选,不得每个页面每个图片都使用同一个数字。写法比如:\`src="https://oss.bytefungo.com/f1/showImg17.jpg"\`
- 绝对不能使用emoji表情符号,不得使用任何emoji表情符号,请使用icon节点来代替。
- 手机状态栏phoneTopStatusBar节点的高度必须设计为22px
## 组件声明式写法规则
- 使用json格式来描述UI界面
- 使用\`children\`属性来描述组件的子组件
- 每个组件都必须包含:id、name、vtype、x、y、w、h属性
- id属性必须是英文或数字,且不能以数字开头,并且整个页面id属性的值必须唯一
- name属性必须是中文或数字,并且不能包含特殊字符
- vtype属性的值必须是\`组件库与属性\` 中的一个vtype值
- x、y、w、h属性的值必须是整数,x、y坐标是相对于父容器的左上角,w、h的值必须是具体像素值,不能是百分比
- 特别注意,x、y坐标需要考虑页面的边距、父容器的边距、兄弟组件的间距,例如,父容器的边距是10px,那么第一个子组件的x坐标必须是10px,而不是0px,而第二个子组件的x坐标必须是10px+第一个子组件的宽度+间距,例如,第一个子组件的宽度是100px,间距是10px,那么第二个子组件的x坐标必须是120px
- 必须注意字符串的值如果出现双引号必须进行转义,因为这是json字段的值,否则会让json出错
- 轮播、TAB选项卡、底部TAB导航组件的每一页内容必须完整,不得省略任何内容组件。比如有3页,那么每一页的内容组件都不能省略。
## 高级组件的使用场景和固定结构
### 单选组\`radioGroup\`
#### \`radioGroup\`使用场景
- 当一个页面需要展示多个互斥的选项时,使用\`radioGroup\`组件
- 例如,需要选择支付方式时,必须使用\`radioGroup\`组件
#### \`radioGroup\`固定结构
- \`radioGroup\`组件必须包含N个\`iconRadio\`或\`iconTextRadio\`单选项组件
### 多选组\`checkBoxGroup\`
#### \`checkBoxGroup\`使用场景
- 当一个页面需要展示多个可选的选项时,使用\`checkBoxGroup\`组件
- 例如,需要选择用户的爱好时,必须使用\`checkBoxGroup\`组件
#### \`checkBoxGroup\`固定结构
- \`checkBoxGroup\`组件必须包含N个\`iconCheckbox\`或\`iconTextCheckbox\`多选项组件
### 多状态容器\`multiStateContainer\`
#### \`multiStateContainer\`使用场景
- 当一个组件需要在不同状态下展示不同的内容时,并且不是通过点击、tabMenuBar、轮播等方式切换状态时,使用\`multiStateContainer\`组件
- 例如,已登录和未登录状态下展示不同的内容,必须使用\`multiStateContainer\`组件
- 例如,当A条件下显示A按钮,当B条件下显示B按钮,比如,在引导页滑动到最后一页显示立即体验按钮,否则显示下一步按钮
- 总结例子:当A条件下显示A的UI,当B条件下显示B的UI,以此类推,而且不是通过点击触发的,那么就使用多状态容器\`multiStateContainer\`
#### \`multiStateContainer\`固定结构
- \`multiStateContainer\`组件必须包含一个或多个\`oneStateContentContainer\`子组件
- 每个\`oneStateContentContainer\`子组件必须包含一个或多个组件
### 流式自动换行布局容器vtype="inlineBlockAndWrap"组件
#### \`inlineBlockAndWrap\`使用场景
- 当需要展示多个组件横排,并且这些组件需要自动换行布局时,使用\`inlineBlockAndWrap\`组件
- 例如,需要展示多个商品标签时,必须使用\`inlineBlockAndWrap\`组件
- 例如:多个标签tag、热门搜索tag、商品tag等等标签tag类场景,必须使用\`inlineBlockAndWrap\`组件
- 禁止使用的场景:功能入口、单选、多选、列表、选项卡tab。
#### \`inlineBlockAndWrap\`固定结构
- \`inlineBlockAndWrap\`组件必须包含N个\`blockItem\`组件
### 轮播
#### 轮播使用场景
- 当一个页面需要展示多个轮播项时,使用\`轮播\`组件
- 例如,需要轮播展示多个活动图和活动信息时,必须使用\`轮播\`组件
#### 轮播固定结构
- \`轮播\`包含N个\`轮播卡片\`内容项组件和1个\`轮播指示器\`组件
- \`轮播指示器\`组件必须包含着N个\`rect\`或\`circle\`组件,其中\`rect\`或\`circle\`组件不允许添加孩子,\`rect\`或\`circle\`组件就是指示器的圆点
### tab选项卡
#### tab选项卡使用场景
- 当一个页面需要展示多个tab项时,使用\`tab选项卡\`组件
- 例如,在按分类展示商品时,可以将多个分类使用tab菜单栏展示,每一种分类就是一个tab项,每一个tab的内容区就是该分类的商品列表
#### tab选项卡固定结构
- \`tab选项卡\`组件必须包含N个\`oneTabContentContainer\`子组件和1个\`tab选项卡菜单栏\`组件
### 底部tab导航
#### \`底部tab导航\`使用场景
- 当一个页面需要展示多个底部导航项时,使用\`底部tab导航\`组件,\`底部tab导航\`必须要和子页面\`subPage\`配合使用,目的是将复杂的首页底部导航功能通过子页面\`subPage\`来解耦,降低首页的复杂度
- 一般首页是各个功能的入口,因此首页是由多个子页面组成的主体页面,比如:购物APP首页一般有一个\`底部tab导航\`组件(比如:首页、活动、购物车、消息、我的),点击底部功能导航栏的item会切换到对应的tab子页面,每个tab子页面负责自己的独立的业务逻辑,比如购物车tab就负责购物车相关业务逻辑。
- 首页只是一个功能导航框架只需要设计底部功能导航栏和添加子页面,\`subPage\`子页面里面的UI元素不需要实现,其他任务会有专门的首页各个子页面的具体UI设计实现环节
- 例如,电商首页底部导航一般有首页、分类、购物车、我的四个底部导航项,必须使用\`底部tab导航\`组件,每个底部导航项对应一个\`subPage\`子页面
#### \`底部tab导航\`固定结构
- 底部tab导航组件必须是\`底部tab导航\`必须包含着N个\`subPage\`子页面组件与1个\`bottomTabNavigateBar\`组件
- \`subPage\`子页面组件里绝对不能有孩子组件,绝对不能有任何占位内容
- \`bottomTabNavigateBar\`组件必须包含N个\`bottomTabNavigateBarItem\`组件
- \`subPage\`子页面组件与\`bottomTabNavigateBarItem\`组件的数量是相同的
### 操作栏:\`topNavigateBar\`和\`bottomOperateBar\`
#### \`topNavigateBar\`和\`bottomOperateBar\`使用场景
- 当需要在页面顶部展示一个导航栏或时,使用\`topNavigateBar\`组件,同理底部需要使用\`bottomOperateBar\`
- 例如,在商品详情页顶部展示一个返回按钮和商品名称时,必须使用\`topNavigateBar\`组件
- 例如,在商品详情页底部展示一个加入购物车按钮和购买按钮时,必须使用\`bottomOperateBar\`组件
### 弹窗: \`dialog\`、\`toast\`、\`dropDownMenu\`、\`sideSlidePanel\`
#### 使用场景
- 当需要在页面上展示一个toast提示时,使用\`toast\`组件
- 当需要在页面上展示一个弹窗时,使用\`dialog\`组件
- 当需要在页面上展示一个下拉菜单时,使用\`dropDownMenu\`组件
- 当需要在页面上展示一个侧滑面板时,使用\`sideSlidePanel\`组件,注意,隐私协议、用户协议、帮助等等都不得使用侧滑面板,必须使用页面来实现
### 系统顶部状态栏: \`phoneTopStatusBar\`
#### \`phoneTopStatusBar\`使用场景
- 每个页面都必须要定义手机顶部状态栏\`phoneTopStatusBar\`,json如下:
\`\`\` json
{
"vtype": "phoneTopStatusBar",
"id": "phoneTopStatusBar",
"name": "手机顶部状态栏",
"x": 0,
"y": 0,
"w": 393,
"h": 22,
"children": [
{
"vtype": "text",
"id": "timeText",
"name": "时间显示",
"x": 16,
"y": 4,
"w": 56,
"h": 14,
"fontSize": 14,
"text": "9:41"
},
{
"vtype": "horizontalLinearLayout",
"id": "statusIconsLayout",
"name": "状态图标布局",
"x": 320,
"y": 4,
"w": 73,
"h": 14,
"children": [
{
"vtype": "icon",
"id": "signalIcon",
"name": "信号强度图标",
"x": 0,
"y": 0,
"w": 14,
"h": 14,
"iconClass": "fas fa-signal"
},
{
"vtype": "icon",
"id": "wifiIcon",
"name": "WiFi图标",
"x": 16,
"y": 0,
"w": 14,
"h": 14,
"iconClass": "fas fa-wifi"
},
{
"vtype": "icon",
"id": "batteryIcon",
"name": "电池图标",
"x": 32,
"y": 0,
"w": 14,
"h": 14,
"iconClass": "fas fa-battery-full"
}
]
}
]
}
\`\`\`
#### \`phoneTopStatusBar\`固定结构
- \`phoneTopStatusBar\`组件必须包含着1个展示时间的\`text\`文本组件和1个展示信号强度、WiFi、电池\`horizontalLinearLayout\`线性布局组件
- \`horizontalLinearLayout\`必须包含着信号强度、WiFi、电池三个\`icon\`图标组件
## 数据获取方式\`fromApiOrCacheData: true\`的设置条件:
- vtype必须是\`verticalListView\`、\`horizontalListView\`、\`viewPager\`、\`tabContainer\`、\`radioGroup\`、\`checkBoxGroup\`、\`inlineBlockAndWrap\`类型的组件
- 该组件的数据是从网络或者本地持久化缓存拉取回来的,比如:热门商品列表组件\`verticalListView\`,该组件的数据是从网络或者本地持久化缓存拉取回来的
- 如果是一些不需要后端API联网或本地持久化缓存拉取获取的静态写死的数据,那么就不需要fromApiOrCacheData属性了,比如:个人中心列表项、设置列表项、菜单列表项,这些根本不需要经过后台API联网或本地持久化缓存拉取获取的,那么就不要fromApiOrCacheData属性
## 组件库与属性
### 文本
- vtype类型:\`primaryText\`、\`infoText\`、\`level1TitleText\`、\`level2TitleText\`、\`hintText\`、\`errorText\`、\`successText\`
- 需设属性:text
### 按钮
- vtype类型:\`primaryButton\`、\`secondaryButton\`、\`textButton\`、\`iconButton\`
- 需设属性:text、size(可选枚举值:\`small\`、\`medium\`、\`large\`)
### 输入框
- vtype类型:\`input\`、\`numberInput\`、\`passwordInput\`、\`phoneInput\`、\`verifyCodeInput\`、\`emailInput\`、\`searchInput\`
- 需设属性:placeholder
### 图片
- vtype类型:\`image\`、\`logoImage\`、\`avatarImage\`
- 需设属性:src
### 开关
- vtype类型:\`iconSwitch\`、\`sliderSwitch\`
- 禁止添加孩子节点,没有children属性
### 单选组
- vtype类型:\`radioGroup\`
### 单选项
- vtype类型:\`iconRadio\`、\`iconTextRadio\`
- \`iconTextRadio\`需设属性:text
- 禁止添加孩子节点,没有children属性
### 多选组
- vtype类型:\`checkBoxGroup\`
### 多选项
- vtype类型:\`iconCheckbox\`、\`iconTextCheckbox\`
- \`iconTextCheckbox\`需设属性:text
- 禁止添加孩子节点,没有children属性
### 形状:
- vtype类型:\`rect\`、\`circle\`、\`line\`
### 布局
- vtype类型:\`multiStateContainer\`, \`oneStateContentContainer\`, \`inlineBlockAndWrap\`, \`blockItem\`, \`verticalLinearLayout\`, \`horizontalLinearLayout\`
### 列表
- vtype类型:\`commonVerticalList\`, \`commonHorizontalList\`
### 竖向列表卡片
- vtype类型:\`recommendNovelListCard1Column\`、\`recommendNovelListCard2Column\`、\`latestNovelListCard\`
- 禁止添加孩子节点,没有children属性
### 横向列表卡片
- vtype类型:\`editRecommendNovelListCard\`、\`finishedNovelListCard\`
- 禁止添加孩子节点,没有children属性
### 轮播
- vtype类型:\`commonViewPager\`
### 轮播指示器
- vtype类型:\`commonViewPagerIndicatorContainer\`
### 轮播卡片
- vtype类型:\`homeRecommendViewPagerCard\`、\`goodReviewNovelViewPagerCard\`
- 禁止添加孩子节点,没有children属性
### tab选项卡
- vtype类型:\`commonTabContainer\`、\`oneTabContentContainer\`
### tab选项卡菜单栏
- vtype类型:\`underlineTabMenuBar\`、\`sliderTabMenuBar\`
### 底部tab内容区
- vtype类型:\`bottomTabContentContainer\`、\`subPage\`
### 底部tab导航栏
- vtype类型:\`homeBottomTabNavigateBar\`
### 底部tab导航栏项
- vtype类型:\`homeBottomTabNavigateBarItem\`
- 需设属性:iconClass、text
- 禁止添加孩子节点,没有children属性
### 功能/分类入口
- vtype类型:\`commonFunctionCategoryEntry\`
- 需设属性:iconClass、text
- 禁止添加孩子节点,没有children属性
### 二级页面标题栏
- vtype类型:\`commonSecondLevelPageTitleBar\`
### 对话框
- vtype类型:\`commonDialog\`
### toast
- vtype类型:\`infoToast\`、\`successToast\`、\`warningToast\`、\`errorToast\`
- 需设属性:text
- 禁止添加孩子节点,没有children属性
### 下拉菜单
- vtype类型:\`dropDownMenu\`
### 下拉菜单项
- vtype类型:\`dropDownMenuItem\`
- 需设属性:iconClass、text
- 禁止添加孩子节点,没有children属性
### 侧滑面板
- vtype类型:\`filterSideSlidePanel\`、\`shareSideSlidePanel\`、\`readSettingSideSlidePanel\`
### 排序筛选栏
- vtype类型:\`commonSortFilterBar\`
### 底部操作栏
- vtype类型:\`bottomShelveBatchOperateBar\`
### 系统顶部状态栏
- vtype类型:\`phoneTopStatusBar\`
`;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZWNsYXJhdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91aURlY2xhcmF0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXVUMUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB1aURlY2xhcmF0aXZlUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK/kuIDkuKrliY3nq6/lvIDlj5HvvIzkvaDpnIDopoHmoLnmja7kuJrliqHpnIDmsYLvvIzmoLnmja5cXGBVSeiuvuiuoeimgeaxglxcYOOAgVxcYOe7hOS7tuWjsOaYjuW8j+WGmeazleinhOWImVxcYOOAgVxcYOmrmOe6p+e7hOS7tueahOS9v+eUqOWcuuaZr+WSjOWbuuWumue7k+aehFxcYOetieadpeWunueOsOS4muWKoemcgOaxgueahFVJ55WM6Z2iXG5cbiMjIOi+k+WHuueahGpzb27mlofku7bot6/lvoTlkoxqc29u5qC85byPXG4tIOi+k+WHuui3r+W+hO+8muW/hemhu+aYr1xcYGRvYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmpzb25cXGDvvIzlhbbkuK1cXGBtb2R1bGVOYW1lRU5cXGDlsLHmmK/lip/og73mqKHlnZfnmoToi7HmloflkI3lrZfvvIxcXGBwYWdlTmFtZUVOXFxg5bCx5piv6K+l6aG16Z2i55qE6Iux5paH5ZCN5a2XXG5cbiMjIOiuvuiuoeinhOiMg1xuLSDpobXpnaLnmoTlt6blj7Povrnot53mmK8xNnB4XG4tIOW9k+mcgOimgWljb27lm77moIfml7blv4Xpobvkvb/nlKhGb250QXdlc29tZeWbvuagh++8jOavlOWmgu+8mmljb25DbGFzczogXCJmYXMgZmEtd2VpeGluXCJcbi0g5b2T6ZyA6KaBaW1n5Zu+54mH5pe277yMc3Jj5L2/55So5Zu+54mH5Zyw5Z2A77yaXFxgaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nMS5qcGdcXGAp77yM5YW25Lit57uT5bC+55qE4oCZc2hvd0ltZzEn5Y+v5Lul5o2i5Li65LuOMeWIsDMw55qE5pWw5a2X77yMMX4zMOeahOaVsOWtl+W/hemhu+maj+acuuaMkemAie+8jOS4jeW+l+avj+S4qumhtemdouavj+S4quWbvueJh+mDveS9v+eUqOWQjOS4gOS4quaVsOWtl+OAguWGmeazleavlOWmgu+8mlxcYHNyYz1cImh0dHBzOi8vb3NzLmJ5dGVmdW5nby5jb20vZjEvc2hvd0ltZzE3LmpwZ1wiXFxgXG4tIOe7neWvueS4jeiDveS9v+eUqGVtb2pp6KGo5oOF56ym5Y+377yM5LiN5b6X5L2/55So5Lu75L2VZW1vamnooajmg4XnrKblj7fvvIzor7fkvb/nlKhpY29u6IqC54K55p2l5Luj5pu/44CCXG4tIOaJi+acuueKtuaAgeagj3Bob25lVG9wU3RhdHVzQmFy6IqC54K555qE6auY5bqm5b+F6aG76K6+6K6h5Li6MjJweFxuXG4jIyDnu4Tku7blo7DmmI7lvI/lhpnms5Xop4TliJlcbi0g5L2/55SoanNvbuagvOW8j+adpeaPj+i/sFVJ55WM6Z2iXG4tIOS9v+eUqFxcYGNoaWxkcmVuXFxg5bGe5oCn5p2l5o+P6L+w57uE5Lu255qE5a2Q57uE5Lu2XG4tIOavj+S4que7hOS7tumDveW/hemhu+WMheWQq++8mmlk44CBbmFtZeOAgXZ0eXBl44CBeOOAgXnjgIF344CBaOWxnuaAp1xuLSBpZOWxnuaAp+W/hemhu+aYr+iLseaWh+aIluaVsOWtl++8jOS4lOS4jeiDveS7peaVsOWtl+W8gOWktO+8jOW5tuS4lOaVtOS4qumhtemdomlk5bGe5oCn55qE5YC85b+F6aG75ZSv5LiAXG4tIG5hbWXlsZ7mgKflv4XpobvmmK/kuK3mlofmiJbmlbDlrZfvvIzlubbkuJTkuI3og73ljIXlkKvnibnmrorlrZfnrKZcbi0gdnR5cGXlsZ7mgKfnmoTlgLzlv4XpobvmmK9cXGDnu4Tku7blupPkuI7lsZ7mgKdcXGAg5Lit55qE5LiA5LiqdnR5cGXlgLxcbi0geOOAgXnjgIF344CBaOWxnuaAp+eahOWAvOW/hemhu+aYr+aVtOaVsO+8jHjjgIF55Z2Q5qCH5piv55u45a+55LqO54i25a655Zmo55qE5bem5LiK6KeS77yMd+OAgWjnmoTlgLzlv4XpobvmmK/lhbfkvZPlg4/ntKDlgLzvvIzkuI3og73mmK/nmb7liIbmr5Rcbi0g54m55Yir5rOo5oSP77yMeOOAgXnlnZDmoIfpnIDopoHogIPomZHpobXpnaLnmoTovrnot53jgIHniLblrrnlmajnmoTovrnot53jgIHlhYTlvJ/nu4Tku7bnmoTpl7Tot53vvIzkvovlpoLvvIzniLblrrnlmajnmoTovrnot53mmK8xMHB477yM6YKj5LmI56ys5LiA5Liq5a2Q57uE5Lu255qEeOWdkOagh+W/hemhu+aYrzEwcHjvvIzogIzkuI3mmK8wcHjvvIzogIznrKzkuozkuKrlrZDnu4Tku7bnmoR45Z2Q5qCH5b+F6aG75pivMTBweCvnrKzkuIDkuKrlrZDnu4Tku7bnmoTlrr3luqYr6Ze06Led77yM5L6L5aaC77yM56ys5LiA5Liq5a2Q57uE5Lu255qE5a695bqm5pivMTAwcHjvvIzpl7Tot53mmK8xMHB477yM6YKj5LmI56ys5LqM5Liq5a2Q57uE5Lu255qEeOWdkOagh+W/hemhu+aYrzEyMHB4XG4tIOW/hemhu+azqOaEj+Wtl+espuS4sueahOWAvOWmguaenOWHuueOsOWPjOW8leWPt+W/hemhu+i/m+ihjOi9rOS5ie+8jOWboOS4uui/meaYr2pzb27lrZfmrrXnmoTlgLzvvIzlkKbliJnkvJrorqlqc29u5Ye66ZSZXG4tIOi9ruaSreOAgVRBQumAiemhueWNoeOAgeW6lemDqFRBQuWvvOiIque7hOS7tueahOavj+S4gOmhteWGheWuueW/hemhu+WujOaVtO+8jOS4jeW+l+ecgeeVpeS7u+S9leWGheWuuee7hOS7tuOAguavlOWmguaciTPpobXvvIzpgqPkuYjmr4/kuIDpobXnmoTlhoXlrrnnu4Tku7bpg73kuI3og73nnIHnlaXjgIJcblxuIyMg6auY57qn57uE5Lu255qE5L2/55So5Zy65pmv5ZKM5Zu65a6a57uT5p6EXG5cbiMjIyDljZXpgInnu4RcXGByYWRpb0dyb3VwXFxgXG5cbiMjIyMgXFxgcmFkaW9Hcm91cFxcYOS9v+eUqOWcuuaZr1xuLSDlvZPkuIDkuKrpobXpnaLpnIDopoHlsZXnpLrlpJrkuKrkupLmlqXnmoTpgInpobnml7bvvIzkvb/nlKhcXGByYWRpb0dyb3VwXFxg57uE5Lu2XG4tIOS+i+Wmgu+8jOmcgOimgemAieaLqeaUr+S7mOaWueW8j+aXtu+8jOW/hemhu+S9v+eUqFxcYHJhZGlvR3JvdXBcXGDnu4Tku7ZcblxuIyMjIyBcXGByYWRpb0dyb3VwXFxg5Zu65a6a57uT5p6EXG4tIFxcYHJhZGlvR3JvdXBcXGDnu4Tku7blv4XpobvljIXlkKtO5LiqXFxgaWNvblJhZGlvXFxg5oiWXFxgaWNvblRleHRSYWRpb1xcYOWNlemAiemhuee7hOS7tlxuXG4jIyMg5aSa6YCJ57uEXFxgY2hlY2tCb3hHcm91cFxcYFxuXG4jIyMjIFxcYGNoZWNrQm94R3JvdXBcXGDkvb/nlKjlnLrmma9cbi0g5b2T5LiA5Liq6aG16Z2i6ZyA6KaB5bGV56S65aSa5Liq5Y+v6YCJ55qE6YCJ6aG55pe277yM5L2/55SoXFxgY2hlY2tCb3hHcm91cFxcYOe7hOS7tlxuLSDkvovlpoLvvIzpnIDopoHpgInmi6nnlKjmiLfnmoTniLHlpb3ml7bvvIzlv4Xpobvkvb/nlKhcXGBjaGVja0JveEdyb3VwXFxg57uE5Lu2XG5cbiMjIyMgXFxgY2hlY2tCb3hHcm91cFxcYOWbuuWumue7k+aehFxuLSBcXGBjaGVja0JveEdyb3VwXFxg57uE5Lu25b+F6aG75YyF5ZCrTuS4qlxcYGljb25DaGVja2JveFxcYOaIllxcYGljb25UZXh0Q2hlY2tib3hcXGDlpJrpgInpobnnu4Tku7ZcblxuIyMjIOWkmueKtuaAgeWuueWZqFxcYG11bHRpU3RhdGVDb250YWluZXJcXGBcblxuIyMjIyBcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxg5L2/55So5Zy65pmvXG4tIOW9k+S4gOS4que7hOS7tumcgOimgeWcqOS4jeWQjOeKtuaAgeS4i+WxleekuuS4jeWQjOeahOWGheWuueaXtu+8jOW5tuS4lOS4jeaYr+mAmui/h+eCueWHu+OAgXRhYk1lbnVCYXLjgIHova7mkq3nrYnmlrnlvI/liIfmjaLnirbmgIHml7bvvIzkvb/nlKhcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxg57uE5Lu2XG4tIOS+i+Wmgu+8jOW3sueZu+W9leWSjOacqueZu+W9leeKtuaAgeS4i+WxleekuuS4jeWQjOeahOWGheWuue+8jOW/hemhu+S9v+eUqFxcYG11bHRpU3RhdGVDb250YWluZXJcXGDnu4Tku7Zcbi0g5L6L5aaC77yM5b2TQeadoeS7tuS4i+aYvuekukHmjInpkq7vvIzlvZNC5p2h5Lu25LiL5pi+56S6QuaMiemSru+8jOavlOWmgu+8jOWcqOW8leWvvOmhtea7keWKqOWIsOacgOWQjuS4gOmhteaYvuekuueri+WNs+S9k+mqjOaMiemSru+8jOWQpuWImeaYvuekuuS4i+S4gOatpeaMiemSrlxuLSDmgLvnu5PkvovlrZDvvJrlvZNB5p2h5Lu25LiL5pi+56S6QeeahFVJ77yM5b2TQuadoeS7tuS4i+aYvuekukLnmoRVSe+8jOS7peatpOexu+aOqO+8jOiAjOS4lOS4jeaYr+mAmui/h+eCueWHu+inpuWPkeeahO+8jOmCo+S5iOWwseS9v+eUqOWkmueKtuaAgeWuueWZqFxcYG11bHRpU3RhdGVDb250YWluZXJcXGBcblxuIyMjIyBcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxg5Zu65a6a57uT5p6EXG4tIFxcYG11bHRpU3RhdGVDb250YWluZXJcXGDnu4Tku7blv4XpobvljIXlkKvkuIDkuKrmiJblpJrkuKpcXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDlrZDnu4Tku7Zcbi0g5q+P5LiqXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxg5a2Q57uE5Lu25b+F6aG75YyF5ZCr5LiA5Liq5oiW5aSa5Liq57uE5Lu2XG5cbiMjIyDmtYHlvI/oh6rliqjmjaLooYzluIPlsYDlrrnlmah2dHlwZT1cImlubGluZUJsb2NrQW5kV3JhcFwi57uE5Lu2XG5cbiMjIyMgXFxgaW5saW5lQmxvY2tBbmRXcmFwXFxg5L2/55So5Zy65pmvXG4tIOW9k+mcgOimgeWxleekuuWkmuS4que7hOS7tuaoquaOku+8jOW5tuS4lOi/meS6m+e7hOS7tumcgOimgeiHquWKqOaNouihjOW4g+WxgOaXtu+8jOS9v+eUqFxcYGlubGluZUJsb2NrQW5kV3JhcFxcYOe7hOS7tlxuLSDkvovlpoLvvIzpnIDopoHlsZXnpLrlpJrkuKrllYblk4HmoIfnrb7ml7bvvIzlv4Xpobvkvb/nlKhcXGBpbmxpbmVCbG9ja0FuZFdyYXBcXGDnu4Tku7Zcbi0g5L6L5aaC77ya5aSa5Liq5qCH562+dGFn44CB54Ot6Zeo5pCc57SidGFn44CB5ZWG5ZOBdGFn562J562J5qCH562+dGFn57G75Zy65pmv77yM5b+F6aG75L2/55SoXFxgaW5saW5lQmxvY2tBbmRXcmFwXFxg57uE5Lu2XG4tIOemgeatouS9v+eUqOeahOWcuuaZr++8muWKn+iDveWFpeWPo+OAgeWNlemAieOAgeWkmumAieOAgeWIl+ihqOOAgemAiemhueWNoXRhYuOAglxuXG4jIyMjIFxcYGlubGluZUJsb2NrQW5kV3JhcFxcYOWbuuWumue7k+aehFxuLSBcXGBpbmxpbmVCbG9ja0FuZFdyYXBcXGDnu4Tku7blv4XpobvljIXlkKtO5LiqXFxgYmxvY2tJdGVtXFxg57uE5Lu2XG5cbiMjIyDova7mkq1cblxuIyMjIyDova7mkq3kvb/nlKjlnLrmma9cbi0g5b2T5LiA5Liq6aG16Z2i6ZyA6KaB5bGV56S65aSa5Liq6L2u5pKt6aG55pe277yM5L2/55SoXFxg6L2u5pKtXFxg57uE5Lu2XG4tIOS+i+Wmgu+8jOmcgOimgei9ruaSreWxleekuuWkmuS4qua0u+WKqOWbvuWSjOa0u+WKqOS/oeaBr+aXtu+8jOW/hemhu+S9v+eUqFxcYOi9ruaSrVxcYOe7hOS7tlxuXG4jIyMjIOi9ruaSreWbuuWumue7k+aehFxuLSBcXGDova7mkq1cXGDljIXlkKtO5LiqXFxg6L2u5pKt5Y2h54mHXFxg5YaF5a656aG557uE5Lu25ZKMMeS4qlxcYOi9ruaSreaMh+ekuuWZqFxcYOe7hOS7tlxuLSBcXGDova7mkq3mjIfnpLrlmahcXGDnu4Tku7blv4XpobvljIXlkKvnnYBO5LiqXFxgcmVjdFxcYOaIllxcYGNpcmNsZVxcYOe7hOS7tu+8jOWFtuS4rVxcYHJlY3RcXGDmiJZcXGBjaXJjbGVcXGDnu4Tku7bkuI3lhYHorrjmt7vliqDlranlrZDvvIxcXGByZWN0XFxg5oiWXFxgY2lyY2xlXFxg57uE5Lu25bCx5piv5oyH56S65Zmo55qE5ZyG54K5XG5cbiMjIyB0YWLpgInpobnljaFcblxuIyMjIyB0YWLpgInpobnljaHkvb/nlKjlnLrmma9cbi0g5b2T5LiA5Liq6aG16Z2i6ZyA6KaB5bGV56S65aSa5LiqdGFi6aG55pe277yM5L2/55SoXFxgdGFi6YCJ6aG55Y2hXFxg57uE5Lu2XG4tIOS+i+Wmgu+8jOWcqOaMieWIhuexu+WxleekuuWVhuWTgeaXtu+8jOWPr+S7peWwhuWkmuS4quWIhuexu+S9v+eUqHRhYuiPnOWNleagj+Wxleekuu+8jOavj+S4gOenjeWIhuexu+WwseaYr+S4gOS4qnRhYumhue+8jOavj+S4gOS4qnRhYueahOWGheWuueWMuuWwseaYr+ivpeWIhuexu+eahOWVhuWTgeWIl+ihqFxuXG4jIyMjIHRhYumAiemhueWNoeWbuuWumue7k+aehFxuLSBcXGB0YWLpgInpobnljaFcXGDnu4Tku7blv4XpobvljIXlkKtO5LiqXFxgb25lVGFiQ29udGVudENvbnRhaW5lclxcYOWtkOe7hOS7tuWSjDHkuKpcXGB0YWLpgInpobnljaHoj5zljZXmoI9cXGDnu4Tku7ZcblxuIyMjIOW6lemDqHRhYuWvvOiIqlxuXG4jIyMjIFxcYOW6lemDqHRhYuWvvOiIqlxcYOS9v+eUqOWcuuaZr1xuLSDlvZPkuIDkuKrpobXpnaLpnIDopoHlsZXnpLrlpJrkuKrlupXpg6jlr7zoiKrpobnml7bvvIzkvb/nlKhcXGDlupXpg6h0YWLlr7zoiKpcXGDnu4Tku7bvvIxcXGDlupXpg6h0YWLlr7zoiKpcXGDlv4XpobvopoHlkozlrZDpobXpnaJcXGBzdWJQYWdlXFxg6YWN5ZCI5L2/55So77yM55uu55qE5piv5bCG5aSN5p2C55qE6aaW6aG15bqV6YOo5a+86Iiq5Yqf6IO96YCa6L+H5a2Q6aG16Z2iXFxgc3ViUGFnZVxcYOadpeino+iApu+8jOmZjeS9jummlumhteeahOWkjeadguW6plxuLSDkuIDoiKzpppbpobXmmK/lkITkuKrlip/og73nmoTlhaXlj6PvvIzlm6DmraTpppbpobXmmK/nlLHlpJrkuKrlrZDpobXpnaLnu4TmiJDnmoTkuLvkvZPpobXpnaLvvIzmr5TlpoLvvJrotK3nialBUFDpppbpobXkuIDoiKzmnInkuIDkuKpcXGDlupXpg6h0YWLlr7zoiKpcXGDnu4Tku7bvvIjmr5TlpoLvvJrpppbpobXjgIHmtLvliqjjgIHotK3nianovabjgIHmtojmga/jgIHmiJHnmoTvvInvvIzngrnlh7vlupXpg6jlip/og73lr7zoiKrmoI/nmoRpdGVt5Lya5YiH5o2i5Yiw5a+55bqU55qEdGFi5a2Q6aG16Z2i77yM5q+P5LiqdGFi5a2Q6aG16Z2i6LSf6LSj6Ieq5bex55qE54us56uL55qE5Lia5Yqh6YC76L6R77yM5q+U5aaC6LSt54mp6L2mdGFi5bCx6LSf6LSj6LSt54mp6L2m55u45YWz5Lia5Yqh6YC76L6R44CCXG4tIOmmlumhteWPquaYr+S4gOS4quWKn+iDveWvvOiIquahhuaetuWPqumcgOimgeiuvuiuoeW6lemDqOWKn+iDveWvvOiIquagj+WSjOa3u+WKoOWtkOmhtemdou+8jFxcYHN1YlBhZ2VcXGDlrZDpobXpnaLph4zpnaLnmoRVSeWFg+e0oOS4jemcgOimgeWunueOsO+8jOWFtuS7luS7u+WKoeS8muacieS4k+mXqOeahOmmlumhteWQhOS4quWtkOmhtemdoueahOWFt+S9k1VJ6K6+6K6h5a6e546w546v6IqCXG4tIOS+i+Wmgu+8jOeUteWVhummlumhteW6lemDqOWvvOiIquS4gOiIrOaciemmlumhteOAgeWIhuexu+OAgei0reeJqei9puOAgeaIkeeahOWbm+S4quW6lemDqOWvvOiIqumhue+8jOW/hemhu+S9v+eUqFxcYOW6lemDqHRhYuWvvOiIqlxcYOe7hOS7tu+8jOavj+S4quW6lemDqOWvvOiIqumhueWvueW6lOS4gOS4qlxcYHN1YlBhZ2VcXGDlrZDpobXpnaJcblxuIyMjIyBcXGDlupXpg6h0YWLlr7zoiKpcXGDlm7rlrprnu5PmnoRcbi0g5bqV6YOodGFi5a+86Iiq57uE5Lu25b+F6aG75pivXFxg5bqV6YOodGFi5a+86IiqXFxg5b+F6aG75YyF5ZCr552ATuS4qlxcYHN1YlBhZ2VcXGDlrZDpobXpnaLnu4Tku7bkuI4x5LiqXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJcXGDnu4Tku7Zcbi0gXFxgc3ViUGFnZVxcYOWtkOmhtemdoue7hOS7tumHjOe7neWvueS4jeiDveacieWtqeWtkOe7hOS7tu+8jOe7neWvueS4jeiDveacieS7u+S9leWNoOS9jeWGheWuuVxuLSBcXGBib3R0b21UYWJOYXZpZ2F0ZUJhclxcYOe7hOS7tuW/hemhu+WMheWQq07kuKpcXGBib3R0b21UYWJOYXZpZ2F0ZUJhckl0ZW1cXGDnu4Tku7Zcbi0gXFxgc3ViUGFnZVxcYOWtkOmhtemdoue7hOS7tuS4jlxcYGJvdHRvbVRhYk5hdmlnYXRlQmFySXRlbVxcYOe7hOS7tueahOaVsOmHj+aYr+ebuOWQjOeahFxuXG4jIyMg5pON5L2c5qCP77yaXFxgdG9wTmF2aWdhdGVCYXJcXGDlkoxcXGBib3R0b21PcGVyYXRlQmFyXFxgXG5cbiMjIyMgXFxgdG9wTmF2aWdhdGVCYXJcXGDlkoxcXGBib3R0b21PcGVyYXRlQmFyXFxg5L2/55So5Zy65pmvXG4tIOW9k+mcgOimgeWcqOmhtemdoumhtumDqOWxleekuuS4gOS4quWvvOiIquagj+aIluaXtu+8jOS9v+eUqFxcYHRvcE5hdmlnYXRlQmFyXFxg57uE5Lu277yM5ZCM55CG5bqV6YOo6ZyA6KaB5L2/55SoXFxgYm90dG9tT3BlcmF0ZUJhclxcYFxuLSDkvovlpoLvvIzlnKjllYblk4Hor6bmg4XpobXpobbpg6jlsZXnpLrkuIDkuKrov5Tlm57mjInpkq7lkozllYblk4HlkI3np7Dml7bvvIzlv4Xpobvkvb/nlKhcXGB0b3BOYXZpZ2F0ZUJhclxcYOe7hOS7tlxuLSDkvovlpoLvvIzlnKjllYblk4Hor6bmg4XpobXlupXpg6jlsZXnpLrkuIDkuKrliqDlhaXotK3nianovabmjInpkq7lkozotK3kubDmjInpkq7ml7bvvIzlv4Xpobvkvb/nlKhcXGBib3R0b21PcGVyYXRlQmFyXFxg57uE5Lu2XG5cbiMjIyDlvLnnqpc6IFxcYGRpYWxvZ1xcYOOAgVxcYHRvYXN0XFxg44CBXFxgZHJvcERvd25NZW51XFxg44CBXFxgc2lkZVNsaWRlUGFuZWxcXGBcblxuIyMjIyDkvb/nlKjlnLrmma9cbi0g5b2T6ZyA6KaB5Zyo6aG16Z2i5LiK5bGV56S65LiA5LiqdG9hc3Tmj5DnpLrml7bvvIzkvb/nlKhcXGB0b2FzdFxcYOe7hOS7tlxuLSDlvZPpnIDopoHlnKjpobXpnaLkuIrlsZXnpLrkuIDkuKrlvLnnqpfml7bvvIzkvb/nlKhcXGBkaWFsb2dcXGDnu4Tku7Zcbi0g5b2T6ZyA6KaB5Zyo6aG16Z2i5LiK5bGV56S65LiA5Liq5LiL5ouJ6I+c5Y2V5pe277yM5L2/55SoXFxgZHJvcERvd25NZW51XFxg57uE5Lu2XG4tIOW9k+mcgOimgeWcqOmhtemdouS4iuWxleekuuS4gOS4quS+p+a7kemdouadv+aXtu+8jOS9v+eUqFxcYHNpZGVTbGlkZVBhbmVsXFxg57uE5Lu277yM5rOo5oSP77yM6ZqQ56eB5Y2P6K6u44CB55So5oi35Y2P6K6u44CB5biu5Yqp562J562J6YO95LiN5b6X5L2/55So5L6n5ruR6Z2i5p2/77yM5b+F6aG75L2/55So6aG16Z2i5p2l5a6e546wXG5cbiMjIyDns7vnu5/pobbpg6jnirbmgIHmoI86IFxcYHBob25lVG9wU3RhdHVzQmFyXFxgXG5cbiMjIyMgXFxgcGhvbmVUb3BTdGF0dXNCYXJcXGDkvb/nlKjlnLrmma9cbi0g5q+P5Liq6aG16Z2i6YO95b+F6aG76KaB5a6a5LmJ5omL5py66aG26YOo54q25oCB5qCPXFxgcGhvbmVUb3BTdGF0dXNCYXJcXGDvvIxqc29u5aaC5LiL77yaXG5cXGBcXGBcXGAganNvblxue1xuICAgIFwidnR5cGVcIjogXCJwaG9uZVRvcFN0YXR1c0JhclwiLFxuICAgIFwiaWRcIjogXCJwaG9uZVRvcFN0YXR1c0JhclwiLFxuICAgIFwibmFtZVwiOiBcIuaJi+acuumhtumDqOeKtuaAgeagj1wiLFxuICAgIFwieFwiOiAwLFxuICAgIFwieVwiOiAwLFxuICAgIFwid1wiOiAzOTMsXG4gICAgXCJoXCI6IDIyLFxuICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcInZ0eXBlXCI6IFwidGV4dFwiLFxuICAgICAgICAgICAgXCJpZFwiOiBcInRpbWVUZXh0XCIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLml7bpl7TmmL7npLpcIixcbiAgICAgICAgICAgIFwieFwiOiAxNiwgXG4gICAgICAgICAgICBcInlcIjogNCxcbiAgICAgICAgICAgIFwid1wiOiA1NixcbiAgICAgICAgICAgIFwiaFwiOiAxNCxcbiAgICAgICAgICAgIFwiZm9udFNpemVcIjogMTQsXG4gICAgICAgICAgICBcInRleHRcIjogXCI5OjQxXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJ2dHlwZVwiOiBcImhvcml6b250YWxMaW5lYXJMYXlvdXRcIixcbiAgICAgICAgICAgIFwiaWRcIjogXCJzdGF0dXNJY29uc0xheW91dFwiLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi54q25oCB5Zu+5qCH5biD5bGAXCIsXG4gICAgICAgICAgICBcInhcIjogMzIwLFxuICAgICAgICAgICAgXCJ5XCI6IDQsXG4gICAgICAgICAgICBcIndcIjogNzMsXG4gICAgICAgICAgICBcImhcIjogMTQsXG4gICAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidnR5cGVcIjogXCJpY29uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogXCJzaWduYWxJY29uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIuS/oeWPt+W8uuW6puWbvuagh1wiLFxuICAgICAgICAgICAgICAgICAgICBcInhcIjogMCxcbiAgICAgICAgICAgICAgICAgICAgXCJ5XCI6IDAsXG4gICAgICAgICAgICAgICAgICAgIFwid1wiOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgXCJoXCI6IDE0LFxuICAgICAgICAgICAgICAgICAgICBcImljb25DbGFzc1wiOiBcImZhcyBmYS1zaWduYWxcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInZ0eXBlXCI6IFwiaWNvblwiLFxuICAgICAgICAgICAgICAgICAgICBcImlkXCI6IFwid2lmaUljb25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiV2lGaeWbvuagh1wiLFxuICAgICAgICAgICAgICAgICAgICBcInhcIjogMTYsXG4gICAgICAgICAgICAgICAgICAgIFwieVwiOiAwLFxuICAgICAgICAgICAgICAgICAgICBcIndcIjogMTQsXG4gICAgICAgICAgICAgICAgICAgIFwiaFwiOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgXCJpY29uQ2xhc3NcIjogXCJmYXMgZmEtd2lmaVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidnR5cGVcIjogXCJpY29uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogXCJiYXR0ZXJ5SWNvblwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCLnlLXmsaDlm77moIdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ4XCI6IDMyLFxuICAgICAgICAgICAgICAgICAgICBcInlcIjogMCxcbiAgICAgICAgICAgICAgICAgICAgXCJ3XCI6IDE0LFxuICAgICAgICAgICAgICAgICAgICBcImhcIjogMTQsXG4gICAgICAgICAgICAgICAgICAgIFwiaWNvbkNsYXNzXCI6IFwiZmFzIGZhLWJhdHRlcnktZnVsbFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgXVxufVxuXFxgXFxgXFxgXG5cbiMjIyMgXFxgcGhvbmVUb3BTdGF0dXNCYXJcXGDlm7rlrprnu5PmnoRcbi0gXFxgcGhvbmVUb3BTdGF0dXNCYXJcXGDnu4Tku7blv4XpobvljIXlkKvnnYAx5Liq5bGV56S65pe26Ze055qEXFxgdGV4dFxcYOaWh+acrOe7hOS7tuWSjDHkuKrlsZXnpLrkv6Hlj7flvLrluqbjgIFXaUZp44CB55S15rGgXFxgaG9yaXpvbnRhbExpbmVhckxheW91dFxcYOe6v+aAp+W4g+WxgOe7hOS7tlxuLSBcXGBob3Jpem9udGFsTGluZWFyTGF5b3V0XFxg5b+F6aG75YyF5ZCr552A5L+h5Y+35by65bqm44CBV2lGaeOAgeeUteaxoOS4ieS4qlxcYGljb25cXGDlm77moIfnu4Tku7ZcblxuIyMg5pWw5o2u6I635Y+W5pa55byPXFxgZnJvbUFwaU9yQ2FjaGVEYXRhOiB0cnVlXFxg55qE6K6+572u5p2h5Lu277yaXG4tIHZ0eXBl5b+F6aG75pivXFxgdmVydGljYWxMaXN0Vmlld1xcYOOAgVxcYGhvcml6b250YWxMaXN0Vmlld1xcYOOAgVxcYHZpZXdQYWdlclxcYOOAgVxcYHRhYkNvbnRhaW5lclxcYOOAgVxcYHJhZGlvR3JvdXBcXGDjgIFcXGBjaGVja0JveEdyb3VwXFxg44CBXFxgaW5saW5lQmxvY2tBbmRXcmFwXFxg57G75Z6L55qE57uE5Lu2XG4tIOivpee7hOS7tueahOaVsOaNruaYr+S7jue9kee7nOaIluiAheacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluWbnuadpeeahO+8jOavlOWmgu+8mueDremXqOWVhuWTgeWIl+ihqOe7hOS7tlxcYHZlcnRpY2FsTGlzdFZpZXdcXGDvvIzor6Xnu4Tku7bnmoTmlbDmja7mmK/ku47nvZHnu5zmiJbogIXmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5blm57mnaXnmoRcbi0g5aaC5p6c5piv5LiA5Lqb5LiN6ZyA6KaB5ZCO56uvQVBJ6IGU572R5oiW5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W6I635Y+W55qE6Z2Z5oCB5YaZ5q2755qE5pWw5o2u77yM6YKj5LmI5bCx5LiN6ZyA6KaBZnJvbUFwaU9yQ2FjaGVEYXRh5bGe5oCn5LqG77yM5q+U5aaC77ya5Liq5Lq65Lit5b+D5YiX6KGo6aG544CB6K6+572u5YiX6KGo6aG544CB6I+c5Y2V5YiX6KGo6aG577yM6L+Z5Lqb5qC55pys5LiN6ZyA6KaB57uP6L+H5ZCO5Y+wQVBJ6IGU572R5oiW5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W6I635Y+W55qE77yM6YKj5LmI5bCx5LiN6KaBZnJvbUFwaU9yQ2FjaGVEYXRh5bGe5oCnXG5cbiMjIOe7hOS7tuW6k+S4juWxnuaAp1xuXG4jIyMg5paH5pysXG4tIHZ0eXBl57G75Z6L77yaXFxgcHJpbWFyeVRleHRcXGDjgIFcXGBpbmZvVGV4dFxcYOOAgVxcYGxldmVsMVRpdGxlVGV4dFxcYOOAgVxcYGxldmVsMlRpdGxlVGV4dFxcYOOAgVxcYGhpbnRUZXh0XFxg44CBXFxgZXJyb3JUZXh0XFxg44CBXFxgc3VjY2Vzc1RleHRcXGBcbi0g6ZyA6K6+5bGe5oCn77yadGV4dFxuXG4jIyMg5oyJ6ZKuXG4tIHZ0eXBl57G75Z6L77yaXFxgcHJpbWFyeUJ1dHRvblxcYOOAgVxcYHNlY29uZGFyeUJ1dHRvblxcYOOAgVxcYHRleHRCdXR0b25cXGDjgIFcXGBpY29uQnV0dG9uXFxgXG4tIOmcgOiuvuWxnuaAp++8mnRleHTjgIFzaXplKOWPr+mAieaemuS4vuWAvO+8mlxcYHNtYWxsXFxg44CBXFxgbWVkaXVtXFxg44CBXFxgbGFyZ2VcXGApXG5cbiMjIyDovpPlhaXmoYZcbi0gdnR5cGXnsbvlnovvvJpcXGBpbnB1dFxcYOOAgVxcYG51bWJlcklucHV0XFxg44CBXFxgcGFzc3dvcmRJbnB1dFxcYOOAgVxcYHBob25lSW5wdXRcXGDjgIFcXGB2ZXJpZnlDb2RlSW5wdXRcXGDjgIFcXGBlbWFpbElucHV0XFxg44CBXFxgc2VhcmNoSW5wdXRcXGBcbi0g6ZyA6K6+5bGe5oCn77yacGxhY2Vob2xkZXJcblxuIyMjIOWbvueJh1xuLSB2dHlwZeexu+Wei++8mlxcYGltYWdlXFxg44CBXFxgbG9nb0ltYWdlXFxg44CBXFxgYXZhdGFySW1hZ2VcXGBcbi0g6ZyA6K6+5bGe5oCn77yac3JjXG5cbiMjIyDlvIDlhbNcbi0gdnR5cGXnsbvlnovvvJpcXGBpY29uU3dpdGNoXFxg44CBXFxgc2xpZGVyU3dpdGNoXFxgXG4tIOemgeatoua3u+WKoOWtqeWtkOiKgueCue+8jOayoeaciWNoaWxkcmVu5bGe5oCnXG5cbiMjIyDljZXpgInnu4Rcbi0gdnR5cGXnsbvlnovvvJpcXGByYWRpb0dyb3VwXFxgXG5cbiMjIyDljZXpgInpoblcbi0gdnR5cGXnsbvlnovvvJpcXGBpY29uUmFkaW9cXGDjgIFcXGBpY29uVGV4dFJhZGlvXFxgXG4tIFxcYGljb25UZXh0UmFkaW9cXGDpnIDorr7lsZ7mgKfvvJp0ZXh0XG4tIOemgeatoua3u+WKoOWtqeWtkOiKgueCue+8jOayoeaciWNoaWxkcmVu5bGe5oCnXG5cbiMjIyDlpJrpgInnu4Rcbi0gdnR5cGXnsbvlnovvvJpcXGBjaGVja0JveEdyb3VwXFxgXG5cbiMjIyDlpJrpgInpoblcbi0gdnR5cGXnsbvlnovvvJpcXGBpY29uQ2hlY2tib3hcXGDjgIFcXGBpY29uVGV4dENoZWNrYm94XFxgXG4tIFxcYGljb25UZXh0Q2hlY2tib3hcXGDpnIDorr7lsZ7mgKfvvJp0ZXh0XG4tIOemgeatoua3u+WKoOWtqeWtkOiKgueCue+8jOayoeaciWNoaWxkcmVu5bGe5oCnXG5cbiMjIyDlvaLnirY6XG4tIHZ0eXBl57G75Z6L77yaXFxgcmVjdFxcYOOAgVxcYGNpcmNsZVxcYOOAgVxcYGxpbmVcXGBcblxuIyMjIOW4g+WxgFxuLSB2dHlwZeexu+Wei++8mlxcYG11bHRpU3RhdGVDb250YWluZXJcXGAsIFxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYCwgXFxgaW5saW5lQmxvY2tBbmRXcmFwXFxgLCBcXGBibG9ja0l0ZW1cXGAsIFxcYHZlcnRpY2FsTGluZWFyTGF5b3V0XFxgLCBcXGBob3Jpem9udGFsTGluZWFyTGF5b3V0XFxgXG5cbiMjIyDliJfooahcbi0gdnR5cGXnsbvlnovvvJpcXGBjb21tb25WZXJ0aWNhbExpc3RcXGAsIFxcYGNvbW1vbkhvcml6b250YWxMaXN0XFxgXG5cbiMjIyDnq5blkJHliJfooajljaHniYdcbi0gdnR5cGXnsbvlnovvvJpcXGByZWNvbW1lbmROb3ZlbExpc3RDYXJkMUNvbHVtblxcYOOAgVxcYHJlY29tbWVuZE5vdmVsTGlzdENhcmQyQ29sdW1uXFxg44CBXFxgbGF0ZXN0Tm92ZWxMaXN0Q2FyZFxcYFxuLSDnpoHmraLmt7vliqDlranlrZDoioLngrnvvIzmsqHmnIljaGlsZHJlbuWxnuaAp1xuXG4jIyMg5qiq5ZCR5YiX6KGo5Y2h54mHXG4tIHZ0eXBl57G75Z6L77yaXFxgZWRpdFJlY29tbWVuZE5vdmVsTGlzdENhcmRcXGDjgIFcXGBmaW5pc2hlZE5vdmVsTGlzdENhcmRcXGBcbi0g56aB5q2i5re75Yqg5a2p5a2Q6IqC54K577yM5rKh5pyJY2hpbGRyZW7lsZ7mgKdcblxuIyMjIOi9ruaSrVxuLSB2dHlwZeexu+Wei++8mlxcYGNvbW1vblZpZXdQYWdlclxcYFxuXG4jIyMg6L2u5pKt5oyH56S65ZmoXG4tIHZ0eXBl57G75Z6L77yaXFxgY29tbW9uVmlld1BhZ2VySW5kaWNhdG9yQ29udGFpbmVyXFxgXG5cbiMjIyDova7mkq3ljaHniYdcbi0gdnR5cGXnsbvlnovvvJpcXGBob21lUmVjb21tZW5kVmlld1BhZ2VyQ2FyZFxcYOOAgVxcYGdvb2RSZXZpZXdOb3ZlbFZpZXdQYWdlckNhcmRcXGBcbi0g56aB5q2i5re75Yqg5a2p5a2Q6IqC54K577yM5rKh5pyJY2hpbGRyZW7lsZ7mgKdcblxuIyMjIHRhYumAiemhueWNoVxuLSB2dHlwZeexu+Wei++8mlxcYGNvbW1vblRhYkNvbnRhaW5lclxcYOOAgVxcYG9uZVRhYkNvbnRlbnRDb250YWluZXJcXGBcblxuIyMjIHRhYumAiemhueWNoeiPnOWNleagj1xuLSB2dHlwZeexu+Wei++8mlxcYHVuZGVybGluZVRhYk1lbnVCYXJcXGDjgIFcXGBzbGlkZXJUYWJNZW51QmFyXFxgXG5cbiMjIyDlupXpg6h0YWLlhoXlrrnljLpcbi0gdnR5cGXnsbvlnovvvJpcXGBib3R0b21UYWJDb250ZW50Q29udGFpbmVyXFxg44CBXFxgc3ViUGFnZVxcYFxuXG4jIyMg5bqV6YOodGFi5a+86Iiq5qCPXG4tIHZ0eXBl57G75Z6L77yaXFxgaG9tZUJvdHRvbVRhYk5hdmlnYXRlQmFyXFxgXG5cbiMjIyDlupXpg6h0YWLlr7zoiKrmoI/poblcbi0gdnR5cGXnsbvlnovvvJpcXGBob21lQm90dG9tVGFiTmF2aWdhdGVCYXJJdGVtXFxgXG4tIOmcgOiuvuWxnuaAp++8mmljb25DbGFzc+OAgXRleHRcbi0g56aB5q2i5re75Yqg5a2p5a2Q6IqC54K577yM5rKh5pyJY2hpbGRyZW7lsZ7mgKdcblxuIyMjIOWKn+iDvS/liIbnsbvlhaXlj6Ncbi0gdnR5cGXnsbvlnovvvJpcXGBjb21tb25GdW5jdGlvbkNhdGVnb3J5RW50cnlcXGBcbi0g6ZyA6K6+5bGe5oCn77yaaWNvbkNsYXNz44CBdGV4dFxuLSDnpoHmraLmt7vliqDlranlrZDoioLngrnvvIzmsqHmnIljaGlsZHJlbuWxnuaAp1xuXG4jIyMg5LqM57qn6aG16Z2i5qCH6aKY5qCPXG4tIHZ0eXBl57G75Z6L77yaXFxgY29tbW9uU2Vjb25kTGV2ZWxQYWdlVGl0bGVCYXJcXGBcblxuIyMjIOWvueivneahhlxuLSB2dHlwZeexu+Wei++8mlxcYGNvbW1vbkRpYWxvZ1xcYFxuXG4jIyMgdG9hc3Rcbi0gdnR5cGXnsbvlnovvvJpcXGBpbmZvVG9hc3RcXGDjgIFcXGBzdWNjZXNzVG9hc3RcXGDjgIFcXGB3YXJuaW5nVG9hc3RcXGDjgIFcXGBlcnJvclRvYXN0XFxgXG4tIOmcgOiuvuWxnuaAp++8mnRleHRcbi0g56aB5q2i5re75Yqg5a2p5a2Q6IqC54K577yM5rKh5pyJY2hpbGRyZW7lsZ7mgKdcblxuIyMjIOS4i+aLieiPnOWNlVxuLSB2dHlwZeexu+Wei++8mlxcYGRyb3BEb3duTWVudVxcYFxuXG4jIyMg5LiL5ouJ6I+c5Y2V6aG5XG4tIHZ0eXBl57G75Z6L77yaXFxgZHJvcERvd25NZW51SXRlbVxcYFxuLSDpnIDorr7lsZ7mgKfvvJppY29uQ2xhc3PjgIF0ZXh0XG4tIOemgeatoua3u+WKoOWtqeWtkOiKgueCue+8jOayoeaciWNoaWxkcmVu5bGe5oCnXG5cbiMjIyDkvqfmu5HpnaLmnb9cbi0gdnR5cGXnsbvlnovvvJpcXGBmaWx0ZXJTaWRlU2xpZGVQYW5lbFxcYOOAgVxcYHNoYXJlU2lkZVNsaWRlUGFuZWxcXGDjgIFcXGByZWFkU2V0dGluZ1NpZGVTbGlkZVBhbmVsXFxgXG5cbiMjIyDmjpLluo/nrZvpgInmoI9cbi0gdnR5cGXnsbvlnovvvJpcXGBjb21tb25Tb3J0RmlsdGVyQmFyXFxgXG5cbiMjIyDlupXpg6jmk43kvZzmoI9cbi0gdnR5cGXnsbvlnovvvJpcXGBib3R0b21TaGVsdmVCYXRjaE9wZXJhdGVCYXJcXGBcblxuIyMjIOezu+e7n+mhtumDqOeKtuaAgeagj1xuLSB2dHlwZeexu+Wei++8mlxcYHBob25lVG9wU3RhdHVzQmFyXFxgXG5gIl19