bytefun-ai-mcp 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,16 +2,27 @@
2
2
  * ByteFun AI MCP 提示词优化器
3
3
  *
4
4
  * 重要说明:
5
- * - 本类提供两个独立的优化工具,每个工具处理不同类型的需求
6
- * - 每次只能调用一个工具方法,不会自动组合或选择
5
+ * - 本类提供三个独立的优化工具和复合调用链功能
6
+ * - 每个单一工具处理不同类型的需求,复合工具支持多个工具的组合调用
7
7
  *
8
- * 使用方式:
8
+ * 单一工具使用方式:
9
9
  * 1. UI设计需求 → 调用 optimizeUIDesignPrompt()
10
10
  * 2. 代码开发需求 → 调用 optimizeCodePrompt()
11
+ *
12
+ * 复合工具使用方式:
13
+ * 1. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt()
14
+ * 2. 列出所需页面列表 + UI设计 → 调用 optimizePageListAndUIDesignPrompt()
15
+ * 3. 列出所需页面列表 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowPrompt()
11
16
  */
12
17
  export declare class PromptOptimizer {
18
+ private readonly pageListPromptTemplate;
13
19
  private readonly codePromptTemplate;
14
20
  private readonly uiDesignPromptTemplate;
21
+ /**
22
+ * 优化列出所需页面列表提示词
23
+ * 注意:此方法专门处理页面列表分析需求,输出结果供UI设计使用
24
+ */
25
+ optimizePageListPrompt(userInput: string): Promise<string>;
15
26
  /**
16
27
  * 优化代码开发提示词
17
28
  * 注意:此方法专门处理代码开发相关需求,不会自动处理UI设计或原型设计内容
@@ -21,6 +32,36 @@ export declare class PromptOptimizer {
21
32
  * 优化UI设计提示词
22
33
  * 注意:此方法专门处理UI设计相关需求,不会自动处理代码开发或原型设计内容
23
34
  */
24
- optimizeUIDesignPrompt(userInput: string): Promise<string>;
35
+ optimizeUIDesignPrompt(userInput: string, pageList?: string): Promise<string>;
36
+ /**
37
+ * 复合工具:UI设计 + 代码编写
38
+ * 先进行UI设计,然后进行代码开发
39
+ */
40
+ optimizeUIDesignAndCodePrompt(userInput: string): Promise<{
41
+ uiDesignPrompt: string;
42
+ codePrompt: string;
43
+ }>;
44
+ /**
45
+ * 复合工具:列出所需页面列表 + UI设计
46
+ * 先分析页面列表,然后基于页面列表进行UI设计
47
+ */
48
+ optimizePageListAndUIDesignPrompt(userInput: string): Promise<{
49
+ pageListPrompt: string;
50
+ uiDesignPrompt: string;
51
+ }>;
52
+ /**
53
+ * 复合工具:列出所需页面列表 + UI设计 + 代码编写
54
+ * 完整的工作流程:页面列表分析 → UI设计 → 代码开发
55
+ */
56
+ optimizeFullWorkflowPrompt(userInput: string): Promise<{
57
+ pageListPrompt: string;
58
+ uiDesignPrompt: string;
59
+ codePrompt: string;
60
+ }>;
61
+ /**
62
+ * 基于页面列表结果生成UI设计提示词
63
+ * 此方法用于在获得页面列表结果后,生成包含页面列表信息的UI设计提示词
64
+ */
65
+ generateUIDesignPromptWithPageList(userInput: string, pageListResult: string): Promise<string>;
25
66
  }
26
67
  //# sourceMappingURL=prompt-optimizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CA0FlC;IAED,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CA6BvC;IAEA;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5D;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAMjE"}
1
+ {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAyDJ;IAEnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CA0FlC;IAED,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAmLvC;IAEA;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOhE;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5D;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBnF;;;OAGG;IACG,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IAU7G;;;OAGG;IACG,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAC,CAAC;IAWrH;;;OAGG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IAalI;;;OAGG;IACG,kCAAkC,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGrG"}
@@ -2,14 +2,77 @@
2
2
  * ByteFun AI MCP 提示词优化器
3
3
  *
4
4
  * 重要说明:
5
- * - 本类提供两个独立的优化工具,每个工具处理不同类型的需求
6
- * - 每次只能调用一个工具方法,不会自动组合或选择
5
+ * - 本类提供三个独立的优化工具和复合调用链功能
6
+ * - 每个单一工具处理不同类型的需求,复合工具支持多个工具的组合调用
7
7
  *
8
- * 使用方式:
8
+ * 单一工具使用方式:
9
9
  * 1. UI设计需求 → 调用 optimizeUIDesignPrompt()
10
10
  * 2. 代码开发需求 → 调用 optimizeCodePrompt()
11
+ *
12
+ * 复合工具使用方式:
13
+ * 1. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt()
14
+ * 2. 列出所需页面列表 + UI设计 → 调用 optimizePageListAndUIDesignPrompt()
15
+ * 3. 列出所需页面列表 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowPrompt()
11
16
  */
12
17
  export class PromptOptimizer {
18
+ pageListPromptTemplate = `# 你是产品经理和UI/UX设计专家,负责分析用户需求,列出完整的页面列表
19
+
20
+ ## 你的任务
21
+ 根据用户提供的需求描述,深入理解产品功能和用户流程,输出一个完整、准确的页面列表。
22
+
23
+ ## 分析原则
24
+ 1. **全面性** - 不遗漏任何必要的页面
25
+ 2. **逻辑性** - 页面间的跳转逻辑要合理
26
+ 3. **用户体验** - 考虑完整的用户使用流程
27
+ 4. **功能完整性** - 确保所有功能都有对应的页面支撑
28
+ 5. **关联页面分析** - 深入分析每个页面内部可能跳转的关联页面
29
+
30
+ ## 核心分析规则
31
+ ### 页面跳转关联分析
32
+ 需要理解用户输入描述,然后完整并准确地列出需要哪些页面,**特别重要的是要包括该页面里面可能跳转的所有关联页面**。
33
+
34
+ **例如登录页面的关联跳转分析:**
35
+ - 主页面:登录页
36
+ - 可能的关联跳转页面:
37
+ - 用户协议页面(点击用户协议链接)
38
+ - 用户隐私页面(点击隐私政策链接)
39
+ - 忘记密码页面(点击忘记密码按钮)
40
+ - 注册新用户页面(点击注册按钮)
41
+ - 修改密码页面(从忘记密码流程进入)
42
+
43
+ **分析方法:**
44
+ 1. 识别每个主要功能页面
45
+ 2. 分析该页面上可能存在的按钮、链接、操作
46
+ 3. 确定这些操作会跳转到哪些页面
47
+ 4. 递归分析新发现的页面的跳转关系
48
+ 5. 确保所有可能的用户路径都有对应的页面
49
+
50
+ ## 输出格式要求
51
+ 请按照以下JSON格式输出页面列表:
52
+
53
+ \`\`\`json
54
+ {
55
+ "analysis": "对用户需求的理解和分析",
56
+ "totalPages": 数字,
57
+ "pageList": [
58
+ {
59
+ "pageName": "页面中文名称",
60
+ "pageId": "页面英文ID",
61
+ "description": "页面功能描述",
62
+ "userFlow": "用户访问此页面的场景",
63
+ "relatedPages": ["可能跳转到的关联页面ID列表"]
64
+ }
65
+ ]
66
+ }
67
+ \`\`\`
68
+
69
+ ## 重要提醒
70
+ - 必须输出完整的JSON格式
71
+ - 页面名称要准确反映功能
72
+ - 页面ID使用英文,采用驼峰命名法
73
+ - 考虑页面间的完整用户流程
74
+ - **特别注意分析页面内部的跳转关系,确保关联页面不遗漏**
75
+ - 在relatedPages字段中列出该页面可能跳转到的其他页面ID`;
13
76
  codePromptTemplate = `# 你是typescript代码专家,根据'规则'、'例子'和用户输入的需求描述,完成代码开发
14
77
 
15
78
  ## 项目框架描述
@@ -101,36 +164,196 @@ export default class HomePageData {
101
164
  public saveCount: number = 0
102
165
  public userInfo: BookInfo = new BookInfo()
103
166
  }`;
104
- uiDesignPromptTemplate = `# 你是专业的UI设计师和前端开发工程师,现在需要根据'生成规则'和'需求描述'来生成静态html代码,并按照'写入文件规则'将生成html写到html文件。
105
-
106
- ## 生成规则
107
- - 一个页面对应一个html+css代码文件,如果需要多个页面的,那就创建对应的html+css代码文件。
108
- - 必须只能使用静态html+css的写法完成静态html+css网页,该网页代码无js的代码,无js业务与交互逻辑,绝对不能使用vue、React、React Native、javascript等代码实现。
109
- - 必须要以手机屏幕分辨率:376*700。的规则来设计。
110
- - 设计样式规范必须遵循'样式UI规范',如果用户没有指定'样式UI规范',那就必须参考市面上流行的专业的APP/网站的相关页面的布局、样式、风格设计。
111
- - html的body节点必须写死width=376, height=700
112
- - 每一个节点必须添加一个组件类型属性:vtype。比如文字vtype="text"、按钮vtype="button"、文字按钮vtype="textButton"、输入框vtype="input"、图标vtype="icon"、图片vtype="image"、矩形vtype="rect"、圆形vtype="circle"、线条vtype="line"、基础容器vtype="container"、卡片容器vtype="card"、grid容器vtype="grid"、单选vtype="radio"、多选vtype="checkBox"、竖向列表vtype="verticalListView"、横向列表vtype="horizontalListView"、轮播vtype="viewPager"、轮播指示器容器vtype="IndicatorContainer"、Tab选项卡容器vtype="tabContainer"、Tab选项卡菜单栏vtype="tabMenuBar"、底部TAB导航栏vtype="bottomTabNavigateBar"、对话框vtype="dialog"、Toast提示vtype="toast"、下拉菜单vtype="dropDownMenu"、侧滑面板vtype="sideSlidePanel"等以此类推。
113
- - 除了vtype为'text'的所有节点必须添加一个英文id属性和中文名字name属性。你需要根据功能逻辑和组件类型来命名id属性和name属性,描述该元素在产品中的作用,命名使用简洁的风格。
114
- - 每一个节点必须添加这四个新属性:x1、y1、w1、h1。x1和y1是相对于屏幕左上角的像素绝对值,w1和h1是像素绝对值。这四个属性只起到信息提示作用,不会作用于布局和显示,但信息提示非常重要,因此你必须要给出准确的x1、y1、w1、h1的像素绝对值。
115
- - 如果是竖向列表、横向列表、轮播、tab选项卡的容器组件,里面的卡片item样式如果一样的话,只需要列出一个item的div即可,类似android的RecyclerView的卡片ViewHolder复用机制,只需要声明一个样式的卡片ViewHolder。
116
- - 所有关于像素大小的都必须使用px,如:15px。不得使用em、百分比%等等其他的。
117
- - html的内容除非有要求使用非中文,默认都使用中文
118
- - 节点的css样式不得使用before、after方式,如不可以这样写:.text:before, .text:after {
167
+ uiDesignPromptTemplate = `# 你是一名资深UI/UX设计专家和前端开发专家,拥有丰富的应用设计经验,精通苹果人机界面设计指南。你的任务是根据'用户需求描述'帮助我完成一个iOS App的原型设计,现在需要根据'生成规则'和'需求描述'来生成静态html代码,并按照'写入文件规则'将生成html写到html文件。
168
+
169
+ ## 请按照以下要求输出一套完整的高质量APP原型图:
170
+
171
+ 1. 设计目标
172
+ - 创建符合苹果人机界面指南(Human Interface Guidelines)的iOS原生风格设计
173
+ - 确保原型图能直观展示APP的功能流程和用户体验
174
+
175
+ 2. 设计规范
176
+ - 使用最新的iOS设计元素和交互模式
177
+ - 遵循iPhone 16 Pro尺寸规格(宽度393px高度852px)
178
+ - 采用明亮、活力的配色方案,符合健身应用氛围
179
+ - 重视无障碍设计,确保文字对比度和交互区域大小合适
180
+ - 使用简洁清晰的图标和插图风格
181
+ - 文字的大小必须要注意,不能大,文字的大小要偏小的风格来进行设计。
182
+ - 如果是页面卡片组件,要特别注意要水平居中
183
+ - 如果节点是可以点击的,css需添加上合适的hover的样式
184
+ - 页面的导航栏、操作栏、搜索栏、筛选栏等bar组件,要注意上下padding的值应该是一样的,绝对不能设置不一样的值
185
+ - 页面的顶部和底部要进行沉浸式设计
186
+ - 设计页面之前要思考清楚该页面内容是否应该一个屏幕显示完毕,不需滚动。
187
+
188
+ 3. html实现
189
+ - 使用 HTML + Tailwind CSS(或 Bootstrap)生成所有原型界面,并使用 FontAwesome(或其他开源 UI 组件)让界面更加精美、接近真实的 App 设计。
190
+ - 每个界面应作为独立的 HTML 文件存放,例如 home.html、profile.html、settings.html 等。
191
+ - index.html 作为主入口,不直接写入所有界面的 HTML 代码,而是使用 iframe 的方式嵌入这些 HTML 片段,并将所有页面直接平铺展示在 index 页面中,而不是跳转链接,而且每一个页面的iframe之间必须有20px的左右上下间距。
192
+ - 为每个屏幕添加设备边框、手机顶部状态栏(设定为22px,显示手机时间、信号、wifi等)、手机底部横条栏(设定为22px,显示横条),不要遮住屏幕内的内容,手机顶部状态栏和手机底部横条栏需要实现沉浸式,因此看情况设置背景色。
193
+ - 像素尽量使用px,不使用rem和em。
194
+ - 任何地方都不需要设置overflow: hidden,必须记住
195
+ - 每一个html代码文件,只显示页面名字和页面iframe就行,不需要显示任何其他非设计稿内容的提示、总结文字。
196
+ - html的内容除非有要求使用非中文,默认都使用中文
197
+ - 菜单项文字、按钮文字、U内容是标签或价格或状态等节点必须设置 "white-space: nowrap",否则会出现不美观的换行显示。
198
+ - 当使用CSS Flex布局时,请务必注意:如果父容器设置了 "flex: 1" 和 "overflow-y: auto",其子元素即使设置了固定高度(如 height: 300px),也可能因为默认的 "flex-shrink: 1" 被压缩至0高度。解决方案是为需要保持固定高度的flex子元素显式添加 "flex-shrink: 0",防止被flex布局压缩。
199
+ - 在编写水平滚动的标签栏或类似的UI组件时,务必注意:1) 父容器必须设置 "display: flex" + "align-items: center" 确保所有标签垂直居中对齐;2) 标签元素本身也要添加 "display: flex" + "align-items: center" 确保内部文字垂直居中且不被遮挡。缺少这些设置会导致标签高度不一致、文字显示异常。
200
+ - index.html的样式和里面的页面iframe的代码大概如下:
201
+ <style>
202
+ body {
203
+ margin: 0;
204
+ padding: 20px;
205
+ background-color: #f5f5f5;
206
+ font-family: 'Arial', sans-serif;
207
+ }
208
+ .container {
209
+ display: grid;
210
+ grid-template-columns: repeat(auto-fit, minmax(393px, 1fr));
211
+ gap: 40px;
212
+ justify-content: center;
213
+ max-width: 1600px;
214
+ margin: 0 auto;
215
+ }
216
+ .phone-container {
217
+ display: flex;
218
+ flex-direction: column;
219
+ align-items: center;
220
+ gap: 15px;
221
+ }
222
+ .page-title {
223
+ text-align: center;
224
+ font-size: 14px;
225
+ color: #333;
226
+ font-weight: 600;
227
+ margin-bottom: 10px;
228
+ }
229
+ .phone-frame {
230
+ width: 393px;
231
+ height: 852px;
232
+ background: #000;
233
+ border-radius: 40px;
234
+ padding: 10px;
235
+ box-shadow: 0 10px 30px rgba(0,0,0,0.3);
236
+ }
237
+ .screen {
238
+ width: 100%;
239
+ height: 100%;
240
+ border-radius: 30px;
241
+ overflow: hidden;
242
+ position: relative;
243
+ }
244
+ iframe {
245
+ width: 100%;
246
+ height: 100%;
247
+ border: none;
248
+ border-radius: 30px;
249
+ }
250
+ </style>
251
+ <body>
252
+ <div class="container">
253
+ <div class="phone-container">
254
+ <div class="page-title">xxx页</div>
255
+ <div class="phone-frame">
256
+ <div class="screen">
257
+ <iframe src="xxx.html"></iframe>
258
+ </div>
259
+ </div>
260
+ </div>
261
+ ...
262
+ </div>
263
+ - 每一个html页面的结构从上到下:手机顶部状态栏、手机底部主页指示横条,xxx页面容器。html代码大概如下:
264
+ <style>
265
+ body {
266
+ font-family: 'Poppins', sans-serif;
267
+ width: 393px;
268
+ height: 852px;
269
+ margin: 0;
270
+ padding: 0;
271
+ display: flex;
272
+ flex-direction: column;
273
+ position: relative;
274
+ overflow: hidden;
275
+ ...
276
+ }
277
+ .status-bar {
278
+ position: absolute;
279
+ top: 0;
280
+ left: 0;
281
+ right: 0;
282
+ height: 22px;
283
+ display: flex;
284
+ justify-content: space-between;
285
+ align-items: center;
286
+ padding: 0 20px;
287
+ font-size: 12px;
288
+ font-weight: 600;
289
+ z-index: 1000;
290
+ ...
291
+ }
292
+ .page-container {
293
+ flex: 1;
294
+ display: flex;
295
+ flex-direction: column;
296
+ padding: 22px 0;
297
+ overflow-y: auto;
298
+ }
299
+ .home-indicator {
300
+ position: absolute;
301
+ bottom: 0;
302
+ height: 22px;
303
+ left: 0;
304
+ right: 0;
305
+ display: flex;
306
+ justify-content: center;
307
+ align-items: center;
308
+ ...
309
+ }
310
+ </style>
311
+ <body name="首页">
312
+ <div name="手机顶部状态栏" class="status-bar">
313
+ </div>
314
+ <div name="手机底部主页指示横条" class="home-indicator">
315
+ </div>
316
+ <div name="首页页面容器" class="page-container">
317
+ </div>
318
+ </body>
319
+ - 每一个节点必须添加一个组件类型属性:vtype。比如文字vtype="text"、按钮vtype="button"、文字按钮vtype="textButton"、输入框vtype="input"、图标vtype="icon"、图片vtype="image"、矩形vtype="rect"、圆形vtype="circle"、线条vtype="line"、基础容器vtype="container"、卡片容器vtype="card"、grid容器vtype="grid"、单选vtype="radio"、多选vtype="checkBox"、竖向列表vtype="verticalListView"、横向列表vtype="horizontalListView"、轮播vtype="viewPager"、轮播指示器容器vtype="IndicatorContainer"、Tab选项卡容器vtype="tabContainer"、Tab选项卡菜单栏vtype="tabMenuBar"、底部TAB导航栏vtype="bottomTabNavigateBar"、顶部导航栏vtype="topNavigateBar"、顶部标题栏vtype="topTitleBar"、底部操作栏vtype="bottomOperateBar"、对话框vtype="dialog"、Toast提示vtype="toast"、下拉菜单vtype="dropDownMenu"、侧滑面板vtype="sideSlidePanel"等以此类推。
320
+ - 除了vtype为'text'的所有节点必须添加一个英文id属性和中文名字name属性。你需要根据功能逻辑和组件类型来命名id属性和name属性,描述该元素在产品中的作用,命名使用简洁的风格。
321
+ - Icon图标<i>标签节点也必须需要添加一个id和name的属性,比如:<i name="微信Icon" id="wxIcon" class="fab fa-weixin"></i>
322
+ - 页面的iframe里面的节点的css样式不得使用before、after方式,如不可以这样写:.text:before, .text:after {
119
323
  position: absolute;
120
324
  top: 50%;
121
325
  width: 60px;
122
326
  height: 1px;
123
327
  background: #e5e5e5;
124
328
  }
125
- - 如果是图片image节点,必须使用img标签,绝对不能使用div标签。
126
- - 如果是图标icon节点,绝对不能使用div标签,图标使用svg绘制。
127
- - 如果节点是active、selected、disabled状态,需要添加属性:state="active"或state="selected"或state="disabled"
128
- - 注意背景色和文字色冲突问题,比如浅背景色+浅色文字色会导致文字看不清,同样深色也是如此
129
- - css的代码必须内联写出来,绝对不能使用外联,如不能使用:href="style.css"。
329
+ - 如果节点是active、selected、disabled状态,需要添加属性:state="active"或state="selected"或state="disabled"
330
+ - 通过CDN引入Google Fonts字体
331
+ - 图标使用Font Awesome CDN
332
+ - 当网站设计需要图片时,可以使用以下可靠的图片源:
333
+ - Unsplash: https://images.unsplash.com/ (例如: https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800)
334
+ - Picsum: https://picsum.photos/ (例如: https://picsum.photos/800/600)
335
+
336
+ 请首先思考APP的信息架构和用户流程图,然后按照关键用户旅程逐一呈现高保真原型屏幕,最后提供设计规范概述。
337
+
338
+ ## 重点规则
339
+ - 第一步你得先充分理解'用户输入描述'的内容,然后分析得出一个正确而且全面的页面列表,不能漏掉一些页面,必须按要求把所有页面都进行高保真设计,你需要输出分析结果:总共多少个页面,分别是哪些页面。
340
+ - 必须是高保真的设计稿,不得使用原型设计那一套进行,必须要高保真的UI设计稿规则来设计,我希望这些界面是需要能直接拿去进行开发的。
341
+ - 每完成一个页面的html编写后,必须输出:总共几个页面,当前已完成几个页面,还剩几个页面。
342
+ - 设计的页面较多时,绝对不能以由于时间关系的原因而快速简单设计,这是绝对不允许的,必须要以高质量高保真的原则来设计每一个页面,也不能中途停止。
130
343
 
131
344
  ## 写入文件规则
132
- - 将生成的html+css代码写入工程根目录下面的.bytefun文件夹里面的'tempUI.html'文件里面,只将html+css的代码写入对应的页面文件,其他任何注释、解释、澄清、总结等文字不得写入该文件。
345
+ - 所有html文件写入工程根目录下面的.bytefun/html文件夹里面的,每个html文件里只将html+css的代码写入,其他任何注释、解释、澄清、总结等文字不得写入该文件。
133
346
  `;
347
+ /**
348
+ * 优化列出所需页面列表提示词
349
+ * 注意:此方法专门处理页面列表分析需求,输出结果供UI设计使用
350
+ */
351
+ async optimizePageListPrompt(userInput) {
352
+ return `${this.pageListPromptTemplate}
353
+
354
+ # 用户需求描述
355
+ ${userInput}`;
356
+ }
134
357
  /**
135
358
  * 优化代码开发提示词
136
359
  * 注意:此方法专门处理代码开发相关需求,不会自动处理UI设计或原型设计内容
@@ -145,11 +368,70 @@ ${userInput}`;
145
368
  * 优化UI设计提示词
146
369
  * 注意:此方法专门处理UI设计相关需求,不会自动处理代码开发或原型设计内容
147
370
  */
148
- async optimizeUIDesignPrompt(userInput) {
149
- return `${this.uiDesignPromptTemplate}
371
+ async optimizeUIDesignPrompt(userInput, pageList) {
372
+ let prompt = this.uiDesignPromptTemplate;
373
+ if (pageList) {
374
+ prompt += `
375
+
376
+ # 页面列表参考
377
+ ${pageList}
378
+
379
+ ## 重要说明
380
+ - 请参考上述页面列表来确定需要设计哪些页面
381
+ - 如果当前工程中已经存在某些页面,请排除这些页面,只设计尚未存在的页面
382
+ - 严格按照页面列表中的页面名称和功能描述进行设计`;
383
+ }
384
+ return `${prompt}
150
385
 
151
386
  # 用户需求描述
152
387
  ${userInput}`;
153
388
  }
389
+ /**
390
+ * 复合工具:UI设计 + 代码编写
391
+ * 先进行UI设计,然后进行代码开发
392
+ */
393
+ async optimizeUIDesignAndCodePrompt(userInput) {
394
+ const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput);
395
+ const codePrompt = await this.optimizeCodePrompt(userInput);
396
+ return {
397
+ uiDesignPrompt,
398
+ codePrompt
399
+ };
400
+ }
401
+ /**
402
+ * 复合工具:列出所需页面列表 + UI设计
403
+ * 先分析页面列表,然后基于页面列表进行UI设计
404
+ */
405
+ async optimizePageListAndUIDesignPrompt(userInput) {
406
+ const pageListPrompt = await this.optimizePageListPrompt(userInput);
407
+ // UI设计提示词需要等页面列表结果后再生成,这里先生成基础版本
408
+ const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput);
409
+ return {
410
+ pageListPrompt,
411
+ uiDesignPrompt
412
+ };
413
+ }
414
+ /**
415
+ * 复合工具:列出所需页面列表 + UI设计 + 代码编写
416
+ * 完整的工作流程:页面列表分析 → UI设计 → 代码开发
417
+ */
418
+ async optimizeFullWorkflowPrompt(userInput) {
419
+ const pageListPrompt = await this.optimizePageListPrompt(userInput);
420
+ // UI设计提示词需要等页面列表结果后再生成,这里先生成基础版本
421
+ const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput);
422
+ const codePrompt = await this.optimizeCodePrompt(userInput);
423
+ return {
424
+ pageListPrompt,
425
+ uiDesignPrompt,
426
+ codePrompt
427
+ };
428
+ }
429
+ /**
430
+ * 基于页面列表结果生成UI设计提示词
431
+ * 此方法用于在获得页面列表结果后,生成包含页面列表信息的UI设计提示词
432
+ */
433
+ async generateUIDesignPromptWithPageList(userInput, pageListResult) {
434
+ return await this.optimizeUIDesignPrompt(userInput, pageListResult);
435
+ }
154
436
  }
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUNULGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwRnRDLENBQUM7SUFFZ0Isc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkIzQyxDQUFDO0lBRUE7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQWlCO1FBQ3hDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCOzs7RUFHbkMsU0FBUyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWlCO1FBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCOzs7RUFHdkMsU0FBUyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJ5dGVGdW4gQUkgTUNQIOaPkOekuuivjeS8mOWMluWZqFxuICogXG4gKiDph43opoHor7TmmI7vvJpcbiAqIC0g5pys57G75o+Q5L6b5Lik5Liq54us56uL55qE5LyY5YyW5bel5YW377yM5q+P5Liq5bel5YW35aSE55CG5LiN5ZCM57G75Z6L55qE6ZyA5rGCXG4gKiAtIOavj+asoeWPquiDveiwg+eUqOS4gOS4quW3peWFt+aWueazle+8jOS4jeS8muiHquWKqOe7hOWQiOaIlumAieaLqVxuICogXG4gKiDkvb/nlKjmlrnlvI/vvJpcbiAqIDEuIFVJ6K6+6K6h6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVVSURlc2lnblByb21wdCgpICBcbiAqIDIuIOS7o+eggeW8gOWPkemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplQ29kZVByb21wdCgpXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9tcHRPcHRpbWl6ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr3R5cGVzY3JpcHTku6PnoIHkuJPlrrbvvIzmoLnmja4n6KeE5YiZJ+OAgSfkvovlrZAn5ZKM55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM5a6M5oiQ5Luj56CB5byA5Y+RXG5cbiMjIOmhueebruahhuaetuaPj+i/sFxuLSDmlbTkuKrpobnnm67moYbmnrbliIbkuLrnqIvluo/lhaXlj6NBcHBsaWNhdGlvbi50c+OAgeeoi+W6j+WFqOWxgOmdmeaAgeWPmOmHj1N0YXRpY0RhdGEudHPjgIHmiYDmnInpobXpnaJwYWdl5paH5Lu25aS544CBVUnnu4Tku7blupN1aWxpYuaWh+S7tuWkueOAgeWQjuerr+aOpeWPo0FsbEJhY2tFbmRBcGkudHPjgIHllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c+OAglxuLSDov5nmmK/kuIDkuKrmlrDlnovlvIDlj5HmoYbmnrbvvIxVSeeVjOmdouW3sue7j+S9v+eUqOWPr+inhuWMluW3peWFt+eUn+aIkOS6huaJgOacieeahOmdmeaAgeeahFVJ6aG16Z2i5LqG77yM54S25ZCO5L2g6ZyA6KaB5L2/55SodHPku6PnoIHlvIDlj5HkuJrliqHpgLvovpHkuI5VSeS6pOS6kumAu+i+ke+8jOWboOatpOe8luWGmXRz5Luj56CB5Y+q6ZyA6KaB5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w5a6M5oiQ5Lia5Yqh6YC76L6R5LiOVUnkuqTkupLnmoTlvIDlj5HjgIJcblxuIyMg6KeE5YiZ77yaXG4x44CBVUnnlYzpnaLlt7Lnu4/lvIDlj5Hlrozmr5XvvIzkuI3pnIDopoHlop7liKDmlLnku7vkvZXpnZnmgIFVSeeVjOmdouOAglxuMuOAgeS9oOWPqumcgOimgeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOS9v+eUqHRz5Luj56CB5a6M5oiQ5Lia5Yqh6YC76L6R5LiOVUnkuqTkupLnmoTlvIDlj5FcbjPjgIHor7fkuKXmoLzmjInnhafllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c++8jOS4jeimgeaWsOWinuOAgeWIoOmZpOaIluS/ruaUueS7u+S9lUFsbEZ1bmN0aW9u5o6l5Y+j5aOw5piO77yb5Lmf5LiN6KaB6LCD55So5YW25LuW5pyq5ZyoQWxsRnVuY3Rpb27kuK3lh7rnjrDnmoTlh73mlbDmiJbmqKHlnZdcbjTjgIHmiYDmnInlkI7nq69BUEnosIPnlKjlv4Xpobvkvb/nlKhBbGxCYWNrRW5kQXBp57G75Lit5a6a5LmJ55qE5pa55rOV77yM5LiN5YWB6K645L2/55So5pyq5ZyoQWxsQmFja0VuZEFwaeS4reWumuS5ieeahOWQjuerr0FQSeOAglxuNeOAgVVJ55WM6Z2i44CBVUnpu5jorqTmlbDmja7jgIFVSeagt+W8j+W3sue7j+WFqOmDqOeUn+aIkOWlveeahOS6hu+8jOS9oOS4jeiDveWcqGluaXRWaWV35pa55rOV6YeM6Z2i5pOF6Ieq5re75Yqg5LiA5Lqbdmlld+eahFVJ5qC35byP5oiW5bGe5oCn562J5Yid5aeL5YyW77yM6Zmk6Z2e55So5oi36ZyA5rGC5o+P6L+w5piO56Gu5oyH5Ye66ZyA6KaB5pu05pS55ZOq5Lqb5qC35byP5oiW5bGe5oCn44CCXG4244CB5a2X56ym5Liy6KaB5Lul5Y2V5byV5Y+35p2l5YaZ77yM5aaC77yaJ+aIkeeahCfjgIJcbjfjgIHku7vkvZXmlrnms5Xlh73mlbDlrprkuYnvvIzkuI3lvpfkvb/nlKhhc3luY+WSjFByb21pc2XvvIzmiYDmnInlvILmraXmk43kvZzlv4Xpobvkvb/nlKjnrq3lpLTlh73mlbDjgIJcbjjjgIHmiYDmnIlQYWdl55qE5a2Q57G777yM6YO95YWB6K645re75Yqg5p6E6YCg5Ye95pWw5ZKM5p6E6YCg5Ye95pWw55qE5Y+C5pWw77yM6L+Z5Lqb5Y+C5pWw5bCx55So5p2l6aG16Z2i6Lez6L2s5pe26aG16Z2i5LmL6Ze05Lyg6YCS5pWw5o2u5L2/55So77yM5q+U5aaC77ya5ZWG5ZOB5YiX6KGo6aG1UHJvamVjdExpc3RQYWdl6Lez5Yiw5ZWG5ZOB6K+m5oOF6aG1UHJvamVjdERldGFpbFBhZ2XvvIzpgqPkuYhQcm9qZWN0TGlzdFBhZ2XlupTor6XopoHkvKDnu5lQcm9qZWN0RGV0YWlsUGFnZeS4gOS4quWPguaVsO+8mnByb2R1Y3RJROOAguaJgOS7pe+8jFByb2plY3REZXRhaWxQYWdl55qE6aG16Z2i5Y+C5pWw5aOw5piO5ZKM5p6E6YCg5Ye95pWw5bqU6K+l5piv6L+Z5qC35YaZ77yacHJpdmF0ZSBwcm9kdWN0SUQ6IHN0cmluZ1xuXG5cdGNvbnN0cnVjdG9yKHByb2R1Y3RJRDogc3RyaW5nKSB7XG5cdFx0c3VwZXIoKVxuXHRcdHRoaXMucHJvZHVjdElEID0gcHJvZHVjdElEXG5cdH3jgIJcbjnjgIFWaWV355u45YWz5Y+Y6YeP5b+F6aG75ZyoeHh4UGFnZeexu+W8gOWni+aXtuWjsOaYju+8jOW/hemhu+WjsOaYjuWFt+S9k+eahFZpZXfnsbvlnovlpoLvvJpJbnB1dFZpZXfvvIzogIzkuI3mmK/nm7TmjqXlo7DmmI7nsbvlnovkuLpCYXNlVmlld++8jOaJgOaciVZpZXflv4XpobtmaW5kVmlld0J5SUTliJ3lp4vljJbvvIzlpoLvvJpzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV344CC6L+Z6YeM55qEZmluZFZpZXdCeUlE5YW25LitaWTlj4LmlbDmmK/lnKjor6XpobXpnaLnmoRodG1s5paH5Lu26YeM6Z2i6I635Y+W5Yiw55qEaWTlgLzjgIJcbjEw44CB5ZON5bqU5byP5byV55SocmVm55qE5L2/55So77ya57G75Z6LdnVlM+eahHJlZu+8jOWPr+S7peWwhuS4gOS4quWAvOWPmOaIkOWTjeW6lOW8j+eahO+8jOS7juiAjOWcqOivpeWAvOWPkeeUn+WPmOWMluaXtu+8jOiHquWKqOinpuWPkeebuOWFs+eVjOmdoueahOabtOaWsOOAglxuMTHjgIFjb21wdXRlZOeahOS9v+eUqO+8muexu+Wei3Z1ZTPnmoRjb21wdXRlZO+8jOW9k+S9oOmcgOimgeagueaNruS4gOS4quaIluWkmuS4quWTjeW6lOW8j+a6kChyZWYp6K6h566X5Ye65LiA5Liq5paw55qE5YC85pe277yM5bCx55SoIGNvbXB1dGVkXG4xMuOAgeWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj+OAglxuMTPjgIHlhajlsYDpnZnmgIHlj5jph4/lnKjlhbPpl61BUFDmiJbogIXnvZHpobXlkI7kvJrmuIXnkIbmjonnmoTvvIzmiYDku6XkvaDopoHmgJ3ogIPmuIXmpZrlk6rkupvmlbDmja7lj5jph4/pnIDopoHmjIHkuYXljJblgqjlrZjvvIzlk6rkupvmmK/lhajlsYDpnZnmgIHlj5jph4/vvIzmjIHkuYXljJbmjqXlj6PvvJpzYXZlRGF0YWJhc2VYeHjlkoxnZXREYXRhYmFzZURhdGFYeHjvvIzmr5TlpoLmmK/lkKblt7Lnu4/lvLnlh7rov4flub/lkYrlvLnmoYbvvIzov5nkuKrlupTor6XmjIHkuYXljJblgqjlrZjjgIJcbjE044CB5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4xNeOAgemhtemdoui3s+i9rOS9v+eUqEFsbEZ1bmN0aW9uLm5hdmlnYXRlVG/lrp7njrDvvIxuYXZpZ2F0ZVRv5Lyg5YWlUGFnZeeahOWtkOexu+Wvueixoe+8jOWmgu+8mkFsbEZ1bmN0aW9uLm5hdmlnYXRlVG8obmV3IFByb2R1Y3RQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbjE244CB6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbjE344CB5a2X56ym5Liy5LiN5b6X55u05o6l6L+b6KGMYm9vbGVhbui/kOeul+eEtuWQjui1i+WAvOe7mWJvb2xlYW7nsbvlnovnmoTlj5jph4/vvIzpnIDopoHlnKjlrZfnrKbkuLLliY3pnaLmt7vliqDkuKTkuKrpnZ7ov5DnrpfvvJohIeOAguavlOWmguato+ehrueahOWGmeazle+8mmNvbnN0IGlzQWRkID0gISF0aGlzLmlucHV0Vmlldy50ZXh0ICYmIGlzTmV3XG4xOOOAgeWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3TjgIJcbjE544CB5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG4yMOOAgeaJgOacieS7o+eggeS4jeW+l+S9v+eUqGludGVyZmFjZe+8jOaVsOaNruWunuS9k2VudGl0ee+8jOW/hemhu+S9v+eUqGNsYXNz5a6a5LmJ77yM5LiN5b6X5L2/55SoaW50ZXJmYWNl77yM5L2/55So5LmL5YmN6ZyA6KaBbmV35a6e5L6L5YyWXG4yMeOAgeavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5bu66K6u5ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i77yM6aG16Z2i5paH5Lu25aS55LiL6L+Y6ZyA5Yib5bu65LiA5Liq6aG16Z2i5pWw5o2udHPmlofku7Yo5aaCbG9naW5QYWdlRGF0YS50cynvvIzov5nmoLflpoJsb2dpblBhZ2XotJ/otKPkuJrliqHpgLvovpHlkozkuqTkupLpgLvovpHvvIzlpoJsb2dpblBhZ2VEYXRh6LSf6LSj5pWw5o2u5aOw5piO5a6a5LmJ44CB5Yid5aeL5YyW5LiO566h55CG562J44CCXG4yMuOAgemhtemdouaWh+S7tuWkueS4i+mdoueahOmhtemdomh0bWwo5aaCbG9naW5QYWdlVmlldy5odG1sKe+8jOi/meaYr+WPr+inhuWMluW3sue7j+eUn+aIkOeahFVJ55WM6Z2i55qE6IqC54K55pig5bCE77yM6K+l5paH5Lu25Y+q5piv55So5LqO5L2g5pu05Yqg55CG6Kej6K+l6aG16Z2i55qEVUnnu5PmnoTlkoznu4Tku7blkb3lkI3ogIzorr7nq4vnmoTvvIzor6Xmlofku7bkuI3lj4LkuI7nvJbor5HvvIzku4Xku4XmmK/kv6Hmga/mlofmoaPmj5DnpLrkvZznlKjvvIzlm6DmraTkuI3lj6/ku6Xkv67mlLnov5nkuKpodG1s5paH5Lu244CCXG4yM+OAgeWPque7meivpemhtemdouS9v+eUqOeahGVudGl0eemcgOimgeW7uueri+WcqOivpemhtemdouaWh+S7tuWkueS4i+mdoueahGVudGl0eeaWh+S7tuWkueS4i+mdouOAglxuMjTjgIFsaWLmlofku7blpLnmmK/miYDmnIlVSee7hOS7tuWSjOiDveWKm+aWueazleeahOWumuS5ieWjsOaYju+8jOW6leWxguahhuaetuW3suazqOWFpeWunueOsOWFt+S9k+mAu+i+ke+8jOWboOatpOS9oOS4jemcgOimgeS5n+S4jeWFgeiuuOWinuWIoOaUuWxpYuaWh+S7tuWkuemHjOmdoueahOS7o+eggeOAglxuXG4jIyDkvovlrZDvvJpcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgLy8g5pWw5o2u5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBob21lUGFnZURhdGE6IEhvbWVQYWdlRGF0YSA9IG5ldyBIb21lUGFnZURhdGEoKVxuICAgIC8vIOinhuWbvuWvueixoeWunuS+i+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld1xuICAgIHByaXZhdGUgdGl0bGVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgndGl0bGVUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBzYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgYWxsU2F2ZUNvdW50VGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ2FsbFNhdmVDb3VudFRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVUaXBzVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVUaXBzVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIC8vIHJlZuaVsOaNruWvueixoeW8leeUqOWjsOaYjlxuICAgIHByaXZhdGUgc2F2ZUNvdW50UmVmID0gcmVmPG51bWJlcj4odGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50KVxuICAgIHByaXZhdGUgYWxsU2F2ZUNvdW50UmVmID0gcmVmPG51bWJlcj4oMClcbiAgICAvLyDmma7pgJrlj5jph4/lo7DmmI5cbiAgICBwcml2YXRlIHNhdmVUaXBzID0gJydcblxuICAgIHByb3RlY3RlZCBvblBhZ2VDcmVhdGUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uUGFnZUNyZWF0ZSgpXG4gICAgICAgIHRoaXMuaW5pdERhdGEoKVxuICAgICAgICB0aGlzLmluaXRWaWV3KClcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXREYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVUaXBzID0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWUgPiA1ID8gJ+S/neWtmOaIkOWKnycgOiAn5L+d5a2Y5aSx6LSlJ1xuICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFJlZiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBvdGhlckNvdW50ID0gMlxuICAgICAgICAgICAgb3RoZXJDb3VudCArPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZVxuICAgICAgICAgICAgaWYgKG90aGVyQ291bnQgPiA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9tZVBhZ2VEYXRhLnNhdmVDb3VudCArIDVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9tZVBhZ2VEYXRhLnNhdmVDb3VudCArIDEwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQ291bnRUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWUgKyAn5LiqJ1xuICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLmFsbFNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuc2F2ZUJ1dHRvbi5vbkNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUrK1xuICAgICAgICAgICAgdGhpcy5ob21lUGFnZURhdGEudGl0bGUgPSAnSG9tZSBQYWdlJ1xuICAgICAgICAgICAgdGhpcy50aXRsZVRleHRWaWV3LnRleHQgPSB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZVxuICAgICAgICAgICAgdGhpcy5zYXZlVGlwc1RleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVUaXBzXG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5zYXZlRGF0YWJhc2VOdW1iZXIoJ3NhdmVDb3VudCcsIHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbWVQYWdlRGF0YSB7XG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmcgPSAnJ1xuICAgIHB1YmxpYyBzYXZlQ291bnQ6IG51bWJlciA9IDBcbiAgICBwdWJsaWMgdXNlckluZm86IEJvb2tJbmZvID0gbmV3IEJvb2tJbmZvKClcbn1gO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdWlEZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+S4k+S4mueahFVJ6K6+6K6h5biI5ZKM5YmN56uv5byA5Y+R5bel56iL5biI77yM546w5Zyo6ZyA6KaB5qC55o2uJ+eUn+aIkOinhOWImSflkown6ZyA5rGC5o+P6L+wJ+adpeeUn+aIkOmdmeaAgWh0bWzku6PnoIHvvIzlubbmjInnhacn5YaZ5YWl5paH5Lu26KeE5YiZJ+WwhueUn+aIkGh0bWzlhpnliLBodG1s5paH5Lu244CCXG5cbiMjIOeUn+aIkOinhOWImVxuLSDkuIDkuKrpobXpnaLlr7nlupTkuIDkuKpodG1sK2Nzc+S7o+eggeaWh+S7tu+8jOWmguaenOmcgOimgeWkmuS4qumhtemdoueahO+8jOmCo+WwseWIm+W7uuWvueW6lOeahGh0bWwrY3Nz5Luj56CB5paH5Lu244CCXG4tIOW/hemhu+WPquiDveS9v+eUqOmdmeaAgWh0bWwrY3Nz55qE5YaZ5rOV5a6M5oiQ6Z2Z5oCBaHRtbCtjc3PnvZHpobXvvIzor6XnvZHpobXku6PnoIHml6Bqc+eahOS7o+egge+8jOaXoGpz5Lia5Yqh5LiO5Lqk5LqS6YC76L6R77yM57ud5a+55LiN6IO95L2/55SodnVl44CBUmVhY3TjgIFSZWFjdCBOYXRpdmXjgIFqYXZhc2NyaXB0562J5Luj56CB5a6e546w44CCXG4tIOW/hemhu+imgeS7peaJi+acuuWxj+W5leWIhui+qOeOh++8mjM3Nio3MDDjgILnmoTop4TliJnmnaXorr7orqHjgIJcbi0g6K6+6K6h5qC35byP6KeE6IyD5b+F6aG76YG15b6qJ+agt+W8j1VJ6KeE6IyDJ++8jOWmguaenOeUqOaIt+ayoeacieaMh+WumifmoLflvI9VSeinhOiMgyfvvIzpgqPlsLHlv4Xpobvlj4LogIPluILpnaLkuIrmtYHooYznmoTkuJPkuJrnmoRBUFAv572R56uZ55qE55u45YWz6aG16Z2i55qE5biD5bGA44CB5qC35byP44CB6aOO5qC86K6+6K6h44CCXG4tIGh0bWznmoRib2R56IqC54K55b+F6aG75YaZ5q27d2lkdGg9Mzc277yMIGhlaWdodD03MDBcbi0g5q+P5LiA5Liq6IqC54K55b+F6aG75re75Yqg5LiA5Liq57uE5Lu257G75Z6L5bGe5oCn77yadnR5cGXjgILmr5TlpoLmloflrZd2dHlwZT1cInRleHRcIuOAgeaMiemSrnZ0eXBlPVwiYnV0dG9uXCLjgIHmloflrZfmjInpkq52dHlwZT1cInRleHRCdXR0b25cIuOAgei+k+WFpeahhnZ0eXBlPVwiaW5wdXRcIuOAgeWbvuagh3Z0eXBlPVwiaWNvblwi44CB5Zu+54mHdnR5cGU9XCJpbWFnZVwi44CB55+p5b2idnR5cGU9XCJyZWN0XCLjgIHlnIblvaJ2dHlwZT1cImNpcmNsZVwi44CB57q/5p2hdnR5cGU9XCJsaW5lXCLjgIHln7rnoYDlrrnlmah2dHlwZT1cImNvbnRhaW5lclwi44CB5Y2h54mH5a655ZmodnR5cGU9XCJjYXJkXCLjgIFncmlk5a655ZmodnR5cGU9XCJncmlkXCLjgIHljZXpgIl2dHlwZT1cInJhZGlvXCLjgIHlpJrpgIl2dHlwZT1cImNoZWNrQm94XCLjgIHnq5blkJHliJfooah2dHlwZT1cInZlcnRpY2FsTGlzdFZpZXdcIuOAgeaoquWQkeWIl+ihqHZ0eXBlPVwiaG9yaXpvbnRhbExpc3RWaWV3XCLjgIHova7mkq12dHlwZT1cInZpZXdQYWdlclwi44CB6L2u5pKt5oyH56S65Zmo5a655ZmodnR5cGU9XCJJbmRpY2F0b3JDb250YWluZXJcIuOAgVRhYumAiemhueWNoeWuueWZqHZ0eXBlPVwidGFiQ29udGFpbmVyXCLjgIFUYWLpgInpobnljaHoj5zljZXmoI92dHlwZT1cInRhYk1lbnVCYXJcIuOAgeW6lemDqFRBQuWvvOiIquagj3Z0eXBlPVwiYm90dG9tVGFiTmF2aWdhdGVCYXJcIuOAgeWvueivneahhnZ0eXBlPVwiZGlhbG9nXCLjgIFUb2FzdOaPkOekunZ0eXBlPVwidG9hc3RcIuOAgeS4i+aLieiPnOWNlXZ0eXBlPVwiZHJvcERvd25NZW51XCLjgIHkvqfmu5HpnaLmnb92dHlwZT1cInNpZGVTbGlkZVBhbmVsXCLnrYnku6XmraTnsbvmjqjjgIJcbi0g6Zmk5LqGdnR5cGXkuLondGV4dCfnmoTmiYDmnInoioLngrnlv4Xpobvmt7vliqDkuIDkuKroi7HmlodpZOWxnuaAp+WSjOS4reaWh+WQjeWtl25hbWXlsZ7mgKfjgILkvaDpnIDopoHmoLnmja7lip/og73pgLvovpHlkoznu4Tku7bnsbvlnovmnaXlkb3lkI1pZOWxnuaAp+WSjG5hbWXlsZ7mgKfvvIzmj4/ov7Dor6XlhYPntKDlnKjkuqflk4HkuK3nmoTkvZznlKjvvIzlkb3lkI3kvb/nlKjnroDmtIHnmoTpo47moLzjgIJcbi0g5q+P5LiA5Liq6IqC54K55b+F6aG75re75Yqg6L+Z5Zub5Liq5paw5bGe5oCn77yaeDHjgIF5MeOAgXcx44CBaDHjgIJ4MeWSjHkx5piv55u45a+55LqO5bGP5bmV5bem5LiK6KeS55qE5YOP57Sg57ud5a+55YC877yMdzHlkoxoMeaYr+WDj+e0oOe7neWvueWAvOOAgui/meWbm+S4quWxnuaAp+WPqui1t+WIsOS/oeaBr+aPkOekuuS9nOeUqO+8jOS4jeS8muS9nOeUqOS6juW4g+WxgOWSjOaYvuekuu+8jOS9huS/oeaBr+aPkOekuumdnuW4uOmHjeimge+8jOWboOatpOS9oOW/hemhu+imgee7meWHuuWHhuehrueahHgx44CBeTHjgIF3MeOAgWgx55qE5YOP57Sg57ud5a+55YC844CCXG4tIOWmguaenOaYr+erluWQkeWIl+ihqOOAgeaoquWQkeWIl+ihqOOAgei9ruaSreOAgXRhYumAiemhueWNoeeahOWuueWZqOe7hOS7tu+8jOmHjOmdoueahOWNoeeJh2l0ZW3moLflvI/lpoLmnpzkuIDmoLfnmoTor53vvIzlj6rpnIDopoHliJflh7rkuIDkuKppdGVt55qEZGl25Y2z5Y+v77yM57G75Ly8YW5kcm9pZOeahFJlY3ljbGVyVmlld+eahOWNoeeJh1ZpZXdIb2xkZXLlpI3nlKjmnLrliLbvvIzlj6rpnIDopoHlo7DmmI7kuIDkuKrmoLflvI/nmoTljaHniYdWaWV3SG9sZGVy44CCXG4tIOaJgOacieWFs+S6juWDj+e0oOWkp+Wwj+eahOmDveW/hemhu+S9v+eUqHB477yM5aaC77yaMTVweOOAguS4jeW+l+S9v+eUqGVt44CB55m+5YiG5q+UJeetieetieWFtuS7lueahOOAglxuLSBodG1s55qE5YaF5a656Zmk6Z2e5pyJ6KaB5rGC5L2/55So6Z2e5Lit5paH77yM6buY6K6k6YO95L2/55So5Lit5paHXG4tIOiKgueCueeahGNzc+agt+W8j+S4jeW+l+S9v+eUqGJlZm9yZeOAgWFmdGVy5pa55byP77yM5aaC5LiN5Y+v5Lul6L+Z5qC35YaZ77yaLnRleHQ6YmVmb3JlLCAudGV4dDphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2U1ZTVlNTtcbiAgICB9XG4tIOWmguaenOaYr+WbvueJh2ltYWdl6IqC54K577yM5b+F6aG75L2/55SoaW1n5qCH562+77yM57ud5a+55LiN6IO95L2/55SoZGl25qCH562+44CCXG4tIOWmguaenOaYr+Wbvuagh2ljb27oioLngrnvvIznu53lr7nkuI3og73kvb/nlKhkaXbmoIfnrb7vvIzlm77moIfkvb/nlKhzdmfnu5jliLbjgIJcbi0g5aaC5p6c6IqC54K55pivYWN0aXZl44CBc2VsZWN0ZWTjgIFkaXNhYmxlZOeKtuaAge+8jOmcgOimgea3u+WKoOWxnuaAp++8mnN0YXRlPVwiYWN0aXZlXCLmiJZzdGF0ZT1cInNlbGVjdGVkXCLmiJZzdGF0ZT1cImRpc2FibGVkXCJcbi0g5rOo5oSP6IOM5pmv6Imy5ZKM5paH5a2X6Imy5Yay56qB6Zeu6aKY77yM5q+U5aaC5rWF6IOM5pmv6ImyK+a1heiJsuaWh+Wtl+iJsuS8muWvvOiHtOaWh+Wtl+eci+S4jea4he+8jOWQjOagt+a3seiJsuS5n+aYr+WmguatpFxuLSBjc3PnmoTku6PnoIHlv4XpobvlhoXogZTlhpnlh7rmnaXvvIznu53lr7nkuI3og73kvb/nlKjlpJbogZTvvIzlpoLkuI3og73kvb/nlKjvvJpocmVmPVwic3R5bGUuY3NzXCLjgIJcblxuIyMg5YaZ5YWl5paH5Lu26KeE5YiZXG4tIOWwhueUn+aIkOeahGh0bWwrY3Nz5Luj56CB5YaZ5YWl5bel56iL5qC555uu5b2V5LiL6Z2i55qELmJ5dGVmdW7mlofku7blpLnph4zpnaLnmoQndGVtcFVJLmh0bWwn5paH5Lu26YeM6Z2i77yM5Y+q5bCGaHRtbCtjc3PnmoTku6PnoIHlhpnlhaXlr7nlupTnmoTpobXpnaLmlofku7bvvIzlhbbku5bku7vkvZXms6jph4rjgIHop6Pph4rjgIHmvoTmuIXjgIHmgLvnu5PnrYnmloflrZfkuI3lvpflhpnlhaXor6Xmlofku7bjgIJcbmA7XG5cbiAgLyoqXG4gICAqIOS8mOWMluS7o+eggeW8gOWPkeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbku6PnoIHlvIDlj5Hnm7jlhbPpnIDmsYLvvIzkuI3kvJroh6rliqjlpITnkIZVSeiuvuiuoeaIluWOn+Wei+iuvuiuoeWGheWuuVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb2RlUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMllVJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhlVJ6K6+6K6h55u45YWz6ZyA5rGC77yM5LiN5Lya6Ieq5Yqo5aSE55CG5Luj56CB5byA5Y+R5oiW5Y6f5Z6L6K6+6K6h5YaF5a65XG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy51aURlc2lnblByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxufSAiXX0=
437
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ1Qsc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQ0F5RFIsQ0FBQztJQUVsQixrQkFBa0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMEZ0QyxDQUFDO0lBRWdCLHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1MM0MsQ0FBQztJQUVBOzs7T0FHRztJQUNILEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxTQUFpQjtRQUM1QyxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjs7O0VBR3ZDLFNBQVMsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxTQUFpQjtRQUN4QyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjs7O0VBR25DLFNBQVMsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxTQUFpQixFQUFFLFFBQWlCO1FBQy9ELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUV6QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJOzs7RUFHZCxRQUFROzs7OzswQkFLZ0IsQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxHQUFHLE1BQU07OztFQUdsQixTQUFTLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsNkJBQTZCLENBQUMsU0FBaUI7UUFDbkQsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUQsT0FBTztZQUNMLGNBQWM7WUFDZCxVQUFVO1NBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsaUNBQWlDLENBQUMsU0FBaUI7UUFDdkQsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsaUNBQWlDO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLE9BQU87WUFDTCxjQUFjO1lBQ2QsY0FBYztTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUFDLFNBQWlCO1FBQ2hELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLGlDQUFpQztRQUNqQyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxPQUFPO1lBQ0wsY0FBYztZQUNkLGNBQWM7WUFDZCxVQUFVO1NBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsa0NBQWtDLENBQUMsU0FBaUIsRUFBRSxjQUFzQjtRQUNoRixPQUFPLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN0RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJ5dGVGdW4gQUkgTUNQIOaPkOekuuivjeS8mOWMluWZqFxuICogXG4gKiDph43opoHor7TmmI7vvJpcbiAqIC0g5pys57G75o+Q5L6b5LiJ5Liq54us56uL55qE5LyY5YyW5bel5YW35ZKM5aSN5ZCI6LCD55So6ZO+5Yqf6IO9XG4gKiAtIOavj+S4quWNleS4gOW3peWFt+WkhOeQhuS4jeWQjOexu+Wei+eahOmcgOaxgu+8jOWkjeWQiOW3peWFt+aUr+aMgeWkmuS4quW3peWFt+eahOe7hOWQiOiwg+eUqFxuICogXG4gKiDljZXkuIDlt6Xlhbfkvb/nlKjmlrnlvI/vvJpcbiAqIDEuIFVJ6K6+6K6h6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVVSURlc2lnblByb21wdCgpICBcbiAqIDIuIOS7o+eggeW8gOWPkemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplQ29kZVByb21wdCgpXG4gKiBcbiAqIOWkjeWQiOW3peWFt+S9v+eUqOaWueW8j++8mlxuICogMS4gVUnorr7orqEgKyDku6PnoIHnvJblhpkg4oaSIOiwg+eUqCBvcHRpbWl6ZVVJRGVzaWduQW5kQ29kZVByb21wdCgpXG4gKiAyLiDliJflh7rmiYDpnIDpobXpnaLliJfooaggKyBVSeiuvuiuoSDihpIg6LCD55SoIG9wdGltaXplUGFnZUxpc3RBbmRVSURlc2lnblByb21wdCgpXG4gKiAzLiDliJflh7rmiYDpnIDpobXpnaLliJfooaggKyBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplRnVsbFdvcmtmbG93UHJvbXB0KClcbiAqL1xuZXhwb3J0IGNsYXNzIFByb21wdE9wdGltaXplciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFnZUxpc3RQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+S6p+WTgee7j+eQhuWSjFVJL1VY6K6+6K6h5LiT5a6277yM6LSf6LSj5YiG5p6Q55So5oi36ZyA5rGC77yM5YiX5Ye65a6M5pW055qE6aG16Z2i5YiX6KGoXG5cbiMjIOS9oOeahOS7u+WKoVxu5qC55o2u55So5oi35o+Q5L6b55qE6ZyA5rGC5o+P6L+w77yM5rex5YWl55CG6Kej5Lqn5ZOB5Yqf6IO95ZKM55So5oi35rWB56iL77yM6L6T5Ye65LiA5Liq5a6M5pW044CB5YeG56Gu55qE6aG16Z2i5YiX6KGo44CCXG5cbiMjIOWIhuaekOWOn+WImVxuMS4gKirlhajpnaLmgKcqKiAtIOS4jemBl+a8j+S7u+S9leW/heimgeeahOmhtemdolxuMi4gKirpgLvovpHmgKcqKiAtIOmhtemdoumXtOeahOi3s+i9rOmAu+i+keimgeWQiOeQhlxuMy4gKirnlKjmiLfkvZPpqowqKiAtIOiAg+iZkeWujOaVtOeahOeUqOaIt+S9v+eUqOa1geeoi1xuNC4gKirlip/og73lrozmlbTmgKcqKiAtIOehruS/neaJgOacieWKn+iDvemDveacieWvueW6lOeahOmhtemdouaUr+aSkVxuNS4gKirlhbPogZTpobXpnaLliIbmnpAqKiAtIOa3seWFpeWIhuaekOavj+S4qumhtemdouWGhemDqOWPr+iDvei3s+i9rOeahOWFs+iBlOmhtemdolxuXG4jIyDmoLjlv4PliIbmnpDop4TliJlcbiMjIyDpobXpnaLot7PovazlhbPogZTliIbmnpBcbumcgOimgeeQhuino+eUqOaIt+i+k+WFpeaPj+i/sO+8jOeEtuWQjuWujOaVtOW5tuWHhuehruWcsOWIl+WHuumcgOimgeWTquS6m+mhtemdou+8jCoq54m55Yir6YeN6KaB55qE5piv6KaB5YyF5ous6K+l6aG16Z2i6YeM6Z2i5Y+v6IO96Lez6L2s55qE5omA5pyJ5YWz6IGU6aG16Z2iKirjgIJcblxuKirkvovlpoLnmbvlvZXpobXpnaLnmoTlhbPogZTot7PovazliIbmnpDvvJoqKlxuLSDkuLvpobXpnaLvvJrnmbvlvZXpobVcbi0g5Y+v6IO955qE5YWz6IGU6Lez6L2s6aG16Z2i77yaXG4gIC0g55So5oi35Y2P6K6u6aG16Z2i77yI54K55Ye755So5oi35Y2P6K6u6ZO+5o6l77yJXG4gIC0g55So5oi36ZqQ56eB6aG16Z2i77yI54K55Ye76ZqQ56eB5pS/562W6ZO+5o6l77yJXG4gIC0g5b+Y6K6w5a+G56CB6aG16Z2i77yI54K55Ye75b+Y6K6w5a+G56CB5oyJ6ZKu77yJXG4gIC0g5rOo5YaM5paw55So5oi36aG16Z2i77yI54K55Ye75rOo5YaM5oyJ6ZKu77yJXG4gIC0g5L+u5pS55a+G56CB6aG16Z2i77yI5LuO5b+Y6K6w5a+G56CB5rWB56iL6L+b5YWl77yJXG5cbioq5YiG5p6Q5pa55rOV77yaKipcbjEuIOivhuWIq+avj+S4quS4u+imgeWKn+iDvemhtemdolxuMi4g5YiG5p6Q6K+l6aG16Z2i5LiK5Y+v6IO95a2Y5Zyo55qE5oyJ6ZKu44CB6ZO+5o6l44CB5pON5L2cXG4zLiDnoa7lrprov5nkupvmk43kvZzkvJrot7PovazliLDlk6rkupvpobXpnaJcbjQuIOmAkuW9kuWIhuaekOaWsOWPkeeOsOeahOmhtemdoueahOi3s+i9rOWFs+ezu1xuNS4g56Gu5L+d5omA5pyJ5Y+v6IO955qE55So5oi36Lev5b6E6YO95pyJ5a+55bqU55qE6aG16Z2iXG5cbiMjIOi+k+WHuuagvOW8j+imgeaxglxu6K+35oyJ54Wn5Lul5LiLSlNPTuagvOW8j+i+k+WHuumhtemdouWIl+ihqO+8mlxuXG5cXGBcXGBcXGBqc29uXG57XG4gIFwiYW5hbHlzaXNcIjogXCLlr7nnlKjmiLfpnIDmsYLnmoTnkIbop6PlkozliIbmnpBcIixcbiAgXCJ0b3RhbFBhZ2VzXCI6IOaVsOWtlyxcbiAgXCJwYWdlTGlzdFwiOiBbXG4gICAge1xuICAgICAgXCJwYWdlTmFtZVwiOiBcIumhtemdouS4reaWh+WQjeensFwiLFxuICAgICAgXCJwYWdlSWRcIjogXCLpobXpnaLoi7HmlodJRFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIumhtemdouWKn+iDveaPj+i/sFwiLFxuICAgICAgXCJ1c2VyRmxvd1wiOiBcIueUqOaIt+iuv+mXruatpOmhtemdoueahOWcuuaZr1wiLFxuICAgICAgXCJyZWxhdGVkUGFnZXNcIjogW1wi5Y+v6IO96Lez6L2s5Yiw55qE5YWz6IGU6aG16Z2iSUTliJfooahcIl1cbiAgICB9XG4gIF1cbn1cblxcYFxcYFxcYFxuXG4jIyDph43opoHmj5DphpJcbi0g5b+F6aG76L6T5Ye65a6M5pW055qESlNPTuagvOW8j1xuLSDpobXpnaLlkI3np7DopoHlh4bnoa7lj43mmKDlip/og71cbi0g6aG16Z2iSUTkvb/nlKjoi7HmlofvvIzph4fnlKjpqbzls7Dlkb3lkI3ms5Vcbi0g6ICD6JmR6aG16Z2i6Ze055qE5a6M5pW055So5oi35rWB56iLXG4tICoq54m55Yir5rOo5oSP5YiG5p6Q6aG16Z2i5YaF6YOo55qE6Lez6L2s5YWz57O777yM56Gu5L+d5YWz6IGU6aG16Z2i5LiN6YGX5ryPKipcbi0g5ZyocmVsYXRlZFBhZ2Vz5a2X5q615Lit5YiX5Ye66K+l6aG16Z2i5Y+v6IO96Lez6L2s5Yiw55qE5YW25LuW6aG16Z2iSURgO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZVByb21wdFRlbXBsYXRlID0gYCMg5L2g5pivdHlwZXNjcmlwdOS7o+eggeS4k+Wutu+8jOagueaNrifop4TliJkn44CBJ+S+i+WtkCflkoznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DvvIzlrozmiJDku6PnoIHlvIDlj5FcblxuIyMg6aG555uu5qGG5p625o+P6L+wXG4tIOaVtOS4qumhueebruahhuaetuWIhuS4uueoi+W6j+WFpeWPo0FwcGxpY2F0aW9uLnRz44CB56iL5bqP5YWo5bGA6Z2Z5oCB5Y+Y6YePU3RhdGljRGF0YS50c+OAgeaJgOaciemhtemdonBhZ2Xmlofku7blpLnjgIFVSee7hOS7tuW6k3VpbGli5paH5Lu25aS544CB5ZCO56uv5o6l5Y+jQWxsQmFja0VuZEFwaS50c+OAgeWUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz44CCXG4tIOi/meaYr+S4gOS4quaWsOWei+W8gOWPkeahhuaetu+8jFVJ55WM6Z2i5bey57uP5L2/55So5Y+v6KeG5YyW5bel5YW355Sf5oiQ5LqG5omA5pyJ55qE6Z2Z5oCB55qEVUnpobXpnaLkuobvvIznhLblkI7kvaDpnIDopoHkvb/nlKh0c+S7o+eggeW8gOWPkeS4muWKoemAu+i+keS4jlVJ5Lqk5LqS6YC76L6R77yM5Zug5q2k57yW5YaZdHPku6PnoIHlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7DlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkeOAglxuXG4jIyDop4TliJnvvJpcbjHjgIFVSeeVjOmdouW3sue7j+W8gOWPkeWujOavle+8jOS4jemcgOimgeWinuWIoOaUueS7u+S9lemdmeaAgVVJ55WM6Z2i44CCXG4y44CB5L2g5Y+q6ZyA6KaB5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w5L2/55SodHPku6PnoIHlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkVxuM+OAgeivt+S4peagvOaMieeFp+WUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz77yM5LiN6KaB5paw5aKe44CB5Yig6Zmk5oiW5L+u5pS55Lu75L2VQWxsRnVuY3Rpb27mjqXlj6Plo7DmmI7vvJvkuZ/kuI3opoHosIPnlKjlhbbku5bmnKrlnKhBbGxGdW5jdGlvbuS4reWHuueOsOeahOWHveaVsOaIluaooeWdl1xuNOOAgeaJgOacieWQjuerr0FQSeiwg+eUqOW/hemhu+S9v+eUqEFsbEJhY2tFbmRBcGnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhBbGxCYWNrRW5kQXBp5Lit5a6a5LmJ55qE5ZCO56uvQVBJ44CCXG4144CBVUnnlYzpnaLjgIFVSem7mOiupOaVsOaNruOAgVVJ5qC35byP5bey57uP5YWo6YOo55Sf5oiQ5aW955qE5LqG77yM5L2g5LiN6IO95ZyoaW5pdFZpZXfmlrnms5Xph4zpnaLmk4Xoh6rmt7vliqDkuIDkupt2aWV355qEVUnmoLflvI/miJblsZ7mgKfnrYnliJ3lp4vljJbvvIzpmaTpnZ7nlKjmiLfpnIDmsYLmj4/ov7DmmI7noa7mjIflh7rpnIDopoHmm7TmlLnlk6rkupvmoLflvI/miJblsZ7mgKfjgIJcbjbjgIHlrZfnrKbkuLLopoHku6XljZXlvJXlj7fmnaXlhpnvvIzlpoLvvJon5oiR55qEJ+OAglxuN+OAgeS7u+S9leaWueazleWHveaVsOWumuS5ie+8jOS4jeW+l+S9v+eUqGFzeW5j5ZKMUHJvbWlzZe+8jOaJgOacieW8guatpeaTjeS9nOW/hemhu+S9v+eUqOeureWktOWHveaVsOOAglxuOOOAgeaJgOaciVBhZ2XnmoTlrZDnsbvvvIzpg73lhYHorrjmt7vliqDmnoTpgKDlh73mlbDlkozmnoTpgKDlh73mlbDnmoTlj4LmlbDvvIzov5nkupvlj4LmlbDlsLHnlKjmnaXpobXpnaLot7Povazml7bpobXpnaLkuYvpl7TkvKDpgJLmlbDmja7kvb/nlKjvvIzmr5TlpoLvvJrllYblk4HliJfooajpobVQcm9qZWN0TGlzdFBhZ2Xot7PliLDllYblk4Hor6bmg4XpobVQcm9qZWN0RGV0YWlsUGFnZe+8jOmCo+S5iFByb2plY3RMaXN0UGFnZeW6lOivpeimgeS8oOe7mVByb2plY3REZXRhaWxQYWdl5LiA5Liq5Y+C5pWw77yacHJvZHVjdElE44CC5omA5Lul77yMUHJvamVjdERldGFpbFBhZ2XnmoTpobXpnaLlj4LmlbDlo7DmmI7lkozmnoTpgKDlh73mlbDlupTor6XmmK/ov5nmoLflhpnvvJpwcml2YXRlIHByb2R1Y3RJRDogc3RyaW5nXG5cblx0Y29uc3RydWN0b3IocHJvZHVjdElEOiBzdHJpbmcpIHtcblx0XHRzdXBlcigpXG5cdFx0dGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcblx0feOAglxuOeOAgVZpZXfnm7jlhbPlj5jph4/lv4XpobvlnKh4eHhQYWdl57G75byA5aeL5pe25aOw5piO77yM5b+F6aG75aOw5piO5YW35L2T55qEVmlld+exu+Wei+Wmgu+8mklucHV0Vmlld++8jOiAjOS4jeaYr+ebtOaOpeWjsOaYjuexu+Wei+S4ukJhc2VWaWV377yM5omA5pyJVmlld+W/hemhu2ZpbmRWaWV3QnlJROWIneWni+WMlu+8jOWmgu+8mnNhdmVCdXR0b246IEJ1dHRvblZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZUJ1dHRvbicpIGFzIEJ1dHRvblZpZXfjgILov5nph4znmoRmaW5kVmlld0J5SUTlhbbkuK1pZOWPguaVsOaYr+WcqOivpemhtemdoueahGh0bWzmlofku7bph4zpnaLojrflj5bliLDnmoRpZOWAvOOAglxuMTDjgIHlk43lupTlvI/lvJXnlKhyZWbnmoTkvb/nlKjvvJrnsbvlnot2dWUz55qEcmVm77yM5Y+v5Lul5bCG5LiA5Liq5YC85Y+Y5oiQ5ZON5bqU5byP55qE77yM5LuO6ICM5Zyo6K+l5YC85Y+R55Sf5Y+Y5YyW5pe277yM6Ieq5Yqo6Kem5Y+R55u45YWz55WM6Z2i55qE5pu05paw44CCXG4xMeOAgWNvbXB1dGVk55qE5L2/55So77ya57G75Z6LdnVlM+eahGNvbXB1dGVk77yM5b2T5L2g6ZyA6KaB5qC55o2u5LiA5Liq5oiW5aSa5Liq5ZON5bqU5byP5rqQKHJlZinorqHnrpflh7rkuIDkuKrmlrDnmoTlgLzml7bvvIzlsLHnlKggY29tcHV0ZWRcbjEy44CB5aaC5p6c5piv5aSa5Liq6aG16Z2i5YWx55So55qE5pWw5o2u5Y+Y6YeP77yM5Y+v5Lul6ICD6JmR5aOw5piO5Li65YWo5bGA6Z2Z5oCB5Y+Y6YeP44CCXG4xM+OAgeWFqOWxgOmdmeaAgeWPmOmHj+WcqOWFs+mXrUFQUOaIluiAhee9kemhteWQjuS8mua4heeQhuaOieeahO+8jOaJgOS7peS9oOimgeaAneiAg+a4healmuWTquS6m+aVsOaNruWPmOmHj+mcgOimgeaMgeS5heWMluWCqOWtmO+8jOWTquS6m+aYr+WFqOWxgOmdmeaAgeWPmOmHj++8jOaMgeS5heWMluaOpeWPo++8mnNhdmVEYXRhYmFzZVh4eOWSjGdldERhdGFiYXNlRGF0YVh4eO+8jOavlOWmguaYr+WQpuW3sue7j+W8ueWHuui/h+W5v+WRiuW8ueahhu+8jOi/meS4quW6lOivpeaMgeS5heWMluWCqOWtmOOAglxuMTTjgIHmiYDmnInnmoTnvZHnu5zmi6bmiKrnmoTlhajlsYDnu5/kuIDlpITnkIbpnIDopoHlnKhBcHBsaWNhdGlvbuS4reeahG9uR2xvYmFsTmV0U3VjY2Vzc0ludGVyY2VwdCjogZTnvZHmiJDlip/lkI7vvIzlkI7nq6/kuJrliqHmraPnoa7kuI7plJnor6/pg73kvJrlm57osIPliLDov5nph4zvvIzmiYDku6XlnKjov5nph4zlj6/nu5/kuIDlpITnkIbkuJrliqHplJnor6/noIEp5oiWb25HbG9iYWxOZXRGYWlsSW50ZXJjZXB0KOe9kee7nOS4jemAmu+8jOi/nuaOpeWksei0peaDheWGteS8muWbnuiwg+WIsOi/memHjCnph4zpnaLlpITnkIbjgIJcbjE144CB6aG16Z2i6Lez6L2s5L2/55SoQWxsRnVuY3Rpb24ubmF2aWdhdGVUb+WunueOsO+8jG5hdmlnYXRlVG/kvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24ubmF2aWdhdGVUbyhuZXcgUHJvZHVjdFBhZ2UodGhpcy5wcm9kdWN0SUQpKeOAglxuMTbjgIHpobXpnaLlhoXnmoTnvZHnu5zor7fmsYLkuJrliqHlpITnkIbkuI3lvpflhpnlnKhBcHBsaWNhdGlvbueahG9uR2xvYmFsTmV0U3VjY2Vzc0ludGVyY2VwdOmHjOmdouOAglxuMTfjgIHlrZfnrKbkuLLkuI3lvpfnm7TmjqXov5vooYxib29sZWFu6L+Q566X54S25ZCO6LWL5YC857uZYm9vbGVhbuexu+Wei+eahOWPmOmHj++8jOmcgOimgeWcqOWtl+espuS4suWJjemdoua3u+WKoOS4pOS4qumdnui/kOeul++8miEh44CC5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaY29uc3QgaXNBZGQgPSAhIXRoaXMuaW5wdXRWaWV3LnRleHQgJiYgaXNOZXdcbjE444CB5aaC55So5oi35o+P6L+w5rKh5pyJ5piO56Gu6K+05piO6ZyA6KaBdG9hc3Tmj5DnpLrvvIzkvaDkuI3lvpfmk4Xoh6rov5vooYxUb2FzdOOAglxuMTnjgIHlu7bml7bmiafooYxBbGxGdW5jdGlvbi5zZXRUaW1lb3V057O757uf5Lya6Ieq5Yqo5riF55CGdGltZW91dO+8jOS7o+eggeS4iue7neWvueS4jeiDvei/m+ihjGNsZWFUaW1lb3V0562J57G75Ly85pON5L2c77yM5Zug5q2kc2V0VGltZW91dOS5n+S4jemcgOimgeWjsOaYjuWPmOmHj+WOu+aOpeaUtnNldFRpbWVvdXTov5Tlm57nmoTlvJXnlKjjgIJcbjIw44CB5omA5pyJ5Luj56CB5LiN5b6X5L2/55SoaW50ZXJmYWNl77yM5pWw5o2u5a6e5L2TZW50aXR577yM5b+F6aG75L2/55SoY2xhc3PlrprkuYnvvIzkuI3lvpfkvb/nlKhpbnRlcmZhY2XvvIzkvb/nlKjkuYvliY3pnIDopoFuZXflrp7kvovljJZcbjIx44CB5q+P5LiA5Liq6aG16Z2iKOWmgmxvZ2luUGFnZSnlu7rorq7lnKhwYWdl5paH5Lu25aS55LiL6Z2i5Yib5bu65LiA5Liq6aG16Z2i5paH5Lu25aS5KOWmgmxvZ2luKe+8jOeEtuWQjumhtemdoueahHRz5paH5Lu2KOWmgmxvZ2luUGFnZS50cynliJvlu7rlnKjpobXpnaLmlofku7blpLnkuIvpnaLvvIzpobXpnaLmlofku7blpLnkuIvov5jpnIDliJvlu7rkuIDkuKrpobXpnaLmlbDmja50c+aWh+S7tijlpoJsb2dpblBhZ2VEYXRhLnRzKe+8jOi/meagt+WmgmxvZ2luUGFnZei0n+i0o+S4muWKoemAu+i+keWSjOS6pOS6kumAu+i+ke+8jOWmgmxvZ2luUGFnZURhdGHotJ/otKPmlbDmja7lo7DmmI7lrprkuYnjgIHliJ3lp4vljJbkuI7nrqHnkIbnrYnjgIJcbjIy44CB6aG16Z2i5paH5Lu25aS55LiL6Z2i55qE6aG16Z2iaHRtbCjlpoJsb2dpblBhZ2VWaWV3Lmh0bWwp77yM6L+Z5piv5Y+v6KeG5YyW5bey57uP55Sf5oiQ55qEVUnnlYzpnaLnmoToioLngrnmmKDlsITvvIzor6Xmlofku7blj6rmmK/nlKjkuo7kvaDmm7TliqDnkIbop6Por6XpobXpnaLnmoRVSee7k+aehOWSjOe7hOS7tuWRveWQjeiAjOiuvueri+eahO+8jOivpeaWh+S7tuS4jeWPguS4jue8luivke+8jOS7heS7heaYr+S/oeaBr+aWh+aho+aPkOekuuS9nOeUqO+8jOWboOatpOS4jeWPr+S7peS/ruaUuei/meS4qmh0bWzmlofku7bjgIJcbjIz44CB5Y+q57uZ6K+l6aG16Z2i5L2/55So55qEZW50aXR56ZyA6KaB5bu656uL5Zyo6K+l6aG16Z2i5paH5Lu25aS55LiL6Z2i55qEZW50aXR55paH5Lu25aS55LiL6Z2i44CCXG4yNOOAgWxpYuaWh+S7tuWkueaYr+aJgOaciVVJ57uE5Lu25ZKM6IO95Yqb5pa55rOV55qE5a6a5LmJ5aOw5piO77yM5bqV5bGC5qGG5p625bey5rOo5YWl5a6e546w5YW35L2T6YC76L6R77yM5Zug5q2k5L2g5LiN6ZyA6KaB5Lmf5LiN5YWB6K645aKe5Yig5pS5bGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB44CCXG5cbiMjIOS+i+WtkO+8mlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPigwKVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgICBvdGhlckNvdW50ICs9IHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlXG4gICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlICsgJ+S4qidcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLm9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZSA9ICdIb21lIFBhZ2UnXG4gICAgICAgICAgICB0aGlzLnRpdGxlVGV4dFZpZXcudGV4dCA9IHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1aURlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5LiA5ZCN6LWE5rexVUkvVVjorr7orqHkuJPlrrblkozliY3nq6/lvIDlj5HkuJPlrrbvvIzmi6XmnInkuLDlr4znmoTlupTnlKjorr7orqHnu4/pqozvvIznsr7pgJroi7nmnpzkurrmnLrnlYzpnaLorr7orqHmjIfljZfjgILkvaDnmoTku7vliqHmmK/moLnmja4n55So5oi36ZyA5rGC5o+P6L+wJ+W4ruWKqeaIkeWujOaIkOS4gOS4qmlPUyBBcHDnmoTljp/lnovorr7orqHvvIznjrDlnKjpnIDopoHmoLnmja4n55Sf5oiQ6KeE5YiZJ+WSjCfpnIDmsYLmj4/ov7An5p2l55Sf5oiQ6Z2Z5oCBaHRtbOS7o+egge+8jOW5tuaMieeFpyflhpnlhaXmlofku7bop4TliJkn5bCG55Sf5oiQaHRtbOWGmeWIsGh0bWzmlofku7bjgIJcblxuIyMg6K+35oyJ54Wn5Lul5LiL6KaB5rGC6L6T5Ye65LiA5aWX5a6M5pW055qE6auY6LSo6YePQVBQ5Y6f5Z6L5Zu+77yaXG5cbjEuIOiuvuiuoeebruagh1xuICAgLSDliJvlu7rnrKblkIjoi7nmnpzkurrmnLrnlYzpnaLmjIfljZcoSHVtYW4gSW50ZXJmYWNlIEd1aWRlbGluZXMp55qEaU9T5Y6f55Sf6aOO5qC86K6+6K6hXG4gICAtIOehruS/neWOn+Wei+WbvuiDveebtOinguWxleekukFQUOeahOWKn+iDvea1geeoi+WSjOeUqOaIt+S9k+mqjFxuXG4yLiDorr7orqHop4TojINcbiAgIC0g5L2/55So5pyA5paw55qEaU9T6K6+6K6h5YWD57Sg5ZKM5Lqk5LqS5qih5byPXG4gICAtIOmBteW+qmlQaG9uZSAxNiBQcm/lsLrlr7jop4TmoLwo5a695bqmMzkzcHjpq5jluqY4NTJweClcbiAgIC0g6YeH55So5piO5Lqu44CB5rS75Yqb55qE6YWN6Imy5pa55qGI77yM56ym5ZCI5YGl6Lqr5bqU55So5rCb5Zu0XG4gICAtIOmHjeinhuaXoOmanOeijeiuvuiuoe+8jOehruS/neaWh+Wtl+WvueavlOW6puWSjOS6pOS6kuWMuuWfn+Wkp+Wwj+WQiOmAglxuICAgLSDkvb/nlKjnroDmtIHmuIXmmbDnmoTlm77moIflkozmj5Llm77po47moLxcbiAgIC0g5paH5a2X55qE5aSn5bCP5b+F6aG76KaB5rOo5oSP77yM5LiN6IO95aSn77yM5paH5a2X55qE5aSn5bCP6KaB5YGP5bCP55qE6aOO5qC85p2l6L+b6KGM6K6+6K6h44CCXG4gICAtIOWmguaenOaYr+mhtemdouWNoeeJh+e7hOS7tu+8jOimgeeJueWIq+azqOaEj+imgeawtOW5s+WxheS4rVxuICAgLSDlpoLmnpzoioLngrnmmK/lj6/ku6Xngrnlh7vnmoTvvIxjc3PpnIDmt7vliqDkuIrlkIjpgILnmoRob3ZlcueahOagt+W8j1xuICAgLSDpobXpnaLnmoTlr7zoiKrmoI/jgIHmk43kvZzmoI/jgIHmkJzntKLmoI/jgIHnrZvpgInmoI/nrYliYXLnu4Tku7bvvIzopoHms6jmhI/kuIrkuItwYWRkaW5n55qE5YC85bqU6K+l5piv5LiA5qC355qE77yM57ud5a+55LiN6IO96K6+572u5LiN5LiA5qC355qE5YC8XG4gICAtIOmhtemdoueahOmhtumDqOWSjOW6lemDqOimgei/m+ihjOayiea1uOW8j+iuvuiuoVxuICAgLSDorr7orqHpobXpnaLkuYvliY3opoHmgJ3ogIPmuIXmpZror6XpobXpnaLlhoXlrrnmmK/lkKblupTor6XkuIDkuKrlsY/luZXmmL7npLrlrozmr5XvvIzkuI3pnIDmu5rliqjjgIJcblxuMy4gaHRtbOWunueOsFxuICAtIOS9v+eUqCBIVE1MICsgVGFpbHdpbmQgQ1NT77yI5oiWIEJvb3RzdHJhcO+8ieeUn+aIkOaJgOacieWOn+Wei+eVjOmdou+8jOW5tuS9v+eUqCBGb250QXdlc29tZe+8iOaIluWFtuS7luW8gOa6kCBVSSDnu4Tku7bvvInorqnnlYzpnaLmm7TliqDnsr7nvo7jgIHmjqXov5HnnJ/lrp7nmoQgQXBwIOiuvuiuoeOAglxuICAtIOavj+S4queVjOmdouW6lOS9nOS4uueLrOeri+eahCBIVE1MIOaWh+S7tuWtmOaUvu+8jOS+i+WmgiBob21lLmh0bWzjgIFwcm9maWxlLmh0bWzjgIFzZXR0aW5ncy5odG1sIOetieOAglxuICAtIGluZGV4Lmh0bWwg5L2c5Li65Li75YWl5Y+j77yM5LiN55u05o6l5YaZ5YWl5omA5pyJ55WM6Z2i55qEIEhUTUwg5Luj56CB77yM6ICM5piv5L2/55SoIGlmcmFtZSDnmoTmlrnlvI/ltYzlhaXov5nkupsgSFRNTCDniYfmrrXvvIzlubblsIbmiYDmnInpobXpnaLnm7TmjqXlubPpk7rlsZXnpLrlnKggaW5kZXgg6aG16Z2i5Lit77yM6ICM5LiN5piv6Lez6L2s6ZO+5o6l77yM6ICM5LiU5q+P5LiA5Liq6aG16Z2i55qEaWZyYW1l5LmL6Ze05b+F6aG75pyJMjBweOeahOW3puWPs+S4iuS4i+mXtOi3neOAglxuICAtIOS4uuavj+S4quWxj+W5lea3u+WKoOiuvuWkh+i+ueahhuOAgeaJi+acuumhtumDqOeKtuaAgeagjyjorr7lrprkuLoyMnB477yM5pi+56S65omL5py65pe26Ze044CB5L+h5Y+344CBd2lmaeetiSnjgIHmiYvmnLrlupXpg6jmqKrmnaHmoI8o6K6+5a6a5Li6MjJweO+8jOaYvuekuuaoquadoSnvvIzkuI3opoHpga7kvY/lsY/luZXlhoXnmoTlhoXlrrnvvIzmiYvmnLrpobbpg6jnirbmgIHmoI/lkozmiYvmnLrlupXpg6jmqKrmnaHmoI/pnIDopoHlrp7njrDmsonmtbjlvI/vvIzlm6DmraTnnIvmg4XlhrXorr7nva7og4zmma/oibLjgIJcbiAgLSDlg4/ntKDlsL3ph4/kvb/nlKhweO+8jOS4jeS9v+eUqHJlbeWSjGVt44CCXG4gIC0g5Lu75L2V5Zyw5pa56YO95LiN6ZyA6KaB6K6+572ub3ZlcmZsb3c6IGhpZGRlbu+8jOW/hemhu+iusOS9j1xuICAtIOavj+S4gOS4qmh0bWzku6PnoIHmlofku7bvvIzlj6rmmL7npLrpobXpnaLlkI3lrZflkozpobXpnaJpZnJhbWXlsLHooYzvvIzkuI3pnIDopoHmmL7npLrku7vkvZXlhbbku5bpnZ7orr7orqHnqL/lhoXlrrnnmoTmj5DnpLrjgIHmgLvnu5PmloflrZfjgIJcbiAgLSBodG1s55qE5YaF5a656Zmk6Z2e5pyJ6KaB5rGC5L2/55So6Z2e5Lit5paH77yM6buY6K6k6YO95L2/55So5Lit5paHXG4gIC0g6I+c5Y2V6aG55paH5a2X44CB5oyJ6ZKu5paH5a2X44CBVeWGheWuueaYr+agh+etvuaIluS7t+agvOaIlueKtuaAgeetieiKgueCueW/hemhu+iuvue9riBcIndoaXRlLXNwYWNlOiBub3dyYXBcIu+8jOWQpuWImeS8muWHuueOsOS4jee+juingueahOaNouihjOaYvuekuuOAglxuICAtIOW9k+S9v+eUqENTUyBGbGV45biD5bGA5pe277yM6K+35Yqh5b+F5rOo5oSP77ya5aaC5p6c54i25a655Zmo6K6+572u5LqGIFwiZmxleDogMVwiIOWSjCBcIm92ZXJmbG93LXk6IGF1dG9cIu+8jOWFtuWtkOWFg+e0oOWNs+S9v+iuvue9ruS6huWbuuWumumrmOW6pu+8iOWmgiBoZWlnaHQ6IDMwMHB477yJ77yM5Lmf5Y+v6IO95Zug5Li66buY6K6k55qEIFwiZmxleC1zaHJpbms6IDFcIiDooqvljovnvKnoh7Mw6auY5bqm44CC6Kej5Yaz5pa55qGI5piv5Li66ZyA6KaB5L+d5oyB5Zu65a6a6auY5bqm55qEZmxleOWtkOWFg+e0oOaYvuW8j+a3u+WKoCBcImZsZXgtc2hyaW5rOiAwXCLvvIzpmLLmraLooqtmbGV45biD5bGA5Y6L57yp44CCXG4gIC0g5Zyo57yW5YaZ5rC05bmz5rua5Yqo55qE5qCH562+5qCP5oiW57G75Ly855qEVUnnu4Tku7bml7bvvIzliqHlv4Xms6jmhI/vvJoxKSDniLblrrnlmajlv4Xpobvorr7nva4gXCJkaXNwbGF5OiBmbGV4XCIgKyBcImFsaWduLWl0ZW1zOiBjZW50ZXJcIiDnoa7kv53miYDmnInmoIfnrb7lnoLnm7TlsYXkuK3lr7npvZDvvJsyKSDmoIfnrb7lhYPntKDmnKzouqvkuZ/opoHmt7vliqAgXCJkaXNwbGF5OiBmbGV4XCIgKyBcImFsaWduLWl0ZW1zOiBjZW50ZXJcIiDnoa7kv53lhoXpg6jmloflrZflnoLnm7TlsYXkuK3kuJTkuI3ooqvpga7mjKHjgILnvLrlsJHov5nkupvorr7nva7kvJrlr7zoh7TmoIfnrb7pq5jluqbkuI3kuIDoh7TjgIHmloflrZfmmL7npLrlvILluLjjgIJcbiAgLSBpbmRleC5odG1s55qE5qC35byP5ZKM6YeM6Z2i55qE6aG16Z2iaWZyYW1l55qE5Luj56CB5aSn5qaC5aaC5LiL77yaXG4gICAgPHN0eWxlPlxuICAgICAgICBib2R5IHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdBcmlhbCcsIHNhbnMtc2VyaWY7XG4gICAgICAgIH1cbiAgICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzOTNweCwgMWZyKSk7XG4gICAgICAgICAgICBnYXA6IDQwcHg7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTYwMHB4O1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgIH1cbiAgICAgICAgLnBob25lLWNvbnRhaW5lciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICBnYXA6IDE1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLnBhZ2UtdGl0bGUge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgfVxuICAgICAgICAucGhvbmUtZnJhbWUge1xuICAgICAgICAgICAgd2lkdGg6IDM5M3B4O1xuICAgICAgICAgICAgaGVpZ2h0OiA4NTJweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0MHB4O1xuICAgICAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwwLDAsMC4zKTtcbiAgICAgICAgfVxuICAgICAgICAuc2NyZWVuIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cbiAgICAgICAgaWZyYW1lIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDtcbiAgICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgPGJvZHk+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGhvbmUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS10aXRsZVwiPnh4eOmhtTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBob25lLWZyYW1lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcmVlblwiPlxuICAgICAgICAgICAgICAgICAgICA8aWZyYW1lIHNyYz1cInh4eC5odG1sXCI+PC9pZnJhbWU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIC4uLlxuICAgIDwvZGl2PlxuICAtIOavj+S4gOS4qmh0bWzpobXpnaLnmoTnu5PmnoTku47kuIrliLDkuIvvvJrmiYvmnLrpobbpg6jnirbmgIHmoI/jgIHmiYvmnLrlupXpg6jkuLvpobXmjIfnpLrmqKrmnaHvvIx4eHjpobXpnaLlrrnlmajjgIJodG1s5Luj56CB5aSn5qaC5aaC5LiL77yaXG4gICA8c3R5bGU+XG4gICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUG9wcGlucycsIHNhbnMtc2VyaWY7XG4gICAgICAgIHdpZHRoOiAzOTNweDtcbiAgICAgICAgaGVpZ2h0OiA4NTJweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIC4uLlxuICAgIH1cbiAgICAuc3RhdHVzLWJhciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiAyMnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgLnBhZ2UtY29udGFpbmVyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgcGFkZGluZzogMjJweCAwO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICAuaG9tZS1pbmRpY2F0b3Ige1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgaGVpZ2h0OiAyMnB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIC4uLlxuICAgIH1cbiAgICA8L3N0eWxlPlxuICA8Ym9keSBuYW1lPVwi6aaW6aG1XCI+XG4gICAgPGRpdiBuYW1lPVwi5omL5py66aG26YOo54q25oCB5qCPXCIgY2xhc3M9XCJzdGF0dXMtYmFyXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBuYW1lPVwi5omL5py65bqV6YOo5Li76aG15oyH56S65qiq5p2hXCIgY2xhc3M9XCJob21lLWluZGljYXRvclwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgbmFtZT1cIummlumhtemhtemdouWuueWZqFwiIGNsYXNzPVwicGFnZS1jb250YWluZXJcIj5cbiAgICA8L2Rpdj5cbiAgPC9ib2R5PlxuICAtIOavj+S4gOS4quiKgueCueW/hemhu+a3u+WKoOS4gOS4que7hOS7tuexu+Wei+WxnuaAp++8mnZ0eXBl44CC5q+U5aaC5paH5a2XdnR5cGU9XCJ0ZXh0XCLjgIHmjInpkq52dHlwZT1cImJ1dHRvblwi44CB5paH5a2X5oyJ6ZKudnR5cGU9XCJ0ZXh0QnV0dG9uXCLjgIHovpPlhaXmoYZ2dHlwZT1cImlucHV0XCLjgIHlm77moId2dHlwZT1cImljb25cIuOAgeWbvueJh3Z0eXBlPVwiaW1hZ2VcIuOAgeefqeW9onZ0eXBlPVwicmVjdFwi44CB5ZyG5b2idnR5cGU9XCJjaXJjbGVcIuOAgee6v+adoXZ0eXBlPVwibGluZVwi44CB5Z+656GA5a655ZmodnR5cGU9XCJjb250YWluZXJcIuOAgeWNoeeJh+WuueWZqHZ0eXBlPVwiY2FyZFwi44CBZ3JpZOWuueWZqHZ0eXBlPVwiZ3JpZFwi44CB5Y2V6YCJdnR5cGU9XCJyYWRpb1wi44CB5aSa6YCJdnR5cGU9XCJjaGVja0JveFwi44CB56uW5ZCR5YiX6KGodnR5cGU9XCJ2ZXJ0aWNhbExpc3RWaWV3XCLjgIHmqKrlkJHliJfooah2dHlwZT1cImhvcml6b250YWxMaXN0Vmlld1wi44CB6L2u5pKtdnR5cGU9XCJ2aWV3UGFnZXJcIuOAgei9ruaSreaMh+ekuuWZqOWuueWZqHZ0eXBlPVwiSW5kaWNhdG9yQ29udGFpbmVyXCLjgIFUYWLpgInpobnljaHlrrnlmah2dHlwZT1cInRhYkNvbnRhaW5lclwi44CBVGFi6YCJ6aG55Y2h6I+c5Y2V5qCPdnR5cGU9XCJ0YWJNZW51QmFyXCLjgIHlupXpg6hUQULlr7zoiKrmoI92dHlwZT1cImJvdHRvbVRhYk5hdmlnYXRlQmFyXCLjgIHpobbpg6jlr7zoiKrmoI92dHlwZT1cInRvcE5hdmlnYXRlQmFyXCLjgIHpobbpg6jmoIfpopjmoI92dHlwZT1cInRvcFRpdGxlQmFyXCLjgIHlupXpg6jmk43kvZzmoI92dHlwZT1cImJvdHRvbU9wZXJhdGVCYXJcIuOAgeWvueivneahhnZ0eXBlPVwiZGlhbG9nXCLjgIFUb2FzdOaPkOekunZ0eXBlPVwidG9hc3RcIuOAgeS4i+aLieiPnOWNlXZ0eXBlPVwiZHJvcERvd25NZW51XCLjgIHkvqfmu5HpnaLmnb92dHlwZT1cInNpZGVTbGlkZVBhbmVsXCLnrYnku6XmraTnsbvmjqjjgIJcbiAgLSDpmaTkuoZ2dHlwZeS4uid0ZXh0J+eahOaJgOacieiKgueCueW/hemhu+a3u+WKoOS4gOS4quiLseaWh2lk5bGe5oCn5ZKM5Lit5paH5ZCN5a2XbmFtZeWxnuaAp+OAguS9oOmcgOimgeagueaNruWKn+iDvemAu+i+keWSjOe7hOS7tuexu+Wei+adpeWRveWQjWlk5bGe5oCn5ZKMbmFtZeWxnuaAp++8jOaPj+i/sOivpeWFg+e0oOWcqOS6p+WTgeS4reeahOS9nOeUqO+8jOWRveWQjeS9v+eUqOeugOa0geeahOmjjuagvOOAglxuICAtIEljb27lm77moIc8aT7moIfnrb7oioLngrnkuZ/lv4XpobvpnIDopoHmt7vliqDkuIDkuKppZOWSjG5hbWXnmoTlsZ7mgKfvvIzmr5TlpoLvvJo8aSBuYW1lPVwi5b6u5L+hSWNvblwiIGlkPVwid3hJY29uXCIgY2xhc3M9XCJmYWIgZmEtd2VpeGluXCI+PC9pPlxuICAtIOmhtemdoueahGlmcmFtZemHjOmdoueahOiKgueCueeahGNzc+agt+W8j+S4jeW+l+S9v+eUqGJlZm9yZeOAgWFmdGVy5pa55byP77yM5aaC5LiN5Y+v5Lul6L+Z5qC35YaZ77yaLnRleHQ6YmVmb3JlLCAudGV4dDphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2U1ZTVlNTtcbiAgICB9XG4gIC0g5aaC5p6c6IqC54K55pivYWN0aXZl44CBc2VsZWN0ZWTjgIFkaXNhYmxlZOeKtuaAge+8jOmcgOimgea3u+WKoOWxnuaAp++8mnN0YXRlPVwiYWN0aXZlXCLmiJZzdGF0ZT1cInNlbGVjdGVkXCLmiJZzdGF0ZT1cImRpc2FibGVkXCJcbiAgLSDpgJrov4dDRE7lvJXlhaVHb29nbGUgRm9udHPlrZfkvZNcbiAgLSDlm77moIfkvb/nlKhGb250IEF3ZXNvbWUgQ0ROXG4gIC0g5b2T572R56uZ6K6+6K6h6ZyA6KaB5Zu+54mH5pe277yM5Y+v5Lul5L2/55So5Lul5LiL5Y+v6Z2g55qE5Zu+54mH5rqQ77yaXG4gICAgLSBVbnNwbGFzaDogaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tLyAo5L6L5aaCOiBodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjkwNTkyNTM0Ni0yMWJkYTRkMzJkZjQ/dz04MDApXG4gICAgLSBQaWNzdW06IGh0dHBzOi8vcGljc3VtLnBob3Rvcy8gKOS+i+WmgjogaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzgwMC82MDApXG5cbuivt+mmluWFiOaAneiAg0FQUOeahOS/oeaBr+aetuaehOWSjOeUqOaIt+a1geeoi+Wbvu+8jOeEtuWQjuaMieeFp+WFs+mUrueUqOaIt+aXheeoi+mAkOS4gOWRiOeOsOmrmOS/neecn+WOn+Wei+Wxj+W5le+8jOacgOWQjuaPkOS+m+iuvuiuoeinhOiMg+amgui/sOOAglxuXG4jIyDph43ngrnop4TliJlcbi0g56ys5LiA5q2l5L2g5b6X5YWI5YWF5YiG55CG6KejJ+eUqOaIt+i+k+WFpeaPj+i/sCfnmoTlhoXlrrnvvIznhLblkI7liIbmnpDlvpflh7rkuIDkuKrmraPnoa7ogIzkuJTlhajpnaLnmoTpobXpnaLliJfooajvvIzkuI3og73mvI/mjonkuIDkupvpobXpnaLvvIzlv4XpobvmjInopoHmsYLmiormiYDmnInpobXpnaLpg73ov5vooYzpq5jkv53nnJ/orr7orqHvvIzkvaDpnIDopoHovpPlh7rliIbmnpDnu5PmnpzvvJrmgLvlhbHlpJrlsJHkuKrpobXpnaLvvIzliIbliKvmmK/lk6rkupvpobXpnaLjgIJcbi0g5b+F6aG75piv6auY5L+d55yf55qE6K6+6K6h56i/77yM5LiN5b6X5L2/55So5Y6f5Z6L6K6+6K6h6YKj5LiA5aWX6L+b6KGM77yM5b+F6aG76KaB6auY5L+d55yf55qEVUnorr7orqHnqL/op4TliJnmnaXorr7orqHvvIzmiJHluIzmnJvov5nkupvnlYzpnaLmmK/pnIDopoHog73nm7TmjqXmi7/ljrvov5vooYzlvIDlj5HnmoTjgIJcbi0g5q+P5a6M5oiQ5LiA5Liq6aG16Z2i55qEaHRtbOe8luWGmeWQju+8jOW/hemhu+i+k+WHuu+8muaAu+WFseWHoOS4qumhtemdou+8jOW9k+WJjeW3suWujOaIkOWHoOS4qumhtemdou+8jOi/mOWJqeWHoOS4qumhtemdouOAglxuLSDorr7orqHnmoTpobXpnaLovoPlpJrml7bvvIznu53lr7nkuI3og73ku6XnlLHkuo7ml7bpl7TlhbPns7vnmoTljp/lm6DogIzlv6vpgJ/nroDljZXorr7orqHvvIzov5nmmK/nu53lr7nkuI3lhYHorrjnmoTvvIzlv4XpobvopoHku6Xpq5jotKjph4/pq5jkv53nnJ/nmoTljp/liJnmnaXorr7orqHmr4/kuIDkuKrpobXpnaLvvIzkuZ/kuI3og73kuK3pgJTlgZzmraLjgIJcblxuIyMg5YaZ5YWl5paH5Lu26KeE5YiZXG4tIOaJgOaciWh0bWzmlofku7blhpnlhaXlt6XnqIvmoLnnm67lvZXkuIvpnaLnmoQuYnl0ZWZ1bi9odG1s5paH5Lu25aS56YeM6Z2i55qE77yM5q+P5LiqaHRtbOaWh+S7tumHjOWPquWwhmh0bWwrY3Nz55qE5Luj56CB5YaZ5YWl77yM5YW25LuW5Lu75L2V5rOo6YeK44CB6Kej6YeK44CB5r6E5riF44CB5oC757uT562J5paH5a2X5LiN5b6X5YaZ5YWl6K+l5paH5Lu244CCXG5gO1xuXG4gIC8qKlxuICAgKiDkvJjljJbliJflh7rmiYDpnIDpobXpnaLliJfooajmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG6aG16Z2i5YiX6KGo5YiG5p6Q6ZyA5rGC77yM6L6T5Ye657uT5p6c5L6bVUnorr7orqHkvb/nlKhcbiAgICovXG4gIGFzeW5jIG9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt0aGlzLnBhZ2VMaXN0UHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluS7o+eggeW8gOWPkeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbku6PnoIHlvIDlj5Hnm7jlhbPpnIDmsYLvvIzkuI3kvJroh6rliqjlpITnkIZVSeiuvuiuoeaIluWOn+Wei+iuvuiuoeWGheWuuVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb2RlUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMllVJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhlVJ6K6+6K6h55u45YWz6ZyA5rGC77yM5LiN5Lya6Ieq5Yqo5aSE55CG5Luj56CB5byA5Y+R5oiW5Y6f5Z6L6K6+6K6h5YaF5a65XG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHByb21wdCA9IHRoaXMudWlEZXNpZ25Qcm9tcHRUZW1wbGF0ZTtcbiAgICBcbiAgICBpZiAocGFnZUxpc3QpIHtcbiAgICAgIHByb21wdCArPSBgXG5cbiMg6aG16Z2i5YiX6KGo5Y+C6ICDXG4ke3BhZ2VMaXN0fVxuXG4jIyDph43opoHor7TmmI5cbi0g6K+35Y+C6ICD5LiK6L+w6aG16Z2i5YiX6KGo5p2l56Gu5a6a6ZyA6KaB6K6+6K6h5ZOq5Lqb6aG16Z2iXG4tIOWmguaenOW9k+WJjeW3peeoi+S4reW3sue7j+WtmOWcqOafkOS6m+mhtemdou+8jOivt+aOkumZpOi/meS6m+mhtemdou+8jOWPquiuvuiuoeWwmuacquWtmOWcqOeahOmhtemdolxuLSDkuKXmoLzmjInnhafpobXpnaLliJfooajkuK3nmoTpobXpnaLlkI3np7Dlkozlip/og73mj4/ov7Dov5vooYzorr7orqFgO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtwcm9tcHR9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOWkjeWQiOW3peWFt++8mlVJ6K6+6K6hICsg5Luj56CB57yW5YaZXG4gICAqIOWFiOi/m+ihjFVJ6K6+6K6h77yM54S25ZCO6L+b6KGM5Luj56CB5byA5Y+RXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduQW5kQ29kZVByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3VpRGVzaWduUHJvbXB0OiBzdHJpbmcsIGNvZGVQcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGNvZGVQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplQ29kZVByb21wdCh1c2VySW5wdXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICB1aURlc2lnblByb21wdCxcbiAgICAgIGNvZGVQcm9tcHRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOWkjeWQiOW3peWFt++8muWIl+WHuuaJgOmcgOmhtemdouWIl+ihqCArIFVJ6K6+6K6hXG4gICAqIOWFiOWIhuaekOmhtemdouWIl+ihqO+8jOeEtuWQjuWfuuS6jumhtemdouWIl+ihqOi/m+ihjFVJ6K6+6K6hXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVBhZ2VMaXN0QW5kVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCB1aURlc2lnblByb21wdDogc3RyaW5nfT4ge1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgLy8gVUnorr7orqHmj5DnpLror43pnIDopoHnrYnpobXpnaLliJfooajnu5PmnpzlkI7lho3nlJ/miJDvvIzov5nph4zlhYjnlJ/miJDln7rnoYDniYjmnKxcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIHVpRGVzaWduUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlpI3lkIjlt6XlhbfvvJrliJflh7rmiYDpnIDpobXpnaLliJfooaggKyBVSeiuvuiuoSArIOS7o+eggee8luWGmVxuICAgKiDlrozmlbTnmoTlt6XkvZzmtYHnqIvvvJrpobXpnaLliJfooajliIbmnpAg4oaSIFVJ6K6+6K6hIOKGkiDku6PnoIHlvIDlj5FcbiAgICovXG4gIGFzeW5jIG9wdGltaXplRnVsbFdvcmtmbG93UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTx7cGFnZUxpc3RQcm9tcHQ6IHN0cmluZywgdWlEZXNpZ25Qcm9tcHQ6IHN0cmluZywgY29kZVByb21wdDogc3RyaW5nfT4ge1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgLy8gVUnorr7orqHmj5DnpLror43pnIDopoHnrYnpobXpnaLliJfooajnu5PmnpzlkI7lho3nlJ/miJDvvIzov5nph4zlhYjnlJ/miJDln7rnoYDniYjmnKxcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGNvZGVQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplQ29kZVByb21wdCh1c2VySW5wdXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIHVpRGVzaWduUHJvbXB0LFxuICAgICAgY29kZVByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5Z+65LqO6aG16Z2i5YiX6KGo57uT5p6c55Sf5oiQVUnorr7orqHmj5DnpLror41cbiAgICog5q2k5pa55rOV55So5LqO5Zyo6I635b6X6aG16Z2i5YiX6KGo57uT5p6c5ZCO77yM55Sf5oiQ5YyF5ZCr6aG16Z2i5YiX6KGo5L+h5oGv55qEVUnorr7orqHmj5DnpLror41cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlVUlEZXNpZ25Qcm9tcHRXaXRoUGFnZUxpc3QodXNlcklucHV0OiBzdHJpbmcsIHBhZ2VMaXN0UmVzdWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0LCBwYWdlTGlzdFJlc3VsdCk7XG4gIH1cbn0gIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bytefun-ai-mcp",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "ByteFun AI MCP服务 - 智能UI设计与代码开发服务平台,支持设计稿转代码和跨平台原生代码开发",
5
5
  "main": "build/index.js",
6
6
  "type": "module",