bytefun-ai-mcp 1.14.39 → 1.14.41
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.
- package/build/appCode.d.ts +1 -1
- package/build/appCode.d.ts.map +1 -1
- package/build/appCode.js +2 -19
- package/build/appCodeRule.d.ts +1 -1
- package/build/appCodeRule.d.ts.map +1 -1
- package/build/appCodeRule.js +11 -4
- package/build/uiDesignGuide.d.ts +1 -1
- package/build/uiDesignGuide.d.ts.map +1 -1
- package/build/uiDesignGuide.js +26 -22
- package/package.json +1 -1
package/build/appCode.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\uFF0C\u4E25\u683C\u9075\u5B88`\u4EE3\u7801\u89C4\u8303`\uFF0C\u53C2\u8003`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u4E25\u683C\u6309\u7167`\u7F16\u5199\u4EE3\u7801\u768411 \u4E2A\u6B65\u9AA4`\u5B8C\u6210\u4EE3\u7801\u5F00\u53D1\n\n## \u4EE3\u7801\u89C4\u8303\n- **\u4EE3\u7801\u6CE8\u91CA\u4F7F\u7528\u4E2D\u6587**\uFF1A\u4EE3\u7801\u7684\u6CE8\u91CA\u6587\u5B57\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u4E0D\u80FD\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n- \u5982\u679C\u662F\u79FB\u52A8\u7AEF\u5F00\u53D1\u5F0F\u4E0D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\u7684\uFF0C\u7535\u8111\u7AEF\u624D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\n- \u5B57\u7B26\u4E32\u8981\u4EE5\u5355\u5F15\u53F7\u6765\u5199\uFF0C\u5982\uFF1A'\u6211\u7684'\u3002\n\n## \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n## **\u6267\u884C\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5B9E\u73B0\uFF1A\u6BCF\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5B9E\u73B0\u90FD\u5FC5\u987B\u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEF\u4E1A\u52A1\u9519\u8BEF\u7801\u3001API\u63A5\u53E3\u3001API\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u8BA4\u771F\u4ED4\u7EC6\u9605\u8BFB\u7406\u89E3\u7981\u6B62\u5199\u7684\u4EE3\u7801\u8BED\u6CD5\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768410\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027\n11. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521911`\u6267\u884C\u4EFB\u52A1\uFF0C\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\n\n### **\u6B65\u9AA4\u89C4\u52191\uFF1A\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n\n### **\u6B65\u9AA4\u89C4\u52192\uFF1A\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1**\n\n### **\u6B65\u9AA4\u89C4\u52193\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528**\n- \u7981\u6B62\u4FEE\u6539`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u6587\u4EF6\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u6B64\u6587\u4EF6\u53EA\u8BFB\n\n### **\u6B65\u9AA4\u89C4\u52194\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEF\u4E1A\u52A1\u9519\u8BEF\u7801\u3001API\u63A5\u53E3\u3001API\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E**\n\n### **\u6B65\u9AA4\u89C4\u52195\uFF1A\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n\n### **\u6B65\u9AA4\u89C4\u52196\uFF1A\u5FC5\u987B\u8BA4\u771F\u4ED4\u7EC6\u9605\u8BFB\u7406\u89E3\u4EE5\u4E0B\u7981\u6B62\u5199\u7684\u4EE3\u7801\u8BED\u6CD5**\n- \u3010\u7C7B\u578B\u4E0E\u6CDB\u578B\u3011\n - \u5728\u7EE7\u627F\u81EA`Page`\u7684\u7C7B\u4E2D\uFF0C\u7981\u6B62\u975E\u9759\u6001\u6210\u5458\u4F7F\u7528DOM\u7C7B\u578B\u6216\u5176\u4ED6\u81EA\u5B9A\u4E49\u7981\u6B62\u7C7B\u578B\u3002\n - \u7981\u6B62\u4F7F\u7528UILIB\u7C7B\u578B\u7684\u6570\u7EC4\u4F5C\u4E3A\u6210\u5458\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u6216\u8FD4\u56DE\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u4E0E\u5C40\u90E8\u53D8\u91CF\u663E\u5F0F\u58F0\u660E\u4E3A`any`\uFF0C\u4EE5\u53CA\u4F7F\u7528`as any`\u3002\n - `Ref<T>`\u7684`T`\u4EC5\u5141\u8BB8\uFF1A`number`\u3001`string`\u3001`boolean`\u3001`any`\u3001`Array<any>`\u53CA\u5176`| null`\u53D8\u4F53\u3002\n - \u7981\u6B62\u4F7F\u7528`Symbol`\u53CA\u5176\u76F8\u5173API\u3002\n - \u7981\u6B62\u4FEE\u6539`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u6587\u4EF6\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u6B64\u6587\u4EF6\u53EA\u8BFB\n - \u7981\u6B62\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u7684\u8054\u5408\u7C7B\u578B\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u58F0\u660E`interface`\uFF0C\u4E14\u8BE5\u6587\u4EF6\u4EC5\u5141\u8BB8\u4E00\u4E2A`class`\u58F0\u660E\u3002\n - \u975E`src/lib`\u76EE\u5F55\u7684`ts`\u6587\u4EF6\u4E2D\uFF0C`interface`\u53EA\u5141\u8BB8\u5B9A\u4E49\u5C5E\u6027\uFF1B\u7981\u6B62\u5176\u4ED6\u58F0\u660E\u3002\n - \u7981\u6B62\u4F7F\u7528`Partial<T>`\u3002\n - \u7981\u6B62\u884C\u5185\u51FD\u6570\u7C7B\u578B\u3001\u51FD\u6570\u7C7B\u578B\u522B\u540D\u4E0E\u5185\u8054\u5BF9\u8C61\u7C7B\u578B\u5B57\u9762\u91CF\uFF08\u5C5E\u6027\u9664\u5916\uFF09\u3002\n - \u7981\u6B62\u5B9A\u4E49\u7C7B\u578B\u5C5E\u4E8EUILIB\u7684\u975E\u7C7B\u6210\u5458\u53D8\u91CF\u3002\n - \u7981\u6B62\u5C06UILIB\u7C7B\u578B\u7684\u503C\u8D4B\u7ED9\u975EUILIB\u7C7B\u578B\u7684\u76EE\u6807\u3002\n - \u7981\u6B62interface\u4E2D\u7684\u5C5E\u6027\u4F7F\u7528DOM\u7C7B\u578B\u3001UILIB\u7C7B\u578B\u3001any\u7C7B\u578B\u3001any[]\u7C7B\u578B\u3001Array<any>\u7C7B\u578B\u3001\u8054\u5408\u7C7B\u578B\u7B49\u7981\u6B62\u7C7B\u578B\u3002\n- \u3010\u5BFC\u5165\u3011\n - \u5F53\u7C7B\u8DEF\u5F84\u5728`src/lib`\u76EE\u5F55\u4E0B\u65F6\uFF0C\u7981\u6B62\u5BF9\u8FD9\u4E2A\u7C7B\u4F7F\u7528\u5BFC\u5165\u91CD\u547D\u540D\u6216\u522B\u540D\u3002\n- \u3010\u5BFC\u51FA\u3011\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u6587\u4EF6\u4E2D\uFF0C\u4E14\u7C7B\u540D\u4E0D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u3001\u4E14\u4E0D\u4E3A`Application`\u65F6\uFF0C\u4EC5\u5141\u8BB8`export default class`\u3001`export class`\u3001`export interface`\uFF1B\u7981\u6B62\u5176\u4ED6\u5BFC\u51FA\u5F62\u5F0F\u3002\n- \u3010\u65B9\u6CD5\u4E0E\u51FD\u6570\u3011\n - \u7981\u6B62\u4F7F\u7528`setInterval`\u3001`clearInterval`\u3001`setTimeout`\uFF1B\u4F7F\u7528`AllFunction`\u5BF9\u5E94\u65B9\u6CD5\u3002\n - \u7981\u6B62\u4F7F\u7528`localStorage/sessionStorage`\u7684`setItem/getItem`\uFF1B\u4F7F\u7528`AllFunction`\u6570\u636E\u5E93\u65B9\u6CD5\u3002\n - \u7981\u6B62`Date.now()`\u4E0E`new Date()`\uFF1B\u4F7F\u7528`AllFunction`\u65F6\u95F4\u65B9\u6CD5\u3002\n - \u7981\u6B62\u5728\u51FD\u6570\u5185\u5B9A\u4E49\u5185\u90E8\u51FD\u6570\uFF1B\u8BF7\u5B9A\u4E49\u4E3A\u7C7B\u79C1\u6709\u65B9\u6CD5\u3002\n - \u7981\u6B62`JSON.stringify/JSON.parse`\uFF1B\u6309\u4E0A\u4E0B\u6587\u4F7F\u7528`JsonArray.stringify/parse`\u6216`JsonObject.stringify/parse`\u3002\n - `JsonObject.stringify/parse`\u4E0E`JsonArray.stringify/parse`\u7684\u53C2\u6570\u7981\u6B62\u4F20\u5165`class`\u5BF9\u8C61\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u9759\u6001\u8C03\u7528\u7EE7\u627F`BaseApi`\u7684\u7C7B\u65B9\u6CD5\u65F6\uFF1A\u65B9\u6CD5\u540D\u5FC5\u987B\u5339\u914D`request_<10\u4F4D\u5B57\u6BCD\u6570\u5B57>`\uFF0C\u53C2\u6570\u5FC5\u987B\u4E3A3\u4E2A\uFF0C\u4E14\u7B2C2\u30013\u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5F97\u4E3A`any`\u6216\u6CDB\u578B\u3002\n - \u5728\u7EE7\u627F`BaseApi`\u7684\u7C7B\u4E2D\uFF0C`request_`\u5F00\u5934\u7684\u9759\u6001\u65B9\u6CD5\u540C\u6837\u5FC5\u987B\u6EE1\u8DB3\u547D\u540D\u4E0E3\u53C2\u89C4\u5219\u3002\n - \u7981\u6B62\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u91CD\u540D\u3002\n - `findViewById`\u4EC5\u5141\u8BB8\u7528\u4E8E\u7C7B\u6210\u5458\u53D8\u91CF\u521D\u59CB\u5316\uFF0C\u5982`this.findViewById('xxx') as <\u5177\u4F53\u7C7B\u578B>`\uFF1B\u5176\u4ED6\u4F4D\u7F6E\u7981\u6B62\u8C03\u7528\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`Array.isArray()`\uFF1B\u4F7F\u7528`AllFunction.isArray()`\u3002\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u7C7B\u4E2D\u7981\u6B62\u58F0\u660E\u65B9\u6CD5\uFF08`constructor`\u9664\u5916\uFF09\uFF1B\u82E5\u7C7B\u540D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u5219\u4E0D\u53D7\u6B64\u9650\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u8C03\u7528`findViewById`\u65F6\uFF0C\u53C2\u6570\u5FC5\u987B\u5B58\u5728\u4E8E\u540C\u76EE\u5F55\u540C\u540D\u58F0\u660E\u5F0FUI\u7684`.id('...')`\u5217\u8868\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u8C03\u7528`watch`\uFF08\u4F4D\u4E8E`Ref.ts`\uFF09\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5FC5\u987B\u662F\u5B57\u9762\u91CF\u6570\u7EC4`[ref1, ref2]`\uFF0C\u7981\u6B62\u53D8\u91CF\u4F20\u9012\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u5B9A\u4E49UILIB\u7C7B\u578B\u6210\u5458\u53D8\u91CF\u65F6\uFF0C\u5FC5\u987B\u4F7F\u7528`this.findViewById('xxx') as Xxx`\u521D\u59CB\u5316\u3002\n- \u3010\u6570\u7EC4\u65B9\u6CD5\u3011\n - \u7981\u6B62\u4F7F\u7528`map`\u3001`filter`\u3001`find`\u3001`findIndex`\u3001`reduce`\u3001`reduceRight`\u3001`every`\u3001`some`\u3001`sort`\u3001`flatMap`\uFF1B\u7EDF\u4E00\u4F7F\u7528`for-i`\u5B9E\u73B0\u3002\n- \u3010\u8BED\u6CD5\u9650\u5236\u3011\n - \u7981\u6B62\u4F7F\u7528`||`\u8FD0\u7B97\u7B26\u8BA1\u7B97\u7136\u540E\u8FDB\u884C\u8D4B\u503C\u3001\u4F20\u53C2\u6216\u521D\u59CB\u5316\uFF0C\u5FC5\u987B\u6539\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u7684\u5199\u6CD5\u6765\u4EE3\u66FF\uFF0C\u6BD4\u5982\uFF1A`const a = b || 'default'` \u6539\u4E3A `const a = b ? b : 'default'`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C55\u5F00\u8BED\u6CD5`...`\u514B\u9686\u5BF9\u8C61\uFF1B\u6539\u7528\u624B\u52A8\u8D4B\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u53D8\u91CF\u4E0E\u65B9\u6CD5\u5165\u53C2\u540C\u540D\uFF0C\u6216\u4E0E\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u540C\u540D\u3002\n - \u7981\u6B62\u4F7F\u7528`try/catch/finally`\u3002\n - \u7981\u6B62\u4F7F\u7528\u6B63\u5219\u8868\u8FBE\u5F0F\uFF0C\u6539\u4E3A\u4F7F\u7528\u5B57\u7B26\u4E32\u64CD\u4F5C\u65B9\u6CD5\u4EE3\u66FF\u5B9E\u73B0\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`typeof`\uFF1B\u6539\u7528`AllFunction.isString/isNumber/isBoolean/isObject`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C5E\u6027\u7B80\u5199\uFF08`{ a }`\uFF09\uFF1B\u4F7F\u7528\u5B8C\u6574\u5199\u6CD5\uFF08`{ a: a }`\uFF09\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\uFF0C\u7981\u6B62\u5BF9UILIB\u7C7B\u578B\u53D8\u91CF\u8FDB\u884C\u771F\u503C\u5224\u65AD\u3002\n - \u7981\u6B62\u4F7F\u7528\u903B\u8F91\u6216\uFF08`||`\uFF09\u77ED\u8DEF\u6C42\u503C\u7684\u94FE\u5F0F\u64CD\u4F5C\uFF0C\u6539\u4E3A\u4F7F\u7528 `if/else` \u5904\u7406\u3002\n - \u7981\u6B62\u4F7F\u7528\u7A7A\u503C\u5408\u5E76\u8FD0\u7B97\u7B26\uFF08`??`\uFF09\uFF0C\u6539\u4E3A\u4F7F\u7528`if/else`\u5904\u7406\u3002\u4F8B\u5982\uFF1A`\n`\u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A`\n```` typescript \nprivate cus71() { \n const displayName = this.cus71Str1 ?? this.cus71Str2 ?? ''; \n} \n``` `\n`\u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A `\n```` typescript \nprivate cus71() { \n let displayName: string; \n if (this.cus71Str1) { \n displayName = this.cus71Str1; \n } else if (this.cus71Str2) { \n displayName = this.cus71Str2; \n } else { \n displayName = ''; \n } \n} \n```\n- \u3010\u8865\u5145\u7684\u9879\u76EE\u89C4\u5219\u3011\n - \u7981\u6B62\u4F7F\u7528`for...in`\uFF1B\u4F7F\u7528`Object.keys`+`for-i`\u3002\n - \u7981\u6B62`async/Promise`\uFF08\u542B`Promise.race/Promise.all`\uFF09\uFF1B\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\n - \u7981\u6B62\u4F7F\u7528\u6D4F\u89C8\u5668\u73AF\u5883\u7684`lib.dom.d.ts`\u65B9\u6CD5\u4E8ENode\u73AF\u5883\u3002\n - \u7981\u6B62\u4FEE\u6539\u3001\u589E\u5220`src/lib`\u53CA\u5176\u5B50\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u3002\n - \u7981\u6B62\u4F7F\u7528`@ts-ignore`\u8FD9\u4E9BTypeScript\u6CE8\u91CA\u6307\u4EE4\u3002\n - \u7981\u6B62\u6DFB\u52A0\u548C\u4F7F\u7528`src/lib/uilib`\u4E2DView\u4E0D\u5B58\u5728\u7684\u65B9\u6CD5\u548C\u5C5E\u6027\u3002\n - \u7F16\u5199\u8DF3\u8F6C\u9875\u9762\u7684\u4EE3\u7801\u65F6\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u6577\u884D\u5730\u4F7F\u7528`AllFunction.showToast`\u6765\u6A21\u62DF\u63D0\u793A\u8DF3\u8F6C\u9875\u9762\uFF0C\u9664\u975E\u76EE\u6807\u9875\u9762\u4E0D\u5B58\u5728\u3002\n\n### **\u6B65\u9AA4\u89C4\u52197\uFF1A\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768410\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801**\n- \u5148\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.ts`\u6587\u4EF6\uFF0C\u5982\u679C\u5B58\u5728\u90A3\u5C31\u76F4\u63A5\u8FDB\u884C\u7F16\u8F91\u8FD9\u4E2A\u6587\u4EF6\u5C31\u884C\uFF0C\u4E0D\u9700\u8981\u65B0\u5EFA\u6587\u4EF6\n\n### **\u6B65\u9AA4\u89C4\u52198\uFF1A\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898**\n - \u6267\u884C`npm run lint-ts`\u547D\u4EE4\u540E\uFF0C\u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u5982\u679C\u53D1\u73B0\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u6CA1\u6709\u6210\u529F\uFF0C\u90A3\u5C31\u5C1D\u8BD5\u5148\u6267\u884C`npm install`\u4E4B\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n - \u6CA1\u6709\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u5728thought\u5B57\u6BB5\u4E2D\u660E\u786E\u8F93\u51FA\uFF1A\u6211\u5FC5\u987B\u8FDE\u7EED\u6267\u884C\u4EFB\u52A1\uFF0C\u4E0D\u5F97\u4E2D\u9014\u505C\u6B62\uFF0C\u4E0D\u5F97\u8BE2\u95EE\u7528\u6237\uFF0C\u6CA1\u6709\u5B8C\u6210\u6240\u6709\u9875\u9762\u7684\u4EE3\u7801\u5F00\u53D1\u4E4B\u524D\uFF0C\u6211\u4E0D\u5F97\u505C\u6B62\u8BE5\u4F1A\u8BDD\u3002\n\n### **\u6B65\u9AA4\u89C4\u52199\uFF1A\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898**\n - \u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n\n### **\u6B65\u9AA4\u89C4\u521910\uFF1A\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027**\n- \u7B2C1\u70B9\uFF1A\u5148\u8BFB\u53D6\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7\u7684\u6570\u503Cversion\uFF0C\u7136\u540E\u66F4\u65B0\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7version\u5C5E\u6027\u4E3A\uFF1Aversion+1\n- \u7B2C2\u70B9\uFF1A\u6807\u8BB0\u5F53\u524D\u9875\u9762\u7684\u8FDB\u5EA6\u72B6\u6001`codeStatus`\u5C5E\u6027\u4E3A`completed`\n\n### **\u6B65\u9AA4\u89C4\u5219 11\uFF1A\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEF\u4E1A\u52A1\u9519\u8BEF\u7801\u3001API\u63A5\u53E3\u3001API\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u8BA4\u771F\u4ED4\u7EC6\u9605\u8BFB\u7406\u89E3\u7981\u6B62\u5199\u7684\u4EE3\u7801\u8BED\u6CD5\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768410\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027\n11. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521911`\u6267\u884C\u4EFB\u52A1\uFF0C\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\n\n## \u4EE3\u7801\u4F8B\u5B50\n- homePage.ts\u6587\u4EF6\u4EE3\u7801\n```typescript\nimport Page from \"../../lib/uilib/Page\"\nimport ViewPager from \"../../lib/uilib/ViewPager\"\nimport ButtonView from \"../../lib/uilib/ButtonView\"\nimport TextView from \"../../lib/uilib/TextView\"\nimport { Ref, ref, watch } from \"../../lib/Ref\"\nexport default class HomePage extends Page {\n // \u6570\u636E\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private homePageData: HomePageData = new HomePageData()\n // \u89C6\u56FE\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private adViewPager: ViewPager = this.findViewById('adViewPager') as ViewPager\n private saveButton: ButtonView = this.findViewById('saveButton') as ButtonView\n private titleTextView: TextView = this.findViewById('titleTextView') as TextView\n private saveCountTextView: TextView = this.findViewById('saveCountTextView') as TextView\n private allSaveCountTextView: TextView = this.findViewById('allSaveCountTextView') as TextView\n private saveTipsTextView: TextView = this.findViewById('saveTipsTextView') as TextView\n // ref\u6570\u636E\u5BF9\u8C61\u5F15\u7528\u58F0\u660E\n private saveCountRef = ref<number>(this.homePageData.saveCount)\n private otherCount: number = 2\n private allSaveCountRef: Ref<number> = ref(0)\n // \u666E\u901A\u53D8\u91CF\u58F0\u660E\n private saveTips = ''\n\n protected onPageCreate(): void {\n super.onPageCreate()\n this.initData()\n this.initView()\n }\n\n private initData(): void {\n watch([this.saveCountRef, this.allSaveCountRef], () => {\n let otherCount = 2\n if (otherCount > 5) {\n this.allSaveCountRef.value = this.homePageData.saveCount + 5\n } else {\n this.allSaveCountRef.value = this.homePageData.saveCount + 10\n }\n this.saveTipsTextView.text = this.saveCountRef.value > 5 ? '\u4FDD\u5B58\u6210\u529F' : '\u4FDD\u5B58\u5931\u8D25'\n this.allSaveCountTextView.text = this.allSaveCountRef.value + '\u4E2A'\n })\n }\n\n private initView(): void {\n this.saveButton.setOnClickListener(() => {\n this.saveCountRef.value++\n this.homePageData.title = 'Home Page'\n this.saveTipsTextView.text = this.saveTips\n AllFunction.saveDatabaseNumber('saveCount', this.saveCountRef.value)\n AllFunction.startPage(new BookInfoPage())\n })\n }\n\n}\n```\n\n- homePageData.ts\u6587\u4EF6\u4EE3\u7801\n``` typescript\nexport default class HomePageData {\n public title: string = ''\n public saveCount: number = 0\n public userInfo: BookInfo = new BookInfo()\n}\n```\n";
|
|
1
|
+
export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\uFF0C\u4E25\u683C\u9075\u5B88`\u4EE3\u7801\u89C4\u8303`\uFF0C\u53C2\u8003`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u4E25\u683C\u6309\u7167`\u7F16\u5199\u4EE3\u7801\u768411 \u4E2A\u6B65\u9AA4`\u5B8C\u6210\u4EE3\u7801\u5F00\u53D1\n\n## \u4EE3\u7801\u89C4\u8303\n- **\u4EE3\u7801\u6CE8\u91CA\u4F7F\u7528\u4E2D\u6587**\uFF1A\u4EE3\u7801\u7684\u6CE8\u91CA\u6587\u5B57\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u4E0D\u80FD\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n- \u5982\u679C\u662F\u79FB\u52A8\u7AEF\u5F00\u53D1\u5F0F\u4E0D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\u7684\uFF0C\u7535\u8111\u7AEF\u624D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\n- \u5B57\u7B26\u4E32\u8981\u4EE5\u5355\u5F15\u53F7\u6765\u5199\uFF0C\u5982\uFF1A'\u6211\u7684'\u3002\n\n## \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n## **\u6267\u884C\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5B9E\u73B0\uFF1A\u6BCF\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5B9E\u73B0\u90FD\u5FC5\u987B\u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEF\u4E1A\u52A1\u9519\u8BEF\u7801\u3001API\u63A5\u53E3\u3001API\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u8BA4\u771F\u4ED4\u7EC6\u9605\u8BFB\u7406\u89E3\u7981\u6B62\u5199\u7684\u4EE3\u7801\u8BED\u6CD5\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768410\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027\n11. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521911`\u6267\u884C\u4EFB\u52A1\uFF0C\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\n\n### **\u6B65\u9AA4\u89C4\u52191\uFF1A\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n\n### **\u6B65\u9AA4\u89C4\u52192\uFF1A\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1**\n\n### **\u6B65\u9AA4\u89C4\u52193\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528**\n- \u7981\u6B62\u4FEE\u6539`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u6587\u4EF6\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u6B64\u6587\u4EF6\u53EA\u8BFB\n\n### **\u6B65\u9AA4\u89C4\u52194\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEF\u4E1A\u52A1\u9519\u8BEF\u7801\u3001API\u63A5\u53E3\u3001API\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E**\n\n### **\u6B65\u9AA4\u89C4\u52195\uFF1A\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n\n### **\u6B65\u9AA4\u89C4\u52196\uFF1A\u5FC5\u987B\u8BA4\u771F\u4ED4\u7EC6\u9605\u8BFB\u7406\u89E3\u4EE5\u4E0B\u7981\u6B62\u5199\u7684\u4EE3\u7801\u8BED\u6CD5**\n- \u3010\u7C7B\u578B\u4E0E\u6CDB\u578B\u3011\n - \u5728\u7EE7\u627F\u81EA`Page`\u7684\u7C7B\u4E2D\uFF0C\u7981\u6B62\u975E\u9759\u6001\u6210\u5458\u4F7F\u7528DOM\u7C7B\u578B\u6216\u5176\u4ED6\u81EA\u5B9A\u4E49\u7981\u6B62\u7C7B\u578B\u3002\n - \u7981\u6B62\u4F7F\u7528UILIB\u7C7B\u578B\u7684\u6570\u7EC4\u4F5C\u4E3A\u6210\u5458\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u6216\u8FD4\u56DE\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u4E0E\u5C40\u90E8\u53D8\u91CF\u663E\u5F0F\u58F0\u660E\u4E3A`any`\uFF0C\u4EE5\u53CA\u4F7F\u7528`as any`\u3002\n - `Ref<T>`\u7684`T`\u4EC5\u5141\u8BB8\uFF1A`number`\u3001`string`\u3001`boolean`\u3001`any`\u3001`Array<any>`\u53CA\u5176`| null`\u53D8\u4F53\u3002\n - \u7981\u6B62\u4F7F\u7528`Symbol`\u53CA\u5176\u76F8\u5173API\u3002\n - \u7981\u6B62\u4FEE\u6539`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u6587\u4EF6\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u6B64\u6587\u4EF6\u53EA\u8BFB\n - \u7981\u6B62\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u7684\u8054\u5408\u7C7B\u578B\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u58F0\u660E`interface`\uFF0C\u4E14\u8BE5\u6587\u4EF6\u4EC5\u5141\u8BB8\u4E00\u4E2A`class`\u58F0\u660E\u3002\n - \u975E`src/lib`\u76EE\u5F55\u7684`ts`\u6587\u4EF6\u4E2D\uFF0C`interface`\u53EA\u5141\u8BB8\u5B9A\u4E49\u5C5E\u6027\uFF1B\u7981\u6B62\u5176\u4ED6\u58F0\u660E\u3002\n - \u7981\u6B62\u4F7F\u7528`Partial<T>`\u3002\n - \u7981\u6B62\u884C\u5185\u51FD\u6570\u7C7B\u578B\u3001\u51FD\u6570\u7C7B\u578B\u522B\u540D\u4E0E\u5185\u8054\u5BF9\u8C61\u7C7B\u578B\u5B57\u9762\u91CF\uFF08\u5C5E\u6027\u9664\u5916\uFF09\u3002\n - \u7981\u6B62\u5B9A\u4E49\u7C7B\u578B\u5C5E\u4E8EUILIB\u7684\u975E\u7C7B\u6210\u5458\u53D8\u91CF\u3002\n - \u7981\u6B62\u5C06UILIB\u7C7B\u578B\u7684\u503C\u8D4B\u7ED9\u975EUILIB\u7C7B\u578B\u7684\u76EE\u6807\u3002\n - \u7981\u6B62interface\u4E2D\u7684\u5C5E\u6027\u4F7F\u7528DOM\u7C7B\u578B\u3001UILIB\u7C7B\u578B\u3001any\u7C7B\u578B\u3001any[]\u7C7B\u578B\u3001Array<any>\u7C7B\u578B\u3001\u8054\u5408\u7C7B\u578B\u7B49\u7981\u6B62\u7C7B\u578B\u3002\n- \u3010\u5BFC\u5165\u3011\n - \u5F53\u7C7B\u8DEF\u5F84\u5728`src/lib`\u76EE\u5F55\u4E0B\u65F6\uFF0C\u7981\u6B62\u5BF9\u8FD9\u4E2A\u7C7B\u4F7F\u7528\u5BFC\u5165\u91CD\u547D\u540D\u6216\u522B\u540D\u3002\n- \u3010\u5BFC\u51FA\u3011\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u6587\u4EF6\u4E2D\uFF0C\u4E14\u7C7B\u540D\u4E0D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u3001\u4E14\u4E0D\u4E3A`Application`\u65F6\uFF0C\u4EC5\u5141\u8BB8`export default class`\u3001`export class`\u3001`export interface`\uFF1B\u7981\u6B62\u5176\u4ED6\u5BFC\u51FA\u5F62\u5F0F\u3002\n- \u3010\u65B9\u6CD5\u4E0E\u51FD\u6570\u3011\n - \u7981\u6B62\u4F7F\u7528`setInterval`\u3001`clearInterval`\u3001`setTimeout`\uFF1B\u4F7F\u7528`AllFunction`\u5BF9\u5E94\u65B9\u6CD5\u3002\n - \u7981\u6B62\u4F7F\u7528`localStorage/sessionStorage`\u7684`setItem/getItem`\uFF1B\u4F7F\u7528`AllFunction`\u6570\u636E\u5E93\u65B9\u6CD5\u3002\n - \u7981\u6B62`Date.now()`\u4E0E`new Date()`\uFF1B\u4F7F\u7528`AllFunction`\u65F6\u95F4\u65B9\u6CD5\u3002\n - \u7981\u6B62\u5728\u51FD\u6570\u5185\u5B9A\u4E49\u5185\u90E8\u51FD\u6570\uFF1B\u8BF7\u5B9A\u4E49\u4E3A\u7C7B\u79C1\u6709\u65B9\u6CD5\u3002\n - \u7981\u6B62`JSON.stringify/JSON.parse`\uFF1B\u6309\u4E0A\u4E0B\u6587\u4F7F\u7528`JsonArray.stringify/parse`\u6216`JsonObject.stringify/parse`\u3002\n - `JsonObject.stringify/parse`\u4E0E`JsonArray.stringify/parse`\u7684\u53C2\u6570\u7981\u6B62\u4F20\u5165`class`\u5BF9\u8C61\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u9759\u6001\u8C03\u7528\u7EE7\u627F`BaseApi`\u7684\u7C7B\u65B9\u6CD5\u65F6\uFF1A\u65B9\u6CD5\u540D\u5FC5\u987B\u5339\u914D`request_<10\u4F4D\u5B57\u6BCD\u6570\u5B57>`\uFF0C\u53C2\u6570\u5FC5\u987B\u4E3A3\u4E2A\uFF0C\u4E14\u7B2C2\u30013\u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5F97\u4E3A`any`\u6216\u6CDB\u578B\u3002\n - \u5728\u7EE7\u627F`BaseApi`\u7684\u7C7B\u4E2D\uFF0C`request_`\u5F00\u5934\u7684\u9759\u6001\u65B9\u6CD5\u540C\u6837\u5FC5\u987B\u6EE1\u8DB3\u547D\u540D\u4E0E3\u53C2\u89C4\u5219\u3002\n - \u7981\u6B62\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u91CD\u540D\u3002\n - `findViewById`\u4EC5\u5141\u8BB8\u7528\u4E8E\u7C7B\u6210\u5458\u53D8\u91CF\u521D\u59CB\u5316\uFF0C\u5982`this.findViewById('xxx') as <\u5177\u4F53\u7C7B\u578B>`\uFF1B\u5176\u4ED6\u4F4D\u7F6E\u7981\u6B62\u8C03\u7528\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`Array.isArray()`\uFF1B\u4F7F\u7528`AllFunction.isArray()`\u3002\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u7C7B\u4E2D\u7981\u6B62\u58F0\u660E\u65B9\u6CD5\uFF08`constructor`\u9664\u5916\uFF09\uFF1B\u82E5\u7C7B\u540D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u5219\u4E0D\u53D7\u6B64\u9650\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u8C03\u7528`findViewById`\u65F6\uFF0C\u53C2\u6570\u5FC5\u987B\u5B58\u5728\u4E8E\u540C\u76EE\u5F55\u540C\u540D\u58F0\u660E\u5F0FUI\u7684`.id('...')`\u5217\u8868\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u8C03\u7528`watch`\uFF08\u4F4D\u4E8E`Ref.ts`\uFF09\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5FC5\u987B\u662F\u5B57\u9762\u91CF\u6570\u7EC4`[ref1, ref2]`\uFF0C\u7981\u6B62\u53D8\u91CF\u4F20\u9012\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u5B9A\u4E49UILIB\u7C7B\u578B\u6210\u5458\u53D8\u91CF\u65F6\uFF0C\u5FC5\u987B\u4F7F\u7528`this.findViewById('xxx') as Xxx`\u521D\u59CB\u5316\u3002\n- \u3010\u6570\u7EC4\u65B9\u6CD5\u3011\n - \u7981\u6B62\u4F7F\u7528`map`\u3001`filter`\u3001`find`\u3001`findIndex`\u3001`reduce`\u3001`reduceRight`\u3001`every`\u3001`some`\u3001`sort`\u3001`flatMap`\uFF1B\u7EDF\u4E00\u4F7F\u7528`for-i`\u5B9E\u73B0\u3002\n- \u3010\u8BED\u6CD5\u9650\u5236\u3011\n - \u7981\u6B62\u4F7F\u7528`||`\u8FD0\u7B97\u7B26\u8BA1\u7B97\u7136\u540E\u8FDB\u884C\u8D4B\u503C\u3001\u4F20\u53C2\u6216\u521D\u59CB\u5316\uFF0C\u5FC5\u987B\u6539\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u7684\u5199\u6CD5\u6765\u4EE3\u66FF\uFF0C\u6BD4\u5982\uFF1A`const a = b || 'default'` \u6539\u4E3A `const a = b ? b : 'default'`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C55\u5F00\u8BED\u6CD5`...`\u514B\u9686\u5BF9\u8C61\uFF1B\u6539\u7528\u624B\u52A8\u8D4B\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u53D8\u91CF\u4E0E\u65B9\u6CD5\u5165\u53C2\u540C\u540D\uFF0C\u6216\u4E0E\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u540C\u540D\u3002\n - \u7981\u6B62\u4F7F\u7528`try/catch/finally`\u3002\n - \u7981\u6B62\u4F7F\u7528\u6B63\u5219\u8868\u8FBE\u5F0F\uFF0C\u6539\u4E3A\u4F7F\u7528\u5B57\u7B26\u4E32\u64CD\u4F5C\u65B9\u6CD5\u4EE3\u66FF\u5B9E\u73B0\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`typeof`\uFF1B\u6539\u7528`AllFunction.isString/isNumber/isBoolean/isObject`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C5E\u6027\u7B80\u5199\uFF08`{ a }`\uFF09\uFF1B\u4F7F\u7528\u5B8C\u6574\u5199\u6CD5\uFF08`{ a: a }`\uFF09\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\uFF0C\u7981\u6B62\u5BF9UILIB\u7C7B\u578B\u53D8\u91CF\u8FDB\u884C\u771F\u503C\u5224\u65AD\u3002\n - \u7981\u6B62\u4F7F\u7528\u903B\u8F91\u6216\uFF08`||`\uFF09\u77ED\u8DEF\u6C42\u503C\u7684\u94FE\u5F0F\u64CD\u4F5C\uFF0C\u6539\u4E3A\u4F7F\u7528 `if/else` \u5904\u7406\u3002\n - \u7981\u6B62\u4F7F\u7528\u7A7A\u503C\u5408\u5E76\u8FD0\u7B97\u7B26\uFF08`??`\uFF09\uFF0C\u6539\u4E3A\u4F7F\u7528`if/else`\u5904\u7406\u3002\u4F8B\u5982\uFF1A`\n`\u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A`\n```` typescript \nprivate cus71() { \n const displayName = this.cus71Str1 ?? this.cus71Str2 ?? ''; \n} \n``` `\n`\u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A `\n```` typescript \nprivate cus71() { \n let displayName: string; \n if (this.cus71Str1) { \n displayName = this.cus71Str1; \n } else if (this.cus71Str2) { \n displayName = this.cus71Str2; \n } else { \n displayName = ''; \n } \n} \n```\n- \u3010\u8865\u5145\u7684\u9879\u76EE\u89C4\u5219\u3011\n - \u7981\u6B62\u4F7F\u7528`for...in`\uFF1B\u4F7F\u7528`Object.keys`+`for-i`\u3002\n - \u7981\u6B62`async/Promise`\uFF08\u542B`Promise.race/Promise.all`\uFF09\uFF1B\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\n - \u7981\u6B62\u4F7F\u7528\u6D4F\u89C8\u5668\u73AF\u5883\u7684`lib.dom.d.ts`\u65B9\u6CD5\u4E8ENode\u73AF\u5883\u3002\n - \u7981\u6B62\u4FEE\u6539\u3001\u589E\u5220`src/lib`\u53CA\u5176\u5B50\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u3002\n - \u7981\u6B62\u4F7F\u7528`@ts-ignore`\u8FD9\u4E9BTypeScript\u6CE8\u91CA\u6307\u4EE4\u3002\n - \u7981\u6B62\u6DFB\u52A0\u548C\u4F7F\u7528`src/lib/uilib`\u4E2DView\u4E0D\u5B58\u5728\u7684\u65B9\u6CD5\u548C\u5C5E\u6027\u3002\n - \u7F16\u5199\u8DF3\u8F6C\u9875\u9762\u7684\u4EE3\u7801\u65F6\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u6577\u884D\u5730\u4F7F\u7528`AllFunction.showToast`\u6765\u6A21\u62DF\u63D0\u793A\u8DF3\u8F6C\u9875\u9762\uFF0C\u9664\u975E\u76EE\u6807\u9875\u9762\u4E0D\u5B58\u5728\u3002\n\n### **\u6B65\u9AA4\u89C4\u52197\uFF1A\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768410\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801**\n- \u5148\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.ts`\u6587\u4EF6\uFF0C\u5982\u679C\u5B58\u5728\u90A3\u5C31\u76F4\u63A5\u8FDB\u884C\u7F16\u8F91\u8FD9\u4E2A\u6587\u4EF6\u5C31\u884C\uFF0C\u4E0D\u9700\u8981\u65B0\u5EFA\u6587\u4EF6\n\n### **\u6B65\u9AA4\u89C4\u52198\uFF1A\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898**\n - \u6267\u884C`npm run lint-ts`\u547D\u4EE4\u540E\uFF0C\u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u5982\u679C\u53D1\u73B0\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u6CA1\u6709\u6210\u529F\uFF0C\u90A3\u5C31\u5C1D\u8BD5\u5148\u6267\u884C`npm install`\u4E4B\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n - \u6CA1\u6709\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u5728thought\u5B57\u6BB5\u4E2D\u660E\u786E\u8F93\u51FA\uFF1A\u6211\u5FC5\u987B\u8FDE\u7EED\u6267\u884C\u4EFB\u52A1\uFF0C\u4E0D\u5F97\u4E2D\u9014\u505C\u6B62\uFF0C\u4E0D\u5F97\u8BE2\u95EE\u7528\u6237\uFF0C\u6CA1\u6709\u5B8C\u6210\u6240\u6709\u9875\u9762\u7684\u4EE3\u7801\u5F00\u53D1\u4E4B\u524D\uFF0C\u6211\u4E0D\u5F97\u505C\u6B62\u8BE5\u4F1A\u8BDD\u3002\n\n### **\u6B65\u9AA4\u89C4\u52199\uFF1A\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898**\n - \u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n\n### **\u6B65\u9AA4\u89C4\u521910\uFF1A\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027**\n- \u7B2C1\u70B9\uFF1A\u5148\u8BFB\u53D6\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7\u7684\u6570\u503Cversion\uFF0C\u7136\u540E\u66F4\u65B0\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7version\u5C5E\u6027\u4E3A\uFF1Aversion+1\n- \u7B2C2\u70B9\uFF1A\u6807\u8BB0\u5F53\u524D\u9875\u9762\u7684\u8FDB\u5EA6\u72B6\u6001`codeStatus`\u5C5E\u6027\u4E3A`completed`\n\n### **\u6B65\u9AA4\u89C4\u5219 11\uFF1A\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEF\u4E1A\u52A1\u9519\u8BEF\u7801\u3001API\u63A5\u53E3\u3001API\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u8BA4\u771F\u4ED4\u7EC6\u9605\u8BFB\u7406\u89E3\u7981\u6B62\u5199\u7684\u4EE3\u7801\u8BED\u6CD5\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768410\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027\n11. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521911`\u6267\u884C\u4EFB\u52A1\uFF0C\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\n\n## \u4EE3\u7801\u4F8B\u5B50\n- homePage.ts\u6587\u4EF6\u4EE3\u7801\n```typescript\nimport Page from \"../../lib/uilib/Page\"\nimport ViewPager from \"../../lib/uilib/ViewPager\"\nimport ButtonView from \"../../lib/uilib/ButtonView\"\nimport TextView from \"../../lib/uilib/TextView\"\nimport { Ref, ref, watch } from \"../../lib/Ref\"\nexport default class HomePage extends Page {\n // \u89C6\u56FE\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private adViewPager: ViewPager = this.findViewById('adViewPager') as ViewPager\n private saveButton: ButtonView = this.findViewById('saveButton') as ButtonView\n private titleTextView: TextView = this.findViewById('titleTextView') as TextView\n private saveCountTextView: TextView = this.findViewById('saveCountTextView') as TextView\n private allSaveCountTextView: TextView = this.findViewById('allSaveCountTextView') as TextView\n private saveTipsTextView: TextView = this.findViewById('saveTipsTextView') as TextView\n // ref\u6570\u636E\u5BF9\u8C61\u5F15\u7528\u58F0\u660E\n private saveCountRef = ref<number>(0)\n private otherCount: number = 2\n private allSaveCountRef: Ref<number> = ref(0)\n // \u666E\u901A\u53D8\u91CF\u58F0\u660E\n private saveTips = ''\n\n protected onPageCreate(): void {\n super.onPageCreate()\n this.initData()\n this.initView()\n }\n\n private initData(): void {\n watch([this.saveCountRef, this.allSaveCountRef], () => {\n let otherCount = 2\n this.saveTipsTextView.text = this.saveCountRef.value > 5 ? '\u4FDD\u5B58\u6210\u529F' : '\u4FDD\u5B58\u5931\u8D25'\n this.allSaveCountTextView.text = this.allSaveCountRef.value + '\u4E2A'\n })\n }\n\n private initView(): void {\n this.saveButton.setOnClickListener(() => {\n this.saveCountRef.value++\n this.saveTipsTextView.text = this.saveTips\n AllFunction.saveDatabaseNumber('saveCount', this.saveCountRef.value)\n AllFunction.startPage(new BookInfoPage())\n })\n }\n\n}\n```\n";
|
|
2
2
|
//# sourceMappingURL=appCode.d.ts.map
|
package/build/appCode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appCode.d.ts","sourceRoot":"","sources":["../src/appCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"appCode.d.ts","sourceRoot":"","sources":["../src/appCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,izgCAsM9B,CAAC"}
|
package/build/appCode.js
CHANGED
|
@@ -157,8 +157,6 @@ import ButtonView from "../../lib/uilib/ButtonView"
|
|
|
157
157
|
import TextView from "../../lib/uilib/TextView"
|
|
158
158
|
import { Ref, ref, watch } from "../../lib/Ref"
|
|
159
159
|
export default class HomePage extends Page {
|
|
160
|
-
// 数据对象实例声明
|
|
161
|
-
private homePageData: HomePageData = new HomePageData()
|
|
162
160
|
// 视图对象实例声明
|
|
163
161
|
private adViewPager: ViewPager = this.findViewById('adViewPager') as ViewPager
|
|
164
162
|
private saveButton: ButtonView = this.findViewById('saveButton') as ButtonView
|
|
@@ -167,7 +165,7 @@ export default class HomePage extends Page {
|
|
|
167
165
|
private allSaveCountTextView: TextView = this.findViewById('allSaveCountTextView') as TextView
|
|
168
166
|
private saveTipsTextView: TextView = this.findViewById('saveTipsTextView') as TextView
|
|
169
167
|
// ref数据对象引用声明
|
|
170
|
-
private saveCountRef = ref<number>(
|
|
168
|
+
private saveCountRef = ref<number>(0)
|
|
171
169
|
private otherCount: number = 2
|
|
172
170
|
private allSaveCountRef: Ref<number> = ref(0)
|
|
173
171
|
// 普通变量声明
|
|
@@ -182,11 +180,6 @@ export default class HomePage extends Page {
|
|
|
182
180
|
private initData(): void {
|
|
183
181
|
watch([this.saveCountRef, this.allSaveCountRef], () => {
|
|
184
182
|
let otherCount = 2
|
|
185
|
-
if (otherCount > 5) {
|
|
186
|
-
this.allSaveCountRef.value = this.homePageData.saveCount + 5
|
|
187
|
-
} else {
|
|
188
|
-
this.allSaveCountRef.value = this.homePageData.saveCount + 10
|
|
189
|
-
}
|
|
190
183
|
this.saveTipsTextView.text = this.saveCountRef.value > 5 ? '保存成功' : '保存失败'
|
|
191
184
|
this.allSaveCountTextView.text = this.allSaveCountRef.value + '个'
|
|
192
185
|
})
|
|
@@ -195,7 +188,6 @@ export default class HomePage extends Page {
|
|
|
195
188
|
private initView(): void {
|
|
196
189
|
this.saveButton.setOnClickListener(() => {
|
|
197
190
|
this.saveCountRef.value++
|
|
198
|
-
this.homePageData.title = 'Home Page'
|
|
199
191
|
this.saveTipsTextView.text = this.saveTips
|
|
200
192
|
AllFunction.saveDatabaseNumber('saveCount', this.saveCountRef.value)
|
|
201
193
|
AllFunction.startPage(new BookInfoPage())
|
|
@@ -204,14 +196,5 @@ export default class HomePage extends Page {
|
|
|
204
196
|
|
|
205
197
|
}
|
|
206
198
|
\`\`\`
|
|
207
|
-
|
|
208
|
-
- homePageData.ts文件代码
|
|
209
|
-
\`\`\` typescript
|
|
210
|
-
export default class HomePageData {
|
|
211
|
-
public title: string = ''
|
|
212
|
-
public saveCount: number = 0
|
|
213
|
-
public userInfo: BookInfo = new BookInfo()
|
|
214
|
-
}
|
|
215
|
-
\`\`\`
|
|
216
199
|
`;
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXVOakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjb2RlUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK90eXBlc2NyaXB05Luj56CB5LiT5a6277yM5qC55o2u55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM5Lil5qC86YG15a6IXFxg5Luj56CB6KeE6IyDXFxg77yM5Y+C6ICDXFxg5Luj56CB5L6L5a2QXFxg77yM5Lil5qC85oyJ54WnXFxg57yW5YaZ5Luj56CB55qEMTEg5Liq5q2l6aqkXFxg5a6M5oiQ5Luj56CB5byA5Y+RXG5cbiMjIOS7o+eggeinhOiMg1xuLSAqKuS7o+eggeazqOmHiuS9v+eUqOS4reaWhyoq77ya5Luj56CB55qE5rOo6YeK5paH5a2X77yM5b+F6aG76KaB5L2/55So5Lit5paH77yM5LiN6IO95L2/55So5YW25LuW6K+t6KiAXG4tICoq57uT5bC+56aB5q2i5YiG5Y+3KirvvJrkuIDlj6Xku6PnoIHnmoTnu5PlsL7npoHmraLlhpnliIblj7fvvIzkuI3pnIDopoHlhpnliIblj7fnmoRcbi0g5aaC5p6c5piv56e75Yqo56uv5byA5Y+R5byP5LiN6ZyA6KaB6ICD6JmR6byg5qCH55u45YWz5LqL5oOF55qE77yM55S16ISR56uv5omN6ZyA6KaB6ICD6JmR6byg5qCH55u45YWz5LqL5oOFXG4tIOWtl+espuS4suimgeS7peWNleW8leWPt+adpeWGme+8jOWmgu+8mifmiJHnmoQn44CCXG5cbiMjIOmhtemdoum7mOiupOS4muWKoemAu+i+kVxuLSAqKuWmgueUqOaIt+ayoeWcqOaPj+i/sOS4reaYjuehruaMh+aYjumhtemdoueahOS4muWKoemAu+i+ke+8jOWFtuS4remhueebruiuvuiuoeaWh+ahoycuYnl0ZWZ1bi975pWw5a2X5bqP5Y+3fS14eHjlip/og73mqKHlnZfkuJrliqHpgLvovpHorr7orqEubWQn5LiN566X55So5oi35piO56Gu5oyH5a6a55qE5Lia5Yqh6YC76L6R77yM6YKj5ZCE5Liq6aG16Z2i55qE5Lia5Yqh6YC76L6R6buY6K6k5b+F6aG76YG15a6I5Lul5LiL5Zu65a6a6YC76L6R5bm26L6T5Ye6eHh46aG16Z2i6buY6K6k6YG15a6I55qE5Zu65a6a6YC76L6R77yM5q+U5aaC77ya6Zeq5bGP6aG155qE6YC76L6R77yaeHh4562JKipcbiAgLSDkuI3lrZjlnKjmnYPpmZDor7fmsYLpobXpnaLvvIzmiYDmnInmnYPpmZDor7fmsYLlv4Xpobvkvb/nlKjlvLnmoYbnmoTkuqTkupLmlrnlvI/vvIzogIzkuJTmmK/pgbXlvqpcIuWNs+eUqOWNs+WPllwi77yISnVzdC1pbi1UaW1l77yJ55qE5Y6f5YiZXG4gIC0g57ud5a+55LiN5Lya5pyJ5Lu75L2V5YWz5LqO6ZqQ56eB5Y2P6K6uL+acjeWKoeadoeasvumhteeahOmAu+i+kVxuICAtIOmXquWxj+mhtVxuICAgIC0g5aaC5p6c5pyJ6Zeq5bGP6aG177yM6YKj5LmI5ZCv5Yqo5ZCO56ys5LiA5Liq6aG16Z2i5b+F6aG75piv6Zeq5bGP6aG177yM6Zeq5bGP6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw5byV5a+86aG15oiW6aaW6aG155qE6Lev5b6EXG4gICAgLSDpl6rlsY/pobXkuI3lgZrku7vkvZXkuJrliqHpgLvovpHvvIzkuI3or7fmsYLku7vkvZXnvZHnu5zmjqXlj6PvvIzlj6rpnIDliKTmlq3mmK/lkKbpppbmrKHlkK/liqjvvIzlpoLmnpzpppbmrKHlkK/liqjlsLF456eS5ZCO6Lez5Yiw5byV5a+86aG177yM5aaC5p6c5LiN5piv6aaW5qyh5ZCv5Yqo5bCx6Lez5Yiw6aaW6aG1XG4gICAgLSDinYwg6Zeq5bGP6aG157ud5a+556aB5q2i5YGa55qE5LqL5oOF77yaXG4gICAgICAtIOivt+axguS7u+S9lee9kee7nOaOpeWPo1xuICAgICAgLSDor7fmsYLniYjmnKzmm7TmlrBBUEnmjqXlj6NcbiAgICAgIC0g6Lez5Yiw6ZqQ56eB5Y2P6K6uL+acjeWKoeadoeasvumhtVxuICAgICAgLSDlvLnlh7rku7vkvZXlhbbku5blvLnmoYZcbiAgICAgIC0g5Lu75L2V5p2D6ZmQ6K+35rGCXG4gIC0g5byV5a+86aG1XG4gICAgPSDlvJXlr7zpobXlkYrpobXkuI3kvJrmnInot7PliLDnmbvlvZXpobXnmoTot6/lvoTvvIzlj6rmnInot7PliLDpppbpobXnmoTot6/lvoRcbiAgICAtIOS4jeS8muacieS7u+S9lee9kee7nOivt+axguOAgeS4muWKoemAu+i+ke+8jOW8leWvvOmhteS7heS7heaYr+S4gOS4quWxleekuumdmeaAgeaVsOaNrueahOmhtemdolxuICAgIC0g5LiN6ZyA6KaB6Ieq5Yqo6L2u5pKtXG4gICAgLSDkuIDoiKzmlbTkuKrpobXpnaLlj6rmnInkuIDkuKrova7mkq3nu4Tku7bjgIHova7mkq3mjIfnpLrlmajlkozlupXpg6jkuIDkuKrmjInpkq7vvIzlupXpg6jmjInpkq7lnKjpnZ7nrKzkuIDpobXml7bmmL7npLrkuIvkuIDmraXvvIzlnKjmnIDlkI7kuIDpobXml7bmmL7npLrnq4vljbPkvZPpqoxcbiAgLSDpppbpobVcbiAgICAtIOi/m+WFpemmlumhteS4gOiIrOmcgOimgeivt+axgmFwcOeJiOacrOabtOaWsEFQSeaOpeWPo++8jOWIpOaWreaYr+WQpumcgOimgeabtOaWsO+8jOWmguaenOmcgOimgeabtOaWsOWwseW8ueWHuuabtOaWsOW8ueahhu+8jOWmguaenOS4jemcgOimgemCo+WwseS4jeWBmuS7u+S9leS6i+aDhVxuICAgIC0g6L+b5YWl6aaW6aG16L+Y6KaB6K+75Y+W5pys5Zyw5pWw5o2u77ya5YWo5bGA6YWN572u5pWw5o2u44CC5LiA6Iis55So5LqO5Yqf6IO95byA5YWz44CBQUJUZXN06YWN572u562J77yM6K+75Y+W5a6M5q+V5ZCO77yM6L+Y6KaB572R57uc6K+35rGC5LiA5qyh5YWo5bGA6YWN572uQVBJ77yM5bCG5YWo5bGA6YWN572u5pWw5o2u5pu05paw5Yiw5pys5Zyw5pWw5o2u5LitXG4gICAgLSDkuIDoiKzmmK/mnInkuIDkuKrlupXpg6jlip/og73lr7zoiKrmoI/vvIzngrnlh7vlupXpg6jlip/og73lr7zoiKrmoI/nmoTlm77moIfkvJrliIfmjaLliLDlr7nlupTnmoR0YWLpobXpnaLvvIx0YWLpobXpnaLkuIDoiKzmnInlpJrkuKrvvIzmr4/kuKp0YWLpobXpnaLmnInkuI3lkIznmoTkuJrliqHpgLvovpFcbiAgICAtIOWmguaenOeUqOaIt+i+k+WFpeeahOmcgOaxguaPj+i/sOayoeacieaYjuehruaMh+WumummlumhteW6lemDqOWKn+iDveWvvOiIquagj+acieWTquS6m+WKn+iDve+8jOmCo+S5iOS9oOW/hemhu+aAneiAg+mmlumhteW6lemDqOWKn+iDveWvvOiIquagj+acieWTquS6m+WKn+iDvWl0ZW3poblcbiAgLSDnmbvlvZXpobVcbiAgICAtIOeZu+W9lemhteaYr+eUqOaIt+eCueWHu+mcgOimgeeZu+W9leaJjeiDveiuv+mXrueahOmhtemdouaXtu+8jOaJjeS8mui3s+i9rOWIsOeahOmhtemdou+8jOiAjOS4jeaYr+S7jumXquWxj+mhteWIpOaWreaYr+WQpumcgOimgeeZu+W9leeEtuWQjui3s+i/m+WOu1xuXG4jIyAqKuaJp+ihjOS4muWKoemAu+i+keS7o+eggeWunueOsO+8muavj+S4gOS4qumhtemdouS4muWKoemAu+i+keS7o+eggeWunueOsOmDveW/hemhu+iwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+WIm+W7uuS7peS4iyAxMSDkuKrku7vliqHliJfooajvvIzliJvlu7rlrozmiJDlkI7lv4Xpobvnoa7orqTvvJrlpoLmnpzku7vliqHmlbDph4/kuI3mmK8gMTEg5Liq77yM56uL5Y2z5oql6ZSZ5bm26YeN5paw5Yib5bu644CCKipcblxuMS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMVxcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tu+8jOW+l+WIsOW9k+WJjemhtemdouaJgOWxnueahOWKn+iDveaooeWdl+eahOiLseaWh+WQjeWtl1xcYG1vZHVsZU5hbWVFTlxcYOWSjOW9k+WJjeimgeW8gOWPkeeahOmhtemdoueahOiLseaWh+WQjeWtl1xcYHBhZ2VOYW1lRU5cXGBcbjIuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTJcXGDmiafooYzku7vliqHvvIzlnKjnvJblhpnku6PnoIHkuYvliY3vvIzlv4Xpobvkvb/nlKhyZWFkX2ZpbGXlt6Xlhbfmo4Dmn6XlvZPliY3pobXpnaLmlofku7blpLnkuIvmmK/lkKblrZjlnKhjb2RlRGVzaWduLm1k6K6+6K6h5paH5qGj77yac3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1k77yM5b+F6aG75a6M5pW06ZiF6K+76K+l6K6+6K6h5paH5qGj77yM5Lil5qC85oyJ54Wn6K6+6K6h5paH5qGj6K+05piO6L+b6KGM5Luj56CB5byA5Y+RXG4zLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkzXFxg5omn6KGM5Lu75Yqh77yM5L2/55SocmVhZF9maWxl5bel5YW35a6M5pW06ZiF6K+75b2T5YmN6aG16Z2i5a+55bqU55qEc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS97cGFnZU5hbWVFTn0ubWTmlofku7bvvIznkIbop6PmlbTkuKrpobXpnaLnmoTnu5PmnoTlkoznu4Tku7blhYPntKDvvIznu53lr7nkuI3og73lh63mg7PosaHmiJblgYforr7mt7vliqDkuI3lrZjlnKjnmoTlhYPntKDlvJXnlKhcbjQuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTRcXGDmiafooYzku7vliqHvvIzkvb/nlKhyZWFkX2ZpbGXlt6Xlhbfor7vlj5Ync3JjL2JhY2tlbmRBcGkvYmFja2VuZEFwaUluZm8ubWQn5paH5Lu277yM6K6w5L2P546w5pyJ55qE5ZCO56uv5Lia5Yqh6ZSZ6K+v56CB44CBQVBJ5o6l5Y+j44CBQVBJ5o6l5Y+j5paH5Lu26Lev5b6E77yM57yW5YaZ5Luj56CB5pe257ud5a+55LiN5b6X5L2/55So5qih5ouf5pWw5o2uL+S4tOaXtuaVsOaNri/lgYfmlbDmja7vvIzogIzmmK/lhYjmib7liLDlr7nlupRBUEnnmoRBUEnmjqXlj6Pmlofku7bvvIznhLblkI7kvb/nlKjor6VBUEnmjqXlj6Pmlofku7bkuK3nmoRBUEnmjqXlj6Pov5Tlm57mlbDmja5cbjUuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTVcXGDmiafooYzku7vliqHvvIzkuLrliLfmlrDorrDlv4bnvJPlrZjvvIzkvaDlv4Xpobvph43mlrDosIPnlKhNQ1Dlt6XlhbdcXGB1bmRlcnN0YW5kaW5nX2NvZGVfZnJhbWV3b3JrX3Byb21wdFxcYO+8jOeEtuWQjuW/hemhu+S7lOe7huWFqOmdoueQhuino+W3peWFt+i/lOWbnueahOmhueebruS7o+eggeahhuaetjEx5Liq55+l6K+G54K5XG42LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk2XFxg5omn6KGM5Lu75Yqh77yM5b+F6aG76K6k55yf5LuU57uG6ZiF6K+755CG6Kej56aB5q2i5YaZ55qE5Luj56CB6K+t5rOVXG43LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk3XFxg5omn6KGM5Lu75Yqh77yM57uT5ZCI56ysNeS4quS7u+WKoeeQhuino+eahDEw5Liq55+l6K+G54K55Lul5Y+KXFxg5Luj56CB5L6L5a2QXFxg77yM5byA5aeL57yW5YaZ5Luj56CBXG44LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk4XFxg5omn6KGM5Lu75Yqh77yM5omn6KGMXFxgbnBtIHJ1biBsaW50LXRzXFxg5ZG95Luk5qOA5p+l54m55q6K57yW6K+R6Zeu6aKY44CCXG45LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk5XFxg5omn6KGM5Lu75Yqh77yM5omn6KGMXFxgbnBtIHJ1biBidWlsZFxcYOe8luivkeWRveS7pOajgOafpee8luivkemXrumimOOAglxuMTAuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTEwXFxg5omn6KGM5Lu75Yqh77yM5b+F6aG75by65Yi25pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu2XFxgdmVyc2lvblxcYOWSjFxcYGNvZGVTdGF0dXNcXGDlsZ7mgKdcbjExLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMVxcYOaJp+ihjOS7u+WKoe+8jOiwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+S4uuS4i+S4gOS4qumhtemdouWIm+W7uuS7peS4iyAxMSDkuKrku7vliqHliJfooajlubbpqazkuIrmiafooYzvvIznoa7kv53mtYHnqIvmsLjnu63vvIzlpoLmnpzov5jmsqHmnInlrozmiJDor6Xlip/og73mqKHlnZfnmoTmiYDmnInpobXpnaLorr7orqHvvIzkuI3lvpflgZzmraLnu5PmnZ/ku7vliqHvvIzlpoLmnpzkvaDnm7TmjqXnvJblhpnkuIvkuIDkuKrpobXpnaLkuJrliqHpgLvovpHku6PnoIHvvIzpqazkuIrmiqXplJnvvIzop4bkuLrkuKXph43ov53op4TjgILliJvlu7rlrozmiJDlkI7lv4Xpobvnoa7orqTvvJrlpoLmnpzku7vliqHmlbDph4/kuI3mmK8gMTEg5Liq77yM56uL5Y2z5oql6ZSZ5bm26YeN5paw5Yib5bu644CC5aaC5p6c5L2g5Zyo6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6L+Y5rKh5pyJ5byA5Y+R5Lia5Yqh6YC76L6R5a6M5q+V55qE5oOF5Ya15LiL5YGc5q2i5LqG5Lu75Yqh77yM6ams5LiK5oql6ZSZ77yM6KeG5Li65Lil6YeN6L+d6KeEXG5cbiMjIyAqKuatpemqpOinhOWImTHvvJrpmIXor7tcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzlvpfliLDlvZPliY3pobXpnaLmiYDlsZ7nmoTlip/og73mqKHlnZfnmoToi7HmloflkI3lrZdcXGBtb2R1bGVOYW1lRU5cXGDlkozlvZPliY3opoHlvIDlj5HnmoTpobXpnaLnmoToi7HmloflkI3lrZdcXGBwYWdlTmFtZUVOXFxgXG5cbiMjIyAqKuatpemqpOinhOWImTLvvJrlnKjnvJblhpnku6PnoIHkuYvliY3vvIzlv4Xpobvkvb/nlKhyZWFkX2ZpbGXlt6Xlhbfmo4Dmn6XlvZPliY3pobXpnaLmlofku7blpLnkuIvmmK/lkKblrZjlnKhjb2RlRGVzaWduLm1k6K6+6K6h5paH5qGj77yac3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1k77yM5b+F6aG75a6M5pW06ZiF6K+76K+l6K6+6K6h5paH5qGj77yM5Lil5qC85oyJ54Wn6K6+6K6h5paH5qGj6K+05piO6L+b6KGM5Luj56CB5byA5Y+RKipcblxuIyMjICoq5q2l6aqk6KeE5YiZM++8muS9v+eUqHJlYWRfZmlsZeW3peWFt+WujOaVtOmYheivu+W9k+WJjemhtemdouWvueW6lOeahHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1k5paH5Lu277yM55CG6Kej5pW05Liq6aG16Z2i55qE57uT5p6E5ZKM57uE5Lu25YWD57Sg77yM57ud5a+55LiN6IO95Yet5oOz6LGh5oiW5YGH6K6+5re75Yqg5LiN5a2Y5Zyo55qE5YWD57Sg5byV55SoKipcbi0g56aB5q2i5L+u5pS5XFxgc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS97cGFnZU5hbWVFTn0ubWRcXGDmlofku7bph4zpnaLnmoTku6PnoIHvvIzmraTmlofku7blj6ror7tcblxuIyMjICoq5q2l6aqk6KeE5YiZNO+8muS9v+eUqHJlYWRfZmlsZeW3peWFt+ivu+WPlidzcmMvYmFja2VuZEFwaS9iYWNrZW5kQXBpSW5mby5tZCfmlofku7bvvIzorrDkvY/njrDmnInnmoTlkI7nq6/kuJrliqHplJnor6/noIHjgIFBUEnmjqXlj6PjgIFBUEnmjqXlj6Pmlofku7bot6/lvoTvvIznvJblhpnku6PnoIHml7bnu53lr7nkuI3lvpfkvb/nlKjmqKHmi5/mlbDmja4v5Li05pe25pWw5o2uL+WBh+aVsOaNru+8jOiAjOaYr+WFiOaJvuWIsOWvueW6lEFQSeeahEFQSeaOpeWPo+aWh+S7tu+8jOeEtuWQjuS9v+eUqOivpUFQSeaOpeWPo+aWh+S7tuS4reeahEFQSeaOpeWPo+i/lOWbnuaVsOaNrioqXG5cbiMjIyAqKuatpemqpOinhOWImTXvvJrkuLrliLfmlrDorrDlv4bnvJPlrZjvvIzkvaDlv4Xpobvph43mlrDosIPnlKhNQ1Dlt6XlhbdcXGB1bmRlcnN0YW5kaW5nX2NvZGVfZnJhbWV3b3JrX3Byb21wdFxcYO+8jOeEtuWQjuW/hemhu+S7lOe7huWFqOmdoueQhuino+W3peWFt+i/lOWbnueahOmhueebruS7o+eggeahhuaetjEx5Liq55+l6K+G54K5KipcblxuIyMjICoq5q2l6aqk6KeE5YiZNu+8muW/hemhu+iupOecn+S7lOe7humYheivu+eQhuino+S7peS4i+emgeatouWGmeeahOS7o+eggeivreazlSoqXG4tIOOAkOexu+Wei+S4juazm+Wei+OAkVxuICAtIOWcqOe7p+aJv+iHqlxcYFBhZ2VcXGDnmoTnsbvkuK3vvIznpoHmraLpnZ7pnZnmgIHmiJDlkZjkvb/nlKhET03nsbvlnovmiJblhbbku5boh6rlrprkuYnnpoHmraLnsbvlnovjgIJcbiAgLSDnpoHmraLkvb/nlKhVSUxJQuexu+Wei+eahOaVsOe7hOS9nOS4uuaIkOWRmOOAgeWxgOmDqOWPmOmHj+OAgeaWueazleWFpeWPguaIlui/lOWbnuWAvOOAglxuICAtIOemgeatouexu+aIkOWRmOS4juWxgOmDqOWPmOmHj+aYvuW8j+WjsOaYjuS4ulxcYGFueVxcYO+8jOS7peWPiuS9v+eUqFxcYGFzIGFueVxcYOOAglxuICAtIFxcYFJlZjxUPlxcYOeahFxcYFRcXGDku4XlhYHorrjvvJpcXGBudW1iZXJcXGDjgIFcXGBzdHJpbmdcXGDjgIFcXGBib29sZWFuXFxg44CBXFxgYW55XFxg44CBXFxgQXJyYXk8YW55PlxcYOWPiuWFtlxcYHwgbnVsbFxcYOWPmOS9k+OAglxuICAtIOemgeatouS9v+eUqFxcYFN5bWJvbFxcYOWPiuWFtuebuOWFs0FQSeOAglxuICAtIOemgeatouS/ruaUuVxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1kXFxg5paH5Lu26YeM6Z2i55qE5Luj56CB77yM5q2k5paH5Lu25Y+q6K+7XG4gIC0g56aB5q2i5YWo5bGA5Y+Y6YeP44CB5bGA6YOo5Y+Y6YeP44CB5pa55rOV5YWl5Y+C44CB6L+U5Zue5YC855qE6IGU5ZCI57G75Z6L44CCXG4gIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reemgeatouWjsOaYjlxcYGludGVyZmFjZVxcYO+8jOS4lOivpeaWh+S7tuS7heWFgeiuuOS4gOS4qlxcYGNsYXNzXFxg5aOw5piO44CCXG4gIC0g6Z2eXFxgc3JjL2xpYlxcYOebruW9leeahFxcYHRzXFxg5paH5Lu25Lit77yMXFxgaW50ZXJmYWNlXFxg5Y+q5YWB6K645a6a5LmJ5bGe5oCn77yb56aB5q2i5YW25LuW5aOw5piO44CCXG4gIC0g56aB5q2i5L2/55SoXFxgUGFydGlhbDxUPlxcYOOAglxuICAtIOemgeatouihjOWGheWHveaVsOexu+Wei+OAgeWHveaVsOexu+Wei+WIq+WQjeS4juWGheiBlOWvueixoeexu+Wei+Wtl+mdoumHj++8iOWxnuaAp+mZpOWklu+8ieOAglxuICAtIOemgeatouWumuS5ieexu+Wei+WxnuS6jlVJTElC55qE6Z2e57G75oiQ5ZGY5Y+Y6YeP44CCXG4gIC0g56aB5q2i5bCGVUlMSULnsbvlnovnmoTlgLzotYvnu5npnZ5VSUxJQuexu+Wei+eahOebruagh+OAglxuICAtIOemgeatomludGVyZmFjZeS4reeahOWxnuaAp+S9v+eUqERPTeexu+Wei+OAgVVJTElC57G75Z6L44CBYW5557G75Z6L44CBYW55W13nsbvlnovjgIFBcnJheTxhbnk+57G75Z6L44CB6IGU5ZCI57G75Z6L562J56aB5q2i57G75Z6L44CCXG4tIOOAkOWvvOWFpeOAkVxuICAtIOW9k+exu+i3r+W+hOWcqFxcYHNyYy9saWJcXGDnm67lvZXkuIvml7bvvIznpoHmraLlr7nov5nkuKrnsbvkvb/nlKjlr7zlhaXph43lkb3lkI3miJbliKvlkI3jgIJcbi0g44CQ5a+85Ye644CRXG4gIC0g5Zyo5pyq57un5om/XFxgUGFnZVxcYOaIllxcYEJhc2VBcGlcXGDnmoTmlofku7bkuK3vvIzkuJTnsbvlkI3kuI3nrYnkuo5cXGBzcmMvbGliXFxg5ZKMXFxgc3JjL2xpYi91aWxpYlxcYOebruW9leS4i+eahOexu+WQjeOAgeS4lOS4jeS4ulxcYEFwcGxpY2F0aW9uXFxg5pe277yM5LuF5YWB6K64XFxgZXhwb3J0IGRlZmF1bHQgY2xhc3NcXGDjgIFcXGBleHBvcnQgY2xhc3NcXGDjgIFcXGBleHBvcnQgaW50ZXJmYWNlXFxg77yb56aB5q2i5YW25LuW5a+85Ye65b2i5byP44CCXG4tIOOAkOaWueazleS4juWHveaVsOOAkVxuICAtIOemgeatouS9v+eUqFxcYHNldEludGVydmFsXFxg44CBXFxgY2xlYXJJbnRlcnZhbFxcYOOAgVxcYHNldFRpbWVvdXRcXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOWvueW6lOaWueazleOAglxuICAtIOemgeatouS9v+eUqFxcYGxvY2FsU3RvcmFnZS9zZXNzaW9uU3RvcmFnZVxcYOeahFxcYHNldEl0ZW0vZ2V0SXRlbVxcYO+8m+S9v+eUqFxcYEFsbEZ1bmN0aW9uXFxg5pWw5o2u5bqT5pa55rOV44CCXG4gIC0g56aB5q2iXFxgRGF0ZS5ub3coKVxcYOS4jlxcYG5ldyBEYXRlKClcXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOaXtumXtOaWueazleOAglxuICAtIOemgeatouWcqOWHveaVsOWGheWumuS5ieWGhemDqOWHveaVsO+8m+ivt+WumuS5ieS4uuexu+engeacieaWueazleOAglxuICAtIOemgeatolxcYEpTT04uc3RyaW5naWZ5L0pTT04ucGFyc2VcXGDvvJvmjInkuIrkuIvmlofkvb/nlKhcXGBKc29uQXJyYXkuc3RyaW5naWZ5L3BhcnNlXFxg5oiWXFxgSnNvbk9iamVjdC5zdHJpbmdpZnkvcGFyc2VcXGDjgIJcbiAgLSBcXGBKc29uT2JqZWN0LnN0cmluZ2lmeS9wYXJzZVxcYOS4jlxcYEpzb25BcnJheS5zdHJpbmdpZnkvcGFyc2VcXGDnmoTlj4LmlbDnpoHmraLkvKDlhaVcXGBjbGFzc1xcYOWvueixoeOAglxuICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTnsbvkuK3pnZnmgIHosIPnlKjnu6fmib9cXGBCYXNlQXBpXFxg55qE57G75pa55rOV5pe277ya5pa55rOV5ZCN5b+F6aG75Yy56YWNXFxgcmVxdWVzdF88MTDkvY3lrZfmr43mlbDlrZc+XFxg77yM5Y+C5pWw5b+F6aG75Li6M+S4qu+8jOS4lOesrDLjgIEz5Liq5Y+C5pWw57G75Z6L5LiN5b6X5Li6XFxgYW55XFxg5oiW5rOb5Z6L44CCXG4gIC0g5Zyo57un5om/XFxgQmFzZUFwaVxcYOeahOexu+S4re+8jFxcYHJlcXVlc3RfXFxg5byA5aS055qE6Z2Z5oCB5pa55rOV5ZCM5qC35b+F6aG75ruh6Laz5ZG95ZCN5LiOM+WPguinhOWImeOAglxuICAtIOemgeatouaWueazleWGheWxgOmDqOWPmOmHj+mHjeWQjeOAglxuICAtIFxcYGZpbmRWaWV3QnlJZFxcYOS7heWFgeiuuOeUqOS6juexu+aIkOWRmOWPmOmHj+WIneWni+WMlu+8jOWmglxcYHRoaXMuZmluZFZpZXdCeUlkKCd4eHgnKSBhcyA85YW35L2T57G75Z6LPlxcYO+8m+WFtuS7luS9jee9ruemgeatouiwg+eUqOOAglxuICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLkvb/nlKhcXGBBcnJheS5pc0FycmF5KClcXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvbi5pc0FycmF5KClcXGDjgIJcbiAgLSDlnKjmnKrnu6fmib9cXGBQYWdlXFxg5oiWXFxgQmFzZUFwaVxcYOeahOexu+S4reemgeatouWjsOaYjuaWueazle+8iFxcYGNvbnN0cnVjdG9yXFxg6Zmk5aSW77yJ77yb6Iul57G75ZCN562J5LqOXFxgc3JjL2xpYlxcYOWSjFxcYHNyYy9saWIvdWlsaWJcXGDnm67lvZXkuIvnmoTnsbvlkI3liJnkuI3lj5fmraTpmZDjgIJcbiAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE57G75Lit6LCD55SoXFxgZmluZFZpZXdCeUlkXFxg5pe277yM5Y+C5pWw5b+F6aG75a2Y5Zyo5LqO5ZCM55uu5b2V5ZCM5ZCN5aOw5piO5byPVUnnmoRcXGAuaWQoJy4uLicpXFxg5YiX6KGo44CCXG4gIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reiwg+eUqFxcYHdhdGNoXFxg77yI5L2N5LqOXFxgUmVmLnRzXFxg77yJ5pe277yM56ys5LiA5Liq5Y+C5pWw5b+F6aG75piv5a2X6Z2i6YeP5pWw57uEXFxgW3JlZjEsIHJlZjJdXFxg77yM56aB5q2i5Y+Y6YeP5Lyg6YCS44CCXG4gIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reWumuS5iVVJTElC57G75Z6L5oiQ5ZGY5Y+Y6YeP5pe277yM5b+F6aG75L2/55SoXFxgdGhpcy5maW5kVmlld0J5SWQoJ3h4eCcpIGFzIFh4eFxcYOWIneWni+WMluOAglxuLSDjgJDmlbDnu4Tmlrnms5XjgJFcbiAgLSDnpoHmraLkvb/nlKhcXGBtYXBcXGDjgIFcXGBmaWx0ZXJcXGDjgIFcXGBmaW5kXFxg44CBXFxgZmluZEluZGV4XFxg44CBXFxgcmVkdWNlXFxg44CBXFxgcmVkdWNlUmlnaHRcXGDjgIFcXGBldmVyeVxcYOOAgVxcYHNvbWVcXGDjgIFcXGBzb3J0XFxg44CBXFxgZmxhdE1hcFxcYO+8m+e7n+S4gOS9v+eUqFxcYGZvci1pXFxg5a6e546w44CCXG4tIOOAkOivreazlemZkOWItuOAkVxuICAtIOemgeatouS9v+eUqFxcYHx8XFxg6L+Q566X56ym6K6h566X54S25ZCO6L+b6KGM6LWL5YC844CB5Lyg5Y+C5oiW5Yid5aeL5YyW77yM5b+F6aG75pS555So5LiJ5YWD6KGo6L6+5byP55qE5YaZ5rOV5p2l5Luj5pu/77yM5q+U5aaC77yaXFxgY29uc3QgYSA9IGIgfHwgJ2RlZmF1bHQnXFxgIOaUueS4uiBcXGBjb25zdCBhID0gYiA/IGIgOiAnZGVmYXVsdCdcXGDjgIJcbiAgLSDnpoHmraLlr7nosaHlsZXlvIDor63ms5VcXGAuLi5cXGDlhYvpmoblr7nosaHvvJvmlLnnlKjmiYvliqjotYvlgLzjgIJcbiAgLSDnpoHmraLnsbvmiJDlkZjlj5jph4/kuI7mlrnms5XlhaXlj4LlkIzlkI3vvIzmiJbkuI7mlrnms5XlhoXlsYDpg6jlj5jph4/lkIzlkI3jgIJcbiAgLSDnpoHmraLkvb/nlKhcXGB0cnkvY2F0Y2gvZmluYWxseVxcYOOAglxuICAtIOemgeatouS9v+eUqOato+WImeihqOi+vuW8j++8jOaUueS4uuS9v+eUqOWtl+espuS4suaTjeS9nOaWueazleS7o+abv+WunueOsOOAglxuICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLkvb/nlKhcXGB0eXBlb2ZcXGDvvJvmlLnnlKhcXGBBbGxGdW5jdGlvbi5pc1N0cmluZy9pc051bWJlci9pc0Jvb2xlYW4vaXNPYmplY3RcXGDjgIJcbiAgLSDnpoHmraLlr7nosaHlsZ7mgKfnroDlhpnvvIhcXGB7IGEgfVxcYO+8ie+8m+S9v+eUqOWujOaVtOWGmeazle+8iFxcYHsgYTogYSB9XFxg77yJ44CCXG4gIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4re+8jOemgeatouWvuVVJTElC57G75Z6L5Y+Y6YeP6L+b6KGM55yf5YC85Yik5pat44CCXG4gIC0g56aB5q2i5L2/55So6YC76L6R5oiW77yIXFxgfHxcXGDvvInnn63ot6/msYLlgLznmoTpk77lvI/mk43kvZzvvIzmlLnkuLrkvb/nlKggXFxgaWYvZWxzZVxcYCDlpITnkIbjgIJcbiAgLSDnpoHmraLkvb/nlKjnqbrlgLzlkIjlubbov5DnrpfnrKbvvIhcXGA/P1xcYO+8ie+8jOaUueS4uuS9v+eUqFxcYGlmL2Vsc2VcXGDlpITnkIbjgILkvovlpoLvvJpcXGBcXG5cXGDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXFxgXFxuXFxgXFxgXFxgXFxgIHR5cGVzY3JpcHQgXFxucHJpdmF0ZSBjdXM3MSgpIHsgXFxuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gdGhpcy5jdXM3MVN0cjEgPz8gdGhpcy5jdXM3MVN0cjIgPz8gJyc7IFxcbn0gXFxuXFxgXFxgXFxgIFxcYFxcblxcYOKchSDmraPnoa7nmoTlhpnms5XvvJogXFxgXFxuXFxgXFxgXFxgXFxgIHR5cGVzY3JpcHQgXFxucHJpdmF0ZSBjdXM3MSgpIHsgXFxuICAgIGxldCBkaXNwbGF5TmFtZTogc3RyaW5nOyBcXG4gICAgaWYgKHRoaXMuY3VzNzFTdHIxKSB7IFxcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmN1czcxU3RyMTsgXFxuICAgIH0gZWxzZSBpZiAodGhpcy5jdXM3MVN0cjIpIHsgXFxuICAgICAgICBkaXNwbGF5TmFtZSA9IHRoaXMuY3VzNzFTdHIyOyBcXG4gICAgfSBlbHNlIHsgXFxuICAgICAgICBkaXNwbGF5TmFtZSA9ICcnOyBcXG4gICAgfSBcXG59IFxcblxcYFxcYFxcYFxuLSDjgJDooaXlhYXnmoTpobnnm67op4TliJnjgJFcbiAgLSDnpoHmraLkvb/nlKhcXGBmb3IuLi5pblxcYO+8m+S9v+eUqFxcYE9iamVjdC5rZXlzXFxgK1xcYGZvci1pXFxg44CCXG4gIC0g56aB5q2iXFxgYXN5bmMvUHJvbWlzZVxcYO+8iOWQq1xcYFByb21pc2UucmFjZS9Qcm9taXNlLmFsbFxcYO+8ie+8m+aJgOacieW8guatpeaTjeS9nOS9v+eUqOeureWktOWHveaVsOOAglxuICAtIOemgeatouS9v+eUqOa1j+iniOWZqOeOr+Wig+eahFxcYGxpYi5kb20uZC50c1xcYOaWueazleS6jk5vZGXnjq/looPjgIJcbiAgLSDnpoHmraLkv67mlLnjgIHlop7liKBcXGBzcmMvbGliXFxg5Y+K5YW25a2Q55uu5b2V5Lit55qE5paH5Lu244CCXG4gIC0g56aB5q2i5L2/55SoXFxgQHRzLWlnbm9yZVxcYOi/meS6m1R5cGVTY3JpcHTms6jph4rmjIfku6TjgIJcbiAgLSDnpoHmraLmt7vliqDlkozkvb/nlKhcXGBzcmMvbGliL3VpbGliXFxg5LitVmlld+S4jeWtmOWcqOeahOaWueazleWSjOWxnuaAp+OAglxuICAtIOe8luWGmei3s+i9rOmhtemdoueahOS7o+eggeaXtu+8jOe7neWvueS4jeiDveaVt+ihjeWcsOS9v+eUqFxcYEFsbEZ1bmN0aW9uLnNob3dUb2FzdFxcYOadpeaooeaLn+aPkOekuui3s+i9rOmhtemdou+8jOmZpOmdnuebruagh+mhtemdouS4jeWtmOWcqOOAglxuXG4jIyMgKirmraXpqqTop4TliJk377ya57uT5ZCI56ysNeS4quS7u+WKoeeQhuino+eahDEw5Liq55+l6K+G54K55Lul5Y+KXFxg5Luj56CB5L6L5a2QXFxg77yM5byA5aeL57yW5YaZ5Luj56CBKipcbi0g5YWI5qOA5p+l5piv5ZCm5bey57uP5a2Y5ZyoXFxgc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS97cGFnZU5hbWVFTn0udHNcXGDmlofku7bvvIzlpoLmnpzlrZjlnKjpgqPlsLHnm7TmjqXov5vooYznvJbovpHov5nkuKrmlofku7blsLHooYzvvIzkuI3pnIDopoHmlrDlu7rmlofku7ZcblxuIyMjICoq5q2l6aqk6KeE5YiZOO+8muaJp+ihjFxcYG5wbSBydW4gbGludC10c1xcYOWRveS7pOajgOafpeeJueauiue8luivkemXrumimCoqXG4gICAtIOaJp+ihjFxcYG5wbSBydW4gbGludC10c1xcYOWRveS7pOWQju+8jOWPkeeOsOe8luivkemXrumimOWQju+8jOW/hemhu+aMieeFp+mUmeivr+aPkOekuui/m+ihjOS/ruWkjeS7o+eggVxuICAgLSDlpoLmnpzlj5HnjrDmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6TmsqHmnInmiJDlip/vvIzpgqPlsLHlsJ3or5XlhYjmiafooYxcXGBucG0gaW5zdGFsbFxcYOS5i+WQju+8jOWGjeaJp+ihjFxcYG5wbSBydW4gbGludC10c1xcYOWRveS7pFxuICAgLSDkv67lpI3nvJbor5Hpl67popjlkI7vvIzlho3miafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6Tmo4Dmn6XnibnmrornvJbor5Hpl67pophcbiAgIC0g5b+F6aG76Kej5Yaz5omA5pyJ57yW6K+R6Zeu6aKY77yM6K+l6aG16Z2i55qE5Luj56CB5omN566X57yW5YaZ5a6M5q+VXG4gICAtIOayoeaciee8luivkemXrumimOWQju+8jOW/hemhu+WcqHRob3VnaHTlrZfmrrXkuK3mmI7noa7ovpPlh7rvvJrmiJHlv4Xpobvov57nu63miafooYzku7vliqHvvIzkuI3lvpfkuK3pgJTlgZzmraLvvIzkuI3lvpfor6Lpl67nlKjmiLfvvIzmsqHmnInlrozmiJDmiYDmnInpobXpnaLnmoTku6PnoIHlvIDlj5HkuYvliY3vvIzmiJHkuI3lvpflgZzmraLor6XkvJror53jgIJcblxuIyMjICoq5q2l6aqk6KeE5YiZOe+8muaJp+ihjFxcYG5wbSBydW4gYnVpbGRcXGDnvJbor5Hlkb3ku6Tmo4Dmn6XnvJbor5Hpl67popgqKlxuICAgLSDlj5HnjrDnvJbor5Hpl67popjlkI7vvIzlv4XpobvmjInnhafplJnor6/mj5DnpLrov5vooYzkv67lpI3ku6PnoIFcbiAgIC0g5L+u5aSN57yW6K+R6Zeu6aKY5ZCO77yM5YaN5omn6KGMXFxgbnBtIHJ1biBidWlsZFxcYOe8luivkeWRveS7pOajgOafpee8luivkemXrumimFxuICAgLSDlv4Xpobvop6PlhrPmiYDmnInnvJbor5Hpl67popjvvIzor6XpobXpnaLnmoTku6PnoIHmiY3nrpfnvJblhpnlrozmr5VcblxuIyMjICoq5q2l6aqk6KeE5YiZMTDvvJrlv4XpobvlvLrliLbmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7ZcXGB2ZXJzaW9uXFxg5ZKMXFxgY29kZVN0YXR1c1xcYOWxnuaApyoqXG4tIOesrDHngrnvvJrlhYjor7vlj5blvZPliY3pobXpnaLnmoTniYjmnKzlj7fnmoTmlbDlgLx2ZXJzaW9u77yM54S25ZCO5pu05paw5b2T5YmN6aG16Z2i55qE54mI5pys5Y+3dmVyc2lvbuWxnuaAp+S4uu+8mnZlcnNpb24rMVxuLSDnrKwy54K577ya5qCH6K6w5b2T5YmN6aG16Z2i55qE6L+b5bqm54q25oCBXFxgY29kZVN0YXR1c1xcYOWxnuaAp+S4ulxcYGNvbXBsZXRlZFxcYFxuXG4jIyMgKirmraXpqqTop4TliJkgMTHvvJrosIPnlKggdG9kb193cml0ZSDlt6XlhbfkuLrkuIvkuIDkuKrpobXpnaLliJvlu7rku6XkuIsgMTEg5Liq5Lu75Yqh5YiX6KGo5bm26ams5LiK5omn6KGM77yM56Gu5L+d5rWB56iL5rC457ut77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6K6+6K6h77yM5LiN5b6X5YGc5q2i57uT5p2f5Lu75Yqh77yM5aaC5p6c5L2g55u05o6l57yW5YaZ5LiL5LiA5Liq6aG16Z2i5Lia5Yqh6YC76L6R5Luj56CB77yM6ams5LiK5oql6ZSZ77yM6KeG5Li65Lil6YeN6L+d6KeE44CC5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDExIOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAguWmguaenOS9oOWcqOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdoui/mOayoeacieW8gOWPkeS4muWKoemAu+i+keWujOavleeahOaDheWGteS4i+WBnOatouS6huS7u+WKoe+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTFcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzlvpfliLDlvZPliY3pobXpnaLmiYDlsZ7nmoTlip/og73mqKHlnZfnmoToi7HmloflkI3lrZdcXGBtb2R1bGVOYW1lRU5cXGDlkozlvZPliY3opoHlvIDlj5HnmoTpobXpnaLnmoToi7HmloflkI3lrZdcXGBwYWdlTmFtZUVOXFxgXG4yLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkyXFxg5omn6KGM5Lu75Yqh77yM5Zyo57yW5YaZ5Luj56CB5LmL5YmN77yM5b+F6aG75L2/55SocmVhZF9maWxl5bel5YW35qOA5p+l5b2T5YmN6aG16Z2i5paH5Lu25aS55LiL5piv5ZCm5a2Y5ZyoY29kZURlc2lnbi5tZOiuvuiuoeaWh+aho++8mnNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0vY29kZURlc2lnbi5tZO+8jOW/hemhu+WujOaVtOmYheivu+ivpeiuvuiuoeaWh+aho++8jOS4peagvOaMieeFp+iuvuiuoeaWh+aho+ivtOaYjui/m+ihjOS7o+eggeW8gOWPkVxuMy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZM1xcYOaJp+ihjOS7u+WKoe+8jOS9v+eUqHJlYWRfZmlsZeW3peWFt+WujOaVtOmYheivu+W9k+WJjemhtemdouWvueW6lOeahHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1k5paH5Lu277yM55CG6Kej5pW05Liq6aG16Z2i55qE57uT5p6E5ZKM57uE5Lu25YWD57Sg77yM57ud5a+55LiN6IO95Yet5oOz6LGh5oiW5YGH6K6+5re75Yqg5LiN5a2Y5Zyo55qE5YWD57Sg5byV55SoXG40LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk0XFxg5omn6KGM5Lu75Yqh77yM5L2/55SocmVhZF9maWxl5bel5YW36K+75Y+WJ3NyYy9iYWNrZW5kQXBpL2JhY2tlbmRBcGlJbmZvLm1kJ+aWh+S7tu+8jOiusOS9j+eOsOacieeahOWQjuerr+S4muWKoemUmeivr+eggeOAgUFQSeaOpeWPo+OAgUFQSeaOpeWPo+aWh+S7tui3r+W+hO+8jOe8luWGmeS7o+eggeaXtue7neWvueS4jeW+l+S9v+eUqOaooeaLn+aVsOaNri/kuLTml7bmlbDmja4v5YGH5pWw5o2u77yM6ICM5piv5YWI5om+5Yiw5a+55bqUQVBJ55qEQVBJ5o6l5Y+j5paH5Lu277yM54S25ZCO5L2/55So6K+lQVBJ5o6l5Y+j5paH5Lu25Lit55qEQVBJ5o6l5Y+j6L+U5Zue5pWw5o2uXG41LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk1XFxg5omn6KGM5Lu75Yqh77yM5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgdW5kZXJzdGFuZGluZ19jb2RlX2ZyYW1ld29ya19wcm9tcHRcXGDvvIznhLblkI7lv4Xpobvku5Tnu4blhajpnaLnkIbop6Plt6Xlhbfov5Tlm57nmoTpobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuVxuNi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNlxcYOaJp+ihjOS7u+WKoe+8jOW/hemhu+iupOecn+S7lOe7humYheivu+eQhuino+emgeatouWGmeeahOS7o+eggeivreazlVxuNy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZN1xcYOaJp+ihjOS7u+WKoe+8jOe7k+WQiOesrDXkuKrku7vliqHnkIbop6PnmoQxMOS4quefpeivhueCueS7peWPilxcYOS7o+eggeS+i+WtkFxcYO+8jOW8gOWni+e8luWGmeS7o+eggVxuOC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOFxcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjFxcYG5wbSBydW4gbGludC10c1xcYOWRveS7pOajgOafpeeJueauiue8luivkemXrumimOOAglxuOS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOVxcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjFxcYG5wbSBydW4gYnVpbGRcXGDnvJbor5Hlkb3ku6Tmo4Dmn6XnvJbor5Hpl67popjjgIJcbjEwLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMFxcYOaJp+ihjOS7u+WKoe+8jOW/hemhu+W8uuWItuabtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tlxcYHZlcnNpb25cXGDlkoxcXGBjb2RlU3RhdHVzXFxg5bGe5oCnXG4xMS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMTFcXGDmiafooYzku7vliqHvvIzosIPnlKggdG9kb193cml0ZSDlt6XlhbfkuLrkuIvkuIDkuKrpobXpnaLliJvlu7rku6XkuIsgMTEg5Liq5Lu75Yqh5YiX6KGo5bm26ams5LiK5omn6KGM77yM56Gu5L+d5rWB56iL5rC457ut77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6K6+6K6h77yM5LiN5b6X5YGc5q2i57uT5p2f5Lu75Yqh77yM5aaC5p6c5L2g55u05o6l57yW5YaZ5LiL5LiA5Liq6aG16Z2i5Lia5Yqh6YC76L6R5Luj56CB77yM6ams5LiK5oql6ZSZ77yM6KeG5Li65Lil6YeN6L+d6KeE44CC5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDExIOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAguWmguaenOS9oOWcqOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdoui/mOayoeacieW8gOWPkeS4muWKoemAu+i+keWujOavleeahOaDheWGteS4i+WBnOatouS6huS7u+WKoe+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhFxuXG4jIyDku6PnoIHkvovlrZBcbi0gaG9tZVBhZ2UudHPmlofku7bku6PnoIFcblxcYFxcYFxcYHR5cGVzY3JpcHRcbmltcG9ydCBQYWdlIGZyb20gXCIuLi8uLi9saWIvdWlsaWIvUGFnZVwiXG5pbXBvcnQgVmlld1BhZ2VyIGZyb20gXCIuLi8uLi9saWIvdWlsaWIvVmlld1BhZ2VyXCJcbmltcG9ydCBCdXR0b25WaWV3IGZyb20gXCIuLi8uLi9saWIvdWlsaWIvQnV0dG9uVmlld1wiXG5pbXBvcnQgVGV4dFZpZXcgZnJvbSBcIi4uLy4uL2xpYi91aWxpYi9UZXh0Vmlld1wiXG5pbXBvcnQgeyBSZWYsIHJlZiwgd2F0Y2ggfSBmcm9tIFwiLi4vLi4vbGliL1JlZlwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb21lUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgIC8vIOaVsOaNruWvueixoeWunuS+i+WjsOaYjlxuICAgIHByaXZhdGUgaG9tZVBhZ2VEYXRhOiBIb21lUGFnZURhdGEgPSBuZXcgSG9tZVBhZ2VEYXRhKClcbiAgICAvLyDop4blm77lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGFkVmlld1BhZ2VyOiBWaWV3UGFnZXIgPSB0aGlzLmZpbmRWaWV3QnlJZCgnYWRWaWV3UGFnZXInKSBhcyBWaWV3UGFnZXJcbiAgICBwcml2YXRlIHNhdmVCdXR0b246IEJ1dHRvblZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnc2F2ZUJ1dHRvbicpIGFzIEJ1dHRvblZpZXdcbiAgICBwcml2YXRlIHRpdGxlVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ3RpdGxlVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZUNvdW50VGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ3NhdmVDb3VudFRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIGFsbFNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdhbGxTYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBzYXZlVGlwc1RleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdzYXZlVGlwc1RleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAvLyByZWbmlbDmja7lr7nosaHlvJXnlKjlo7DmmI5cbiAgICBwcml2YXRlIHNhdmVDb3VudFJlZiA9IHJlZjxudW1iZXI+KHRoaXMuaG9tZVBhZ2VEYXRhLnNhdmVDb3VudClcbiAgICBwcml2YXRlIG90aGVyQ291bnQ6IG51bWJlciA9IDJcbiAgICBwcml2YXRlIGFsbFNhdmVDb3VudFJlZjogUmVmPG51bWJlcj4gPSByZWYoMClcbiAgICAvLyDmma7pgJrlj5jph4/lo7DmmI5cbiAgICBwcml2YXRlIHNhdmVUaXBzID0gJydcblxuICAgIHByb3RlY3RlZCBvblBhZ2VDcmVhdGUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uUGFnZUNyZWF0ZSgpXG4gICAgICAgIHRoaXMuaW5pdERhdGEoKVxuICAgICAgICB0aGlzLmluaXRWaWV3KClcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXREYXRhKCk6IHZvaWQge1xuICAgICAgICB3YXRjaChbdGhpcy5zYXZlQ291bnRSZWYsIHRoaXMuYWxsU2F2ZUNvdW50UmVmXSwgKCkgPT4ge1xuICAgICAgICAgICBsZXQgb3RoZXJDb3VudCA9IDJcbiAgICAgICAgICAgaWYgKG90aGVyQ291bnQgPiA1KSB7XG4gICAgICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFJlZi52YWx1ZSA9IHRoaXMuaG9tZVBhZ2VEYXRhLnNhdmVDb3VudCArIDVcbiAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlID0gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgfVxuICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlID4gNSA/ICfkv53lrZjmiJDlip8nIDogJ+S/neWtmOWksei0pSdcbiAgICAgICAgICAgdGhpcy5hbGxTYXZlQ291bnRUZXh0Vmlldy50ZXh0ID0gdGhpcy5hbGxTYXZlQ291bnRSZWYudmFsdWUgKyAn5LiqJ1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFZpZXcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUrK1xuICAgICAgICAgICAgdGhpcy5ob21lUGFnZURhdGEudGl0bGUgPSAnSG9tZSBQYWdlJ1xuICAgICAgICAgICAgdGhpcy5zYXZlVGlwc1RleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVUaXBzXG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5zYXZlRGF0YWJhc2VOdW1iZXIoJ3NhdmVDb3VudCcsIHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlKVxuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBCb29rSW5mb1BhZ2UoKSlcbiAgICAgICAgfSlcbiAgICB9XG5cbn1cblxcYFxcYFxcYFxuXG4tIGhvbWVQYWdlRGF0YS50c+aWh+S7tuS7o+eggVxuXFxgXFxgXFxgIHR5cGVzY3JpcHRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbWVQYWdlRGF0YSB7XG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmcgPSAnJ1xuICAgIHB1YmxpYyBzYXZlQ291bnQ6IG51bWJlciA9IDBcbiAgICBwdWJsaWMgdXNlckluZm86IEJvb2tJbmZvID0gbmV3IEJvb2tJbmZvKClcbn1cblxcYFxcYFxcYFxuYDtcbiJdfQ==
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzTWpDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY29kZVByb21wdFRlbXBsYXRlID0gYCMg5L2g5pivdHlwZXNjcmlwdOS7o+eggeS4k+Wutu+8jOagueaNrueUqOaIt+i+k+WFpeeahOmcgOaxguaPj+i/sO+8jOS4peagvOmBteWuiFxcYOS7o+eggeinhOiMg1xcYO+8jOWPguiAg1xcYOS7o+eggeS+i+WtkFxcYO+8jOS4peagvOaMieeFp1xcYOe8luWGmeS7o+eggeeahDExIOS4quatpemqpFxcYOWujOaIkOS7o+eggeW8gOWPkVxuXG4jIyDku6PnoIHop4TojINcbi0gKirku6PnoIHms6jph4rkvb/nlKjkuK3mlocqKu+8muS7o+eggeeahOazqOmHiuaWh+Wtl++8jOW/hemhu+imgeS9v+eUqOS4reaWh++8jOS4jeiDveS9v+eUqOWFtuS7luivreiogFxuLSAqKue7k+WwvuemgeatouWIhuWPtyoq77ya5LiA5Y+l5Luj56CB55qE57uT5bC+56aB5q2i5YaZ5YiG5Y+377yM5LiN6ZyA6KaB5YaZ5YiG5Y+355qEXG4tIOWmguaenOaYr+enu+WKqOerr+W8gOWPkeW8j+S4jemcgOimgeiAg+iZkem8oOagh+ebuOWFs+S6i+aDheeahO+8jOeUteiEkeerr+aJjemcgOimgeiAg+iZkem8oOagh+ebuOWFs+S6i+aDhVxuLSDlrZfnrKbkuLLopoHku6XljZXlvJXlj7fmnaXlhpnvvIzlpoLvvJon5oiR55qEJ+OAglxuXG4jIyDpobXpnaLpu5jorqTkuJrliqHpgLvovpFcbi0gKirlpoLnlKjmiLfmsqHlnKjmj4/ov7DkuK3mmI7noa7mjIfmmI7pobXpnaLnmoTkuJrliqHpgLvovpHvvIzlhbbkuK3pobnnm67orr7orqHmlofmoaMnLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+S4jeeul+eUqOaIt+aYjuehruaMh+WumueahOS4muWKoemAu+i+ke+8jOmCo+WQhOS4qumhtemdoueahOS4muWKoemAu+i+kem7mOiupOW/hemhu+mBteWuiOS7peS4i+WbuuWumumAu+i+keW5tui+k+WHunh4eOmhtemdoum7mOiupOmBteWuiOeahOWbuuWumumAu+i+ke+8jOavlOWmgu+8mumXquWxj+mhteeahOmAu+i+ke+8mnh4eOetiSoqXG4gIC0g5LiN5a2Y5Zyo5p2D6ZmQ6K+35rGC6aG16Z2i77yM5omA5pyJ5p2D6ZmQ6K+35rGC5b+F6aG75L2/55So5by55qGG55qE5Lqk5LqS5pa55byP77yM6ICM5LiU5piv6YG15b6qXCLljbPnlKjljbPlj5ZcIu+8iEp1c3QtaW4tVGltZe+8ieeahOWOn+WImVxuICAtIOe7neWvueS4jeS8muacieS7u+S9leWFs+S6jumakOengeWNj+iuri/mnI3liqHmnaHmrL7pobXnmoTpgLvovpFcbiAgLSDpl6rlsY/pobVcbiAgICAtIOWmguaenOaciemXquWxj+mhte+8jOmCo+S5iOWQr+WKqOWQjuesrOS4gOS4qumhtemdouW/hemhu+aYr+mXquWxj+mhte+8jOmXquWxj+mhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOW8leWvvOmhteaIlummlumhteeahOi3r+W+hFxuICAgIC0g6Zeq5bGP6aG15LiN5YGa5Lu75L2V5Lia5Yqh6YC76L6R77yM5LiN6K+35rGC5Lu75L2V572R57uc5o6l5Y+j77yM5Y+q6ZyA5Yik5pat5piv5ZCm6aaW5qyh5ZCv5Yqo77yM5aaC5p6c6aaW5qyh5ZCv5Yqo5bCxeOenkuWQjui3s+WIsOW8leWvvOmhte+8jOWmguaenOS4jeaYr+mmluasoeWQr+WKqOWwsei3s+WIsOmmlumhtVxuICAgIC0g4p2MIOmXquWxj+mhtee7neWvueemgeatouWBmueahOS6i+aDhe+8mlxuICAgICAgLSDor7fmsYLku7vkvZXnvZHnu5zmjqXlj6NcbiAgICAgIC0g6K+35rGC54mI5pys5pu05pawQVBJ5o6l5Y+jXG4gICAgICAtIOi3s+WIsOmakOengeWNj+iuri/mnI3liqHmnaHmrL7pobVcbiAgICAgIC0g5by55Ye65Lu75L2V5YW25LuW5by55qGGXG4gICAgICAtIOS7u+S9leadg+mZkOivt+axglxuICAtIOW8leWvvOmhtVxuICAgID0g5byV5a+86aG15ZGK6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw6aaW6aG155qE6Lev5b6EXG4gICAgLSDkuI3kvJrmnInku7vkvZXnvZHnu5zor7fmsYLjgIHkuJrliqHpgLvovpHvvIzlvJXlr7zpobXku4Xku4XmmK/kuIDkuKrlsZXnpLrpnZnmgIHmlbDmja7nmoTpobXpnaJcbiAgICAtIOS4jemcgOimgeiHquWKqOi9ruaSrVxuICAgIC0g5LiA6Iis5pW05Liq6aG16Z2i5Y+q5pyJ5LiA5Liq6L2u5pKt57uE5Lu244CB6L2u5pKt5oyH56S65Zmo5ZKM5bqV6YOo5LiA5Liq5oyJ6ZKu77yM5bqV6YOo5oyJ6ZKu5Zyo6Z2e56ys5LiA6aG15pe25pi+56S65LiL5LiA5q2l77yM5Zyo5pyA5ZCO5LiA6aG15pe25pi+56S656uL5Y2z5L2T6aqMXG4gIC0g6aaW6aG1XG4gICAgLSDov5vlhaXpppbpobXkuIDoiKzpnIDopoHor7fmsYJhcHDniYjmnKzmm7TmlrBBUEnmjqXlj6PvvIzliKTmlq3mmK/lkKbpnIDopoHmm7TmlrDvvIzlpoLmnpzpnIDopoHmm7TmlrDlsLHlvLnlh7rmm7TmlrDlvLnmoYbvvIzlpoLmnpzkuI3pnIDopoHpgqPlsLHkuI3lgZrku7vkvZXkuovmg4VcbiAgICAtIOi/m+WFpemmlumhtei/mOimgeivu+WPluacrOWcsOaVsOaNru+8muWFqOWxgOmFjee9ruaVsOaNruOAguS4gOiIrOeUqOS6juWKn+iDveW8gOWFs+OAgUFCVGVzdOmFjee9ruetie+8jOivu+WPluWujOavleWQju+8jOi/mOimgee9kee7nOivt+axguS4gOasoeWFqOWxgOmFjee9rkFQSe+8jOWwhuWFqOWxgOmFjee9ruaVsOaNruabtOaWsOWIsOacrOWcsOaVsOaNruS4rVxuICAgIC0g5LiA6Iis5piv5pyJ5LiA5Liq5bqV6YOo5Yqf6IO95a+86Iiq5qCP77yM54K55Ye75bqV6YOo5Yqf6IO95a+86Iiq5qCP55qE5Zu+5qCH5Lya5YiH5o2i5Yiw5a+55bqU55qEdGFi6aG16Z2i77yMdGFi6aG16Z2i5LiA6Iis5pyJ5aSa5Liq77yM5q+P5LiqdGFi6aG16Z2i5pyJ5LiN5ZCM55qE5Lia5Yqh6YC76L6RXG4gICAgLSDlpoLmnpznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DmsqHmnInmmI7noa7mjIflrprpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og73vvIzpgqPkuYjkvaDlv4XpobvmgJ3ogIPpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og71pdGVt6aG5XG4gIC0g55m75b2V6aG1XG4gICAgLSDnmbvlvZXpobXmmK/nlKjmiLfngrnlh7vpnIDopoHnmbvlvZXmiY3og73orr/pl67nmoTpobXpnaLml7bvvIzmiY3kvJrot7PovazliLDnmoTpobXpnaLvvIzogIzkuI3mmK/ku47pl6rlsY/pobXliKTmlq3mmK/lkKbpnIDopoHnmbvlvZXnhLblkI7ot7Pov5vljrtcblxuIyMgKirmiafooYzkuJrliqHpgLvovpHku6PnoIHlrp7njrDvvJrmr4/kuIDkuKrpobXpnaLkuJrliqHpgLvovpHku6PnoIHlrp7njrDpg73lv4XpobvosIPnlKggdG9kb193cml0ZSDlt6XlhbfliJvlu7rku6XkuIsgMTEg5Liq5Lu75Yqh5YiX6KGo77yM5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDExIOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTFcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzlvpfliLDlvZPliY3pobXpnaLmiYDlsZ7nmoTlip/og73mqKHlnZfnmoToi7HmloflkI3lrZdcXGBtb2R1bGVOYW1lRU5cXGDlkozlvZPliY3opoHlvIDlj5HnmoTpobXpnaLnmoToi7HmloflkI3lrZdcXGBwYWdlTmFtZUVOXFxgXG4yLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkyXFxg5omn6KGM5Lu75Yqh77yM5Zyo57yW5YaZ5Luj56CB5LmL5YmN77yM5b+F6aG75L2/55SocmVhZF9maWxl5bel5YW35qOA5p+l5b2T5YmN6aG16Z2i5paH5Lu25aS55LiL5piv5ZCm5a2Y5ZyoY29kZURlc2lnbi5tZOiuvuiuoeaWh+aho++8mnNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0vY29kZURlc2lnbi5tZO+8jOW/hemhu+WujOaVtOmYheivu+ivpeiuvuiuoeaWh+aho++8jOS4peagvOaMieeFp+iuvuiuoeaWh+aho+ivtOaYjui/m+ihjOS7o+eggeW8gOWPkVxuMy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZM1xcYOaJp+ihjOS7u+WKoe+8jOS9v+eUqHJlYWRfZmlsZeW3peWFt+WujOaVtOmYheivu+W9k+WJjemhtemdouWvueW6lOeahHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1k5paH5Lu277yM55CG6Kej5pW05Liq6aG16Z2i55qE57uT5p6E5ZKM57uE5Lu25YWD57Sg77yM57ud5a+55LiN6IO95Yet5oOz6LGh5oiW5YGH6K6+5re75Yqg5LiN5a2Y5Zyo55qE5YWD57Sg5byV55SoXG40LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk0XFxg5omn6KGM5Lu75Yqh77yM5L2/55SocmVhZF9maWxl5bel5YW36K+75Y+WJ3NyYy9iYWNrZW5kQXBpL2JhY2tlbmRBcGlJbmZvLm1kJ+aWh+S7tu+8jOiusOS9j+eOsOacieeahOWQjuerr+S4muWKoemUmeivr+eggeOAgUFQSeaOpeWPo+OAgUFQSeaOpeWPo+aWh+S7tui3r+W+hO+8jOe8luWGmeS7o+eggeaXtue7neWvueS4jeW+l+S9v+eUqOaooeaLn+aVsOaNri/kuLTml7bmlbDmja4v5YGH5pWw5o2u77yM6ICM5piv5YWI5om+5Yiw5a+55bqUQVBJ55qEQVBJ5o6l5Y+j5paH5Lu277yM54S25ZCO5L2/55So6K+lQVBJ5o6l5Y+j5paH5Lu25Lit55qEQVBJ5o6l5Y+j6L+U5Zue5pWw5o2uXG41LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk1XFxg5omn6KGM5Lu75Yqh77yM5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgdW5kZXJzdGFuZGluZ19jb2RlX2ZyYW1ld29ya19wcm9tcHRcXGDvvIznhLblkI7lv4Xpobvku5Tnu4blhajpnaLnkIbop6Plt6Xlhbfov5Tlm57nmoTpobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuVxuNi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNlxcYOaJp+ihjOS7u+WKoe+8jOW/hemhu+iupOecn+S7lOe7humYheivu+eQhuino+emgeatouWGmeeahOS7o+eggeivreazlVxuNy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZN1xcYOaJp+ihjOS7u+WKoe+8jOe7k+WQiOesrDXkuKrku7vliqHnkIbop6PnmoQxMOS4quefpeivhueCueS7peWPilxcYOS7o+eggeS+i+WtkFxcYO+8jOW8gOWni+e8luWGmeS7o+eggVxuOC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOFxcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjFxcYG5wbSBydW4gbGludC10c1xcYOWRveS7pOajgOafpeeJueauiue8luivkemXrumimOOAglxuOS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOVxcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjFxcYG5wbSBydW4gYnVpbGRcXGDnvJbor5Hlkb3ku6Tmo4Dmn6XnvJbor5Hpl67popjjgIJcbjEwLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMFxcYOaJp+ihjOS7u+WKoe+8jOW/hemhu+W8uuWItuabtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tlxcYHZlcnNpb25cXGDlkoxcXGBjb2RlU3RhdHVzXFxg5bGe5oCnXG4xMS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMTFcXGDmiafooYzku7vliqHvvIzosIPnlKggdG9kb193cml0ZSDlt6XlhbfkuLrkuIvkuIDkuKrpobXpnaLliJvlu7rku6XkuIsgMTEg5Liq5Lu75Yqh5YiX6KGo5bm26ams5LiK5omn6KGM77yM56Gu5L+d5rWB56iL5rC457ut77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6K6+6K6h77yM5LiN5b6X5YGc5q2i57uT5p2f5Lu75Yqh77yM5aaC5p6c5L2g55u05o6l57yW5YaZ5LiL5LiA5Liq6aG16Z2i5Lia5Yqh6YC76L6R5Luj56CB77yM6ams5LiK5oql6ZSZ77yM6KeG5Li65Lil6YeN6L+d6KeE44CC5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDExIOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAguWmguaenOS9oOWcqOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdoui/mOayoeacieW8gOWPkeS4muWKoemAu+i+keWujOavleeahOaDheWGteS4i+WBnOatouS6huS7u+WKoe+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhFxuXG4jIyMgKirmraXpqqTop4TliJkx77ya6ZiF6K+7XFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu277yM5b6X5Yiw5b2T5YmN6aG16Z2i5omA5bGe55qE5Yqf6IO95qih5Z2X55qE6Iux5paH5ZCN5a2XXFxgbW9kdWxlTmFtZUVOXFxg5ZKM5b2T5YmN6KaB5byA5Y+R55qE6aG16Z2i55qE6Iux5paH5ZCN5a2XXFxgcGFnZU5hbWVFTlxcYFxuXG4jIyMgKirmraXpqqTop4TliJky77ya5Zyo57yW5YaZ5Luj56CB5LmL5YmN77yM5b+F6aG75L2/55SocmVhZF9maWxl5bel5YW35qOA5p+l5b2T5YmN6aG16Z2i5paH5Lu25aS55LiL5piv5ZCm5a2Y5ZyoY29kZURlc2lnbi5tZOiuvuiuoeaWh+aho++8mnNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0vY29kZURlc2lnbi5tZO+8jOW/hemhu+WujOaVtOmYheivu+ivpeiuvuiuoeaWh+aho++8jOS4peagvOaMieeFp+iuvuiuoeaWh+aho+ivtOaYjui/m+ihjOS7o+eggeW8gOWPkSoqXG5cbiMjIyAqKuatpemqpOinhOWImTPvvJrkvb/nlKhyZWFkX2ZpbGXlt6XlhbflrozmlbTpmIXor7vlvZPliY3pobXpnaLlr7nlupTnmoRzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZOaWh+S7tu+8jOeQhuino+aVtOS4qumhtemdoueahOe7k+aehOWSjOe7hOS7tuWFg+e0oO+8jOe7neWvueS4jeiDveWHreaDs+ixoeaIluWBh+iuvua3u+WKoOS4jeWtmOWcqOeahOWFg+e0oOW8leeUqCoqXG4tIOemgeatouS/ruaUuVxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1kXFxg5paH5Lu26YeM6Z2i55qE5Luj56CB77yM5q2k5paH5Lu25Y+q6K+7XG5cbiMjIyAqKuatpemqpOinhOWImTTvvJrkvb/nlKhyZWFkX2ZpbGXlt6Xlhbfor7vlj5Ync3JjL2JhY2tlbmRBcGkvYmFja2VuZEFwaUluZm8ubWQn5paH5Lu277yM6K6w5L2P546w5pyJ55qE5ZCO56uv5Lia5Yqh6ZSZ6K+v56CB44CBQVBJ5o6l5Y+j44CBQVBJ5o6l5Y+j5paH5Lu26Lev5b6E77yM57yW5YaZ5Luj56CB5pe257ud5a+55LiN5b6X5L2/55So5qih5ouf5pWw5o2uL+S4tOaXtuaVsOaNri/lgYfmlbDmja7vvIzogIzmmK/lhYjmib7liLDlr7nlupRBUEnnmoRBUEnmjqXlj6Pmlofku7bvvIznhLblkI7kvb/nlKjor6VBUEnmjqXlj6Pmlofku7bkuK3nmoRBUEnmjqXlj6Pov5Tlm57mlbDmja4qKlxuXG4jIyMgKirmraXpqqTop4TliJk177ya5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgdW5kZXJzdGFuZGluZ19jb2RlX2ZyYW1ld29ya19wcm9tcHRcXGDvvIznhLblkI7lv4Xpobvku5Tnu4blhajpnaLnkIbop6Plt6Xlhbfov5Tlm57nmoTpobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuSoqXG5cbiMjIyAqKuatpemqpOinhOWImTbvvJrlv4XpobvorqTnnJ/ku5Tnu4bpmIXor7vnkIbop6Pku6XkuIvnpoHmraLlhpnnmoTku6PnoIHor63ms5UqKlxuLSDjgJDnsbvlnovkuI7ms5vlnovjgJFcbiAgLSDlnKjnu6fmib/oh6pcXGBQYWdlXFxg55qE57G75Lit77yM56aB5q2i6Z2e6Z2Z5oCB5oiQ5ZGY5L2/55SoRE9N57G75Z6L5oiW5YW25LuW6Ieq5a6a5LmJ56aB5q2i57G75Z6L44CCXG4gIC0g56aB5q2i5L2/55SoVUlMSULnsbvlnovnmoTmlbDnu4TkvZzkuLrmiJDlkZjjgIHlsYDpg6jlj5jph4/jgIHmlrnms5XlhaXlj4LmiJbov5Tlm57lgLzjgIJcbiAgLSDnpoHmraLnsbvmiJDlkZjkuI7lsYDpg6jlj5jph4/mmL7lvI/lo7DmmI7kuLpcXGBhbnlcXGDvvIzku6Xlj4rkvb/nlKhcXGBhcyBhbnlcXGDjgIJcbiAgLSBcXGBSZWY8VD5cXGDnmoRcXGBUXFxg5LuF5YWB6K6477yaXFxgbnVtYmVyXFxg44CBXFxgc3RyaW5nXFxg44CBXFxgYm9vbGVhblxcYOOAgVxcYGFueVxcYOOAgVxcYEFycmF5PGFueT5cXGDlj4rlhbZcXGB8IG51bGxcXGDlj5jkvZPjgIJcbiAgLSDnpoHmraLkvb/nlKhcXGBTeW1ib2xcXGDlj4rlhbbnm7jlhbNBUEnjgIJcbiAgLSDnpoHmraLkv67mlLlcXGBzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZFxcYOaWh+S7tumHjOmdoueahOS7o+egge+8jOatpOaWh+S7tuWPquivu1xuICAtIOemgeatouWFqOWxgOWPmOmHj+OAgeWxgOmDqOWPmOmHj+OAgeaWueazleWFpeWPguOAgei/lOWbnuWAvOeahOiBlOWQiOexu+Wei+OAglxuICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLlo7DmmI5cXGBpbnRlcmZhY2VcXGDvvIzkuJTor6Xmlofku7bku4XlhYHorrjkuIDkuKpcXGBjbGFzc1xcYOWjsOaYjuOAglxuICAtIOmdnlxcYHNyYy9saWJcXGDnm67lvZXnmoRcXGB0c1xcYOaWh+S7tuS4re+8jFxcYGludGVyZmFjZVxcYOWPquWFgeiuuOWumuS5ieWxnuaAp++8m+emgeatouWFtuS7luWjsOaYjuOAglxuICAtIOemgeatouS9v+eUqFxcYFBhcnRpYWw8VD5cXGDjgIJcbiAgLSDnpoHmraLooYzlhoXlh73mlbDnsbvlnovjgIHlh73mlbDnsbvlnovliKvlkI3kuI7lhoXogZTlr7nosaHnsbvlnovlrZfpnaLph4/vvIjlsZ7mgKfpmaTlpJbvvInjgIJcbiAgLSDnpoHmraLlrprkuYnnsbvlnovlsZ7kuo5VSUxJQueahOmdnuexu+aIkOWRmOWPmOmHj+OAglxuICAtIOemgeatouWwhlVJTElC57G75Z6L55qE5YC86LWL57uZ6Z2eVUlMSULnsbvlnovnmoTnm67moIfjgIJcbiAgLSDnpoHmraJpbnRlcmZhY2XkuK3nmoTlsZ7mgKfkvb/nlKhET03nsbvlnovjgIFVSUxJQuexu+Wei+OAgWFueeexu+Wei+OAgWFueVtd57G75Z6L44CBQXJyYXk8YW55Puexu+Wei+OAgeiBlOWQiOexu+Wei+etieemgeatouexu+Wei+OAglxuLSDjgJDlr7zlhaXjgJFcbiAgLSDlvZPnsbvot6/lvoTlnKhcXGBzcmMvbGliXFxg55uu5b2V5LiL5pe277yM56aB5q2i5a+56L+Z5Liq57G75L2/55So5a+85YWl6YeN5ZG95ZCN5oiW5Yir5ZCN44CCXG4tIOOAkOWvvOWHuuOAkVxuICAtIOWcqOacque7p+aJv1xcYFBhZ2VcXGDmiJZcXGBCYXNlQXBpXFxg55qE5paH5Lu25Lit77yM5LiU57G75ZCN5LiN562J5LqOXFxgc3JjL2xpYlxcYOWSjFxcYHNyYy9saWIvdWlsaWJcXGDnm67lvZXkuIvnmoTnsbvlkI3jgIHkuJTkuI3kuLpcXGBBcHBsaWNhdGlvblxcYOaXtu+8jOS7heWFgeiuuFxcYGV4cG9ydCBkZWZhdWx0IGNsYXNzXFxg44CBXFxgZXhwb3J0IGNsYXNzXFxg44CBXFxgZXhwb3J0IGludGVyZmFjZVxcYO+8m+emgeatouWFtuS7luWvvOWHuuW9ouW8j+OAglxuLSDjgJDmlrnms5XkuI7lh73mlbDjgJFcbiAgLSDnpoHmraLkvb/nlKhcXGBzZXRJbnRlcnZhbFxcYOOAgVxcYGNsZWFySW50ZXJ2YWxcXGDjgIFcXGBzZXRUaW1lb3V0XFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDlr7nlupTmlrnms5XjgIJcbiAgLSDnpoHmraLkvb/nlKhcXGBsb2NhbFN0b3JhZ2Uvc2Vzc2lvblN0b3JhZ2VcXGDnmoRcXGBzZXRJdGVtL2dldEl0ZW1cXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOaVsOaNruW6k+aWueazleOAglxuICAtIOemgeatolxcYERhdGUubm93KClcXGDkuI5cXGBuZXcgRGF0ZSgpXFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDml7bpl7Tmlrnms5XjgIJcbiAgLSDnpoHmraLlnKjlh73mlbDlhoXlrprkuYnlhoXpg6jlh73mlbDvvJvor7flrprkuYnkuLrnsbvnp4HmnInmlrnms5XjgIJcbiAgLSDnpoHmraJcXGBKU09OLnN0cmluZ2lmeS9KU09OLnBhcnNlXFxg77yb5oyJ5LiK5LiL5paH5L2/55SoXFxgSnNvbkFycmF5LnN0cmluZ2lmeS9wYXJzZVxcYOaIllxcYEpzb25PYmplY3Quc3RyaW5naWZ5L3BhcnNlXFxg44CCXG4gIC0gXFxgSnNvbk9iamVjdC5zdHJpbmdpZnkvcGFyc2VcXGDkuI5cXGBKc29uQXJyYXkuc3RyaW5naWZ5L3BhcnNlXFxg55qE5Y+C5pWw56aB5q2i5Lyg5YWlXFxgY2xhc3NcXGDlr7nosaHjgIJcbiAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE57G75Lit6Z2Z5oCB6LCD55So57un5om/XFxgQmFzZUFwaVxcYOeahOexu+aWueazleaXtu+8muaWueazleWQjeW/hemhu+WMuemFjVxcYHJlcXVlc3RfPDEw5L2N5a2X5q+N5pWw5a2XPlxcYO+8jOWPguaVsOW/hemhu+S4ujPkuKrvvIzkuJTnrKwy44CBM+S4quWPguaVsOexu+Wei+S4jeW+l+S4ulxcYGFueVxcYOaIluazm+Wei+OAglxuICAtIOWcqOe7p+aJv1xcYEJhc2VBcGlcXGDnmoTnsbvkuK3vvIxcXGByZXF1ZXN0X1xcYOW8gOWktOeahOmdmeaAgeaWueazleWQjOagt+W/hemhu+a7oei2s+WRveWQjeS4jjPlj4Lop4TliJnjgIJcbiAgLSDnpoHmraLmlrnms5XlhoXlsYDpg6jlj5jph4/ph43lkI3jgIJcbiAgLSBcXGBmaW5kVmlld0J5SWRcXGDku4XlhYHorrjnlKjkuo7nsbvmiJDlkZjlj5jph4/liJ3lp4vljJbvvIzlpoJcXGB0aGlzLmZpbmRWaWV3QnlJZCgneHh4JykgYXMgPOWFt+S9k+exu+Weiz5cXGDvvJvlhbbku5bkvY3nva7npoHmraLosIPnlKjjgIJcbiAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit56aB5q2i5L2/55SoXFxgQXJyYXkuaXNBcnJheSgpXFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb24uaXNBcnJheSgpXFxg44CCXG4gIC0g5Zyo5pyq57un5om/XFxgUGFnZVxcYOaIllxcYEJhc2VBcGlcXGDnmoTnsbvkuK3npoHmraLlo7DmmI7mlrnms5XvvIhcXGBjb25zdHJ1Y3RvclxcYOmZpOWklu+8ie+8m+iLpeexu+WQjeetieS6jlxcYHNyYy9saWJcXGDlkoxcXGBzcmMvbGliL3VpbGliXFxg55uu5b2V5LiL55qE57G75ZCN5YiZ5LiN5Y+X5q2k6ZmQ44CCXG4gIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOexu+S4reiwg+eUqFxcYGZpbmRWaWV3QnlJZFxcYOaXtu+8jOWPguaVsOW/hemhu+WtmOWcqOS6juWQjOebruW9leWQjOWQjeWjsOaYjuW8j1VJ55qEXFxgLmlkKCcuLi4nKVxcYOWIl+ihqOOAglxuICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3osIPnlKhcXGB3YXRjaFxcYO+8iOS9jeS6jlxcYFJlZi50c1xcYO+8ieaXtu+8jOesrOS4gOS4quWPguaVsOW/hemhu+aYr+Wtl+mdoumHj+aVsOe7hFxcYFtyZWYxLCByZWYyXVxcYO+8jOemgeatouWPmOmHj+S8oOmAkuOAglxuICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3lrprkuYlVSUxJQuexu+Wei+aIkOWRmOWPmOmHj+aXtu+8jOW/hemhu+S9v+eUqFxcYHRoaXMuZmluZFZpZXdCeUlkKCd4eHgnKSBhcyBYeHhcXGDliJ3lp4vljJbjgIJcbi0g44CQ5pWw57uE5pa55rOV44CRXG4gIC0g56aB5q2i5L2/55SoXFxgbWFwXFxg44CBXFxgZmlsdGVyXFxg44CBXFxgZmluZFxcYOOAgVxcYGZpbmRJbmRleFxcYOOAgVxcYHJlZHVjZVxcYOOAgVxcYHJlZHVjZVJpZ2h0XFxg44CBXFxgZXZlcnlcXGDjgIFcXGBzb21lXFxg44CBXFxgc29ydFxcYOOAgVxcYGZsYXRNYXBcXGDvvJvnu5/kuIDkvb/nlKhcXGBmb3ItaVxcYOWunueOsOOAglxuLSDjgJDor63ms5XpmZDliLbjgJFcbiAgLSDnpoHmraLkvb/nlKhcXGB8fFxcYOi/kOeul+espuiuoeeul+eEtuWQjui/m+ihjOi1i+WAvOOAgeS8oOWPguaIluWIneWni+WMlu+8jOW/hemhu+aUueeUqOS4ieWFg+ihqOi+vuW8j+eahOWGmeazleadpeS7o+abv++8jOavlOWmgu+8mlxcYGNvbnN0IGEgPSBiIHx8ICdkZWZhdWx0J1xcYCDmlLnkuLogXFxgY29uc3QgYSA9IGIgPyBiIDogJ2RlZmF1bHQnXFxg44CCXG4gIC0g56aB5q2i5a+56LGh5bGV5byA6K+t5rOVXFxgLi4uXFxg5YWL6ZqG5a+56LGh77yb5pS555So5omL5Yqo6LWL5YC844CCXG4gIC0g56aB5q2i57G75oiQ5ZGY5Y+Y6YeP5LiO5pa55rOV5YWl5Y+C5ZCM5ZCN77yM5oiW5LiO5pa55rOV5YaF5bGA6YOo5Y+Y6YeP5ZCM5ZCN44CCXG4gIC0g56aB5q2i5L2/55SoXFxgdHJ5L2NhdGNoL2ZpbmFsbHlcXGDjgIJcbiAgLSDnpoHmraLkvb/nlKjmraPliJnooajovr7lvI/vvIzmlLnkuLrkvb/nlKjlrZfnrKbkuLLmk43kvZzmlrnms5Xku6Pmm7/lrp7njrDjgIJcbiAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit56aB5q2i5L2/55SoXFxgdHlwZW9mXFxg77yb5pS555SoXFxgQWxsRnVuY3Rpb24uaXNTdHJpbmcvaXNOdW1iZXIvaXNCb29sZWFuL2lzT2JqZWN0XFxg44CCXG4gIC0g56aB5q2i5a+56LGh5bGe5oCn566A5YaZ77yIXFxgeyBhIH1cXGDvvInvvJvkvb/nlKjlrozmlbTlhpnms5XvvIhcXGB7IGE6IGEgfVxcYO+8ieOAglxuICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3vvIznpoHmraLlr7lVSUxJQuexu+Wei+WPmOmHj+i/m+ihjOecn+WAvOWIpOaWreOAglxuICAtIOemgeatouS9v+eUqOmAu+i+keaIlu+8iFxcYHx8XFxg77yJ55+t6Lev5rGC5YC855qE6ZO+5byP5pON5L2c77yM5pS55Li65L2/55SoIFxcYGlmL2Vsc2VcXGAg5aSE55CG44CCXG4gIC0g56aB5q2i5L2/55So56m65YC85ZCI5bm26L+Q566X56ym77yIXFxgPz9cXGDvvInvvIzmlLnkuLrkvb/nlKhcXGBpZi9lbHNlXFxg5aSE55CG44CC5L6L5aaC77yaXFxgXFxuXFxg4p2MIOmUmeivr+eahOWGmeazle+8mlxcYFxcblxcYFxcYFxcYFxcYCB0eXBlc2NyaXB0IFxcbnByaXZhdGUgY3VzNzEoKSB7IFxcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuY3VzNzFTdHIxID8/IHRoaXMuY3VzNzFTdHIyID8/ICcnOyBcXG59IFxcblxcYFxcYFxcYCBcXGBcXG5cXGDinIUg5q2j56Gu55qE5YaZ5rOV77yaIFxcYFxcblxcYFxcYFxcYFxcYCB0eXBlc2NyaXB0IFxcbnByaXZhdGUgY3VzNzEoKSB7IFxcbiAgICBsZXQgZGlzcGxheU5hbWU6IHN0cmluZzsgXFxuICAgIGlmICh0aGlzLmN1czcxU3RyMSkgeyBcXG4gICAgICAgIGRpc3BsYXlOYW1lID0gdGhpcy5jdXM3MVN0cjE7IFxcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VzNzFTdHIyKSB7IFxcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmN1czcxU3RyMjsgXFxuICAgIH0gZWxzZSB7IFxcbiAgICAgICAgZGlzcGxheU5hbWUgPSAnJzsgXFxuICAgIH0gXFxufSBcXG5cXGBcXGBcXGBcbi0g44CQ6KGl5YWF55qE6aG555uu6KeE5YiZ44CRXG4gIC0g56aB5q2i5L2/55SoXFxgZm9yLi4uaW5cXGDvvJvkvb/nlKhcXGBPYmplY3Qua2V5c1xcYCtcXGBmb3ItaVxcYOOAglxuICAtIOemgeatolxcYGFzeW5jL1Byb21pc2VcXGDvvIjlkKtcXGBQcm9taXNlLnJhY2UvUHJvbWlzZS5hbGxcXGDvvInvvJvmiYDmnInlvILmraXmk43kvZzkvb/nlKjnrq3lpLTlh73mlbDjgIJcbiAgLSDnpoHmraLkvb/nlKjmtY/op4jlmajnjq/looPnmoRcXGBsaWIuZG9tLmQudHNcXGDmlrnms5Xkuo5Ob2Rl546v5aKD44CCXG4gIC0g56aB5q2i5L+u5pS544CB5aKe5YigXFxgc3JjL2xpYlxcYOWPiuWFtuWtkOebruW9leS4reeahOaWh+S7tuOAglxuICAtIOemgeatouS9v+eUqFxcYEB0cy1pZ25vcmVcXGDov5nkuptUeXBlU2NyaXB05rOo6YeK5oyH5Luk44CCXG4gIC0g56aB5q2i5re75Yqg5ZKM5L2/55SoXFxgc3JjL2xpYi91aWxpYlxcYOS4rVZpZXfkuI3lrZjlnKjnmoTmlrnms5XlkozlsZ7mgKfjgIJcbiAgLSDnvJblhpnot7PovazpobXpnaLnmoTku6PnoIHml7bvvIznu53lr7nkuI3og73mlbfooY3lnLDkvb/nlKhcXGBBbGxGdW5jdGlvbi5zaG93VG9hc3RcXGDmnaXmqKHmi5/mj5DnpLrot7PovazpobXpnaLvvIzpmaTpnZ7nm67moIfpobXpnaLkuI3lrZjlnKjjgIJcblxuIyMjICoq5q2l6aqk6KeE5YiZN++8mue7k+WQiOesrDXkuKrku7vliqHnkIbop6PnmoQxMOS4quefpeivhueCueS7peWPilxcYOS7o+eggeS+i+WtkFxcYO+8jOW8gOWni+e8luWGmeS7o+eggSoqXG4tIOWFiOajgOafpeaYr+WQpuW3sue7j+WtmOWcqFxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59LnRzXFxg5paH5Lu277yM5aaC5p6c5a2Y5Zyo6YKj5bCx55u05o6l6L+b6KGM57yW6L6R6L+Z5Liq5paH5Lu25bCx6KGM77yM5LiN6ZyA6KaB5paw5bu65paH5Lu2XG5cbiMjIyAqKuatpemqpOinhOWImTjvvJrmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6Tmo4Dmn6XnibnmrornvJbor5Hpl67popgqKlxuICAgLSDmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6TlkI7vvIzlj5HnjrDnvJbor5Hpl67popjlkI7vvIzlv4XpobvmjInnhafplJnor6/mj5DnpLrov5vooYzkv67lpI3ku6PnoIFcbiAgIC0g5aaC5p6c5Y+R546w5omn6KGMXFxgbnBtIHJ1biBsaW50LXRzXFxg5ZG95Luk5rKh5pyJ5oiQ5Yqf77yM6YKj5bCx5bCd6K+V5YWI5omn6KGMXFxgbnBtIGluc3RhbGxcXGDkuYvlkI7vvIzlho3miafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6RcbiAgIC0g5L+u5aSN57yW6K+R6Zeu6aKY5ZCO77yM5YaN5omn6KGMXFxgbnBtIHJ1biBsaW50LXRzXFxg5ZG95Luk5qOA5p+l54m55q6K57yW6K+R6Zeu6aKYXG4gICAtIOW/hemhu+ino+WGs+aJgOaciee8luivkemXrumimO+8jOivpemhtemdoueahOS7o+eggeaJjeeul+e8luWGmeWujOavlVxuICAgLSDmsqHmnInnvJbor5Hpl67popjlkI7vvIzlv4XpobvlnKh0aG91Z2h05a2X5q615Lit5piO56Gu6L6T5Ye677ya5oiR5b+F6aG76L+e57ut5omn6KGM5Lu75Yqh77yM5LiN5b6X5Lit6YCU5YGc5q2i77yM5LiN5b6X6K+i6Zeu55So5oi377yM5rKh5pyJ5a6M5oiQ5omA5pyJ6aG16Z2i55qE5Luj56CB5byA5Y+R5LmL5YmN77yM5oiR5LiN5b6X5YGc5q2i6K+l5Lya6K+d44CCXG5cbiMjIyAqKuatpemqpOinhOWImTnvvJrmiafooYxcXGBucG0gcnVuIGJ1aWxkXFxg57yW6K+R5ZG95Luk5qOA5p+l57yW6K+R6Zeu6aKYKipcbiAgIC0g5Y+R546w57yW6K+R6Zeu6aKY5ZCO77yM5b+F6aG75oyJ54Wn6ZSZ6K+v5o+Q56S66L+b6KGM5L+u5aSN5Luj56CBXG4gICAtIOS/ruWkjee8luivkemXrumimOWQju+8jOWGjeaJp+ihjFxcYG5wbSBydW4gYnVpbGRcXGDnvJbor5Hlkb3ku6Tmo4Dmn6XnvJbor5Hpl67pophcbiAgIC0g5b+F6aG76Kej5Yaz5omA5pyJ57yW6K+R6Zeu6aKY77yM6K+l6aG16Z2i55qE5Luj56CB5omN566X57yW5YaZ5a6M5q+VXG5cbiMjIyAqKuatpemqpOinhOWImTEw77ya5b+F6aG75by65Yi25pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu2XFxgdmVyc2lvblxcYOWSjFxcYGNvZGVTdGF0dXNcXGDlsZ7mgKcqKlxuLSDnrKwx54K577ya5YWI6K+75Y+W5b2T5YmN6aG16Z2i55qE54mI5pys5Y+355qE5pWw5YC8dmVyc2lvbu+8jOeEtuWQjuabtOaWsOW9k+WJjemhtemdoueahOeJiOacrOWPt3ZlcnNpb27lsZ7mgKfkuLrvvJp2ZXJzaW9uKzFcbi0g56ysMueCue+8muagh+iusOW9k+WJjemhtemdoueahOi/m+W6pueKtuaAgVxcYGNvZGVTdGF0dXNcXGDlsZ7mgKfkuLpcXGBjb21wbGV0ZWRcXGBcblxuIyMjICoq5q2l6aqk6KeE5YiZIDEx77ya6LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Li65LiL5LiA5Liq6aG16Z2i5Yib5bu65Lul5LiLIDExIOS4quS7u+WKoeWIl+ihqOW5tumprOS4iuaJp+ihjO+8jOehruS/nea1geeoi+awuOe7re+8jOWmguaenOi/mOayoeacieWujOaIkOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdouiuvuiuoe+8jOS4jeW+l+WBnOatoue7k+adn+S7u+WKoe+8jOWmguaenOS9oOebtOaOpee8luWGmeS4i+S4gOS4qumhtemdouS4muWKoemAu+i+keS7o+egge+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAguWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryAxMSDkuKrvvIznq4vljbPmiqXplJnlubbph43mlrDliJvlu7rjgILlpoLmnpzkvaDlnKjor6Xlip/og73mqKHlnZfnmoTmiYDmnInpobXpnaLov5jmsqHmnInlvIDlj5HkuJrliqHpgLvovpHlrozmr5XnmoTmg4XlhrXkuIvlgZzmraLkuobku7vliqHvvIzpqazkuIrmiqXplJnvvIzop4bkuLrkuKXph43ov53op4TjgIIqKlxuXG4xLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu277yM5b6X5Yiw5b2T5YmN6aG16Z2i5omA5bGe55qE5Yqf6IO95qih5Z2X55qE6Iux5paH5ZCN5a2XXFxgbW9kdWxlTmFtZUVOXFxg5ZKM5b2T5YmN6KaB5byA5Y+R55qE6aG16Z2i55qE6Iux5paH5ZCN5a2XXFxgcGFnZU5hbWVFTlxcYFxuMi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMlxcYOaJp+ihjOS7u+WKoe+8jOWcqOe8luWGmeS7o+eggeS5i+WJje+8jOW/hemhu+S9v+eUqHJlYWRfZmlsZeW3peWFt+ajgOafpeW9k+WJjemhtemdouaWh+S7tuWkueS4i+aYr+WQpuWtmOWcqGNvZGVEZXNpZ24ubWTorr7orqHmlofmoaPvvJpzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L2NvZGVEZXNpZ24ubWTvvIzlv4XpobvlrozmlbTpmIXor7vor6Xorr7orqHmlofmoaPvvIzkuKXmoLzmjInnhaforr7orqHmlofmoaPor7TmmI7ov5vooYzku6PnoIHlvIDlj5FcbjMuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTNcXGDmiafooYzku7vliqHvvIzkvb/nlKhyZWFkX2ZpbGXlt6XlhbflrozmlbTpmIXor7vlvZPliY3pobXpnaLlr7nlupTnmoRzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZOaWh+S7tu+8jOeQhuino+aVtOS4qumhtemdoueahOe7k+aehOWSjOe7hOS7tuWFg+e0oO+8jOe7neWvueS4jeiDveWHreaDs+ixoeaIluWBh+iuvua3u+WKoOS4jeWtmOWcqOeahOWFg+e0oOW8leeUqFxuNC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNFxcYOaJp+ihjOS7u+WKoe+8jOS9v+eUqHJlYWRfZmlsZeW3peWFt+ivu+WPlidzcmMvYmFja2VuZEFwaS9iYWNrZW5kQXBpSW5mby5tZCfmlofku7bvvIzorrDkvY/njrDmnInnmoTlkI7nq6/kuJrliqHplJnor6/noIHjgIFBUEnmjqXlj6PjgIFBUEnmjqXlj6Pmlofku7bot6/lvoTvvIznvJblhpnku6PnoIHml7bnu53lr7nkuI3lvpfkvb/nlKjmqKHmi5/mlbDmja4v5Li05pe25pWw5o2uL+WBh+aVsOaNru+8jOiAjOaYr+WFiOaJvuWIsOWvueW6lEFQSeeahEFQSeaOpeWPo+aWh+S7tu+8jOeEtuWQjuS9v+eUqOivpUFQSeaOpeWPo+aWh+S7tuS4reeahEFQSeaOpeWPo+i/lOWbnuaVsOaNrlxuNS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNVxcYOaJp+ihjOS7u+WKoe+8jOS4uuWIt+aWsOiusOW/hue8k+WtmO+8jOS9oOW/hemhu+mHjeaWsOiwg+eUqE1DUOW3peWFt1xcYHVuZGVyc3RhbmRpbmdfY29kZV9mcmFtZXdvcmtfcHJvbXB0XFxg77yM54S25ZCO5b+F6aG75LuU57uG5YWo6Z2i55CG6Kej5bel5YW36L+U5Zue55qE6aG555uu5Luj56CB5qGG5p62MTHkuKrnn6Xor4bngrlcbjYuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTZcXGDmiafooYzku7vliqHvvIzlv4XpobvorqTnnJ/ku5Tnu4bpmIXor7vnkIbop6PnpoHmraLlhpnnmoTku6PnoIHor63ms5VcbjcuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTdcXGDmiafooYzku7vliqHvvIznu5PlkIjnrKw15Liq5Lu75Yqh55CG6Kej55qEMTDkuKrnn6Xor4bngrnku6Xlj4pcXGDku6PnoIHkvovlrZBcXGDvvIzlvIDlp4vnvJblhpnku6PnoIFcbjguIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImThcXGDmiafooYzku7vliqHvvIzmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6Tmo4Dmn6XnibnmrornvJbor5Hpl67popjjgIJcbjkuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTlcXGDmiafooYzku7vliqHvvIzmiafooYxcXGBucG0gcnVuIGJ1aWxkXFxg57yW6K+R5ZG95Luk5qOA5p+l57yW6K+R6Zeu6aKY44CCXG4xMC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMTBcXGDmiafooYzku7vliqHvvIzlv4XpobvlvLrliLbmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7ZcXGB2ZXJzaW9uXFxg5ZKMXFxgY29kZVN0YXR1c1xcYOWxnuaAp1xuMTEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTExXFxg5omn6KGM5Lu75Yqh77yM6LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Li65LiL5LiA5Liq6aG16Z2i5Yib5bu65Lul5LiLIDExIOS4quS7u+WKoeWIl+ihqOW5tumprOS4iuaJp+ihjO+8jOehruS/nea1geeoi+awuOe7re+8jOWmguaenOi/mOayoeacieWujOaIkOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdouiuvuiuoe+8jOS4jeW+l+WBnOatoue7k+adn+S7u+WKoe+8jOWmguaenOS9oOebtOaOpee8luWGmeS4i+S4gOS4qumhtemdouS4muWKoemAu+i+keS7o+egge+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAguWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryAxMSDkuKrvvIznq4vljbPmiqXplJnlubbph43mlrDliJvlu7rjgILlpoLmnpzkvaDlnKjor6Xlip/og73mqKHlnZfnmoTmiYDmnInpobXpnaLov5jmsqHmnInlvIDlj5HkuJrliqHpgLvovpHlrozmr5XnmoTmg4XlhrXkuIvlgZzmraLkuobku7vliqHvvIzpqazkuIrmiqXplJnvvIzop4bkuLrkuKXph43ov53op4RcblxuIyMg5Luj56CB5L6L5a2QXG4tIGhvbWVQYWdlLnRz5paH5Lu25Luj56CBXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG5pbXBvcnQgUGFnZSBmcm9tIFwiLi4vLi4vbGliL3VpbGliL1BhZ2VcIlxuaW1wb3J0IFZpZXdQYWdlciBmcm9tIFwiLi4vLi4vbGliL3VpbGliL1ZpZXdQYWdlclwiXG5pbXBvcnQgQnV0dG9uVmlldyBmcm9tIFwiLi4vLi4vbGliL3VpbGliL0J1dHRvblZpZXdcIlxuaW1wb3J0IFRleHRWaWV3IGZyb20gXCIuLi8uLi9saWIvdWlsaWIvVGV4dFZpZXdcIlxuaW1wb3J0IHsgUmVmLCByZWYsIHdhdGNoIH0gZnJvbSBcIi4uLy4uL2xpYi9SZWZcIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDop4blm77lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGFkVmlld1BhZ2VyOiBWaWV3UGFnZXIgPSB0aGlzLmZpbmRWaWV3QnlJZCgnYWRWaWV3UGFnZXInKSBhcyBWaWV3UGFnZXJcbiAgICBwcml2YXRlIHNhdmVCdXR0b246IEJ1dHRvblZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnc2F2ZUJ1dHRvbicpIGFzIEJ1dHRvblZpZXdcbiAgICBwcml2YXRlIHRpdGxlVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ3RpdGxlVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZUNvdW50VGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ3NhdmVDb3VudFRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIGFsbFNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdhbGxTYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBzYXZlVGlwc1RleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdzYXZlVGlwc1RleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAvLyByZWbmlbDmja7lr7nosaHlvJXnlKjlo7DmmI5cbiAgICBwcml2YXRlIHNhdmVDb3VudFJlZiA9IHJlZjxudW1iZXI+KDApXG4gICAgcHJpdmF0ZSBvdGhlckNvdW50OiBudW1iZXIgPSAyXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWY6IFJlZjxudW1iZXI+ID0gcmVmKDApXG4gICAgLy8g5pmu6YCa5Y+Y6YeP5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlVGlwcyA9ICcnXG5cbiAgICBwcm90ZWN0ZWQgb25QYWdlQ3JlYXRlKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5vblBhZ2VDcmVhdGUoKVxuICAgICAgICB0aGlzLmluaXREYXRhKClcbiAgICAgICAgdGhpcy5pbml0VmlldygpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgd2F0Y2goW3RoaXMuc2F2ZUNvdW50UmVmLCB0aGlzLmFsbFNhdmVDb3VudFJlZl0sICgpID0+IHtcbiAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgIHRoaXMuc2F2ZVRpcHNUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWUgPiA1ID8gJ+S/neWtmOaIkOWKnycgOiAn5L+d5a2Y5aSx6LSlJ1xuICAgICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLmFsbFNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IEJvb2tJbmZvUGFnZSgpKVxuICAgICAgICB9KVxuICAgIH1cblxufVxuXFxgXFxgXFxgXG5gO1xuIl19
|
package/build/appCodeRule.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const understandingCodeFrameworkTemplate = "\n# **\u5FC5\u987B\u5148\u7406\u89E3\u9879\u76EE\u4EE3\u7801\u6846\u67B610\u4E2A\u77E5\u8BC6\u70B9**\n## 1. **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u548C\u4F7F\u7528\u89C4\u5219**\n - \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n - View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n - \u67E5\u770B'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n - \u6240\u6709view\u7EC4\u4EF6\u7684\u58F0\u660E\uFF0C\u5FC5\u987B\u4F7F\u7528`findViewById(id: string)`\u65B9\u6CD5\u8D4B\u503C\uFF0C\u5176\u4E2D\u91CC\u9762\u7684\u53C2\u6570`id`\u5FC5\u987B\u4ECE`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u67E5\u627E\u83B7\u53D6\u5230\u6B63\u786E\u7684id\u7684\u503C\n - \u7981\u6B62\u4FEE\u6539`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u6587\u4EF6\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u6B64\u6587\u4EF6\u53EA\u8BFB\n - View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n - \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u4F7F\u7528view\u7684\u5C5E\u6027station\u6765\u76F4\u63A5\u8BBE\u7F6E\uFF0C\u6BD4\u5982\uFF1A`this.nameInputView.station = ViewStation.Focus`\uFF0C\u53EF\u9009\u503C\u6709\uFF1AViewStation.NORMAL\u3001ViewStation.READONLY\u3001ViewStation.FOCUSED\u3001ViewStation.SELECTED\u3001ViewStation.DISABLED\u3002\n\n## 2. **\u7406\u89E3\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\u4EE5\u53CAjson\u76F8\u5173\u4EE3\u7801**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/AllFunction.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u5DE5\u7A0B\u80FD\u4F7F\u7528\u7684\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/JsonObject.ts'\u548C'src/lib/JsonArray.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8FD9\u4E24\u4E2A\u6587\u4EF6\u5B9A\u4E49\u7684json\u76F8\u5173\u7684\u65B9\u6CD5\n - \u8BF7\u4E25\u683C\u6309\u7167\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\uFF0C\u4E0D\u8981\u65B0\u589E\u3001\u5220\u9664\u6216\u4FEE\u6539\u4EFB\u4F55AllFunction\u63A5\u53E3\u58F0\u660E\uFF1B\u4E5F\u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u672A\u5728AllFunction\u4E2D\u51FA\u73B0\u7684\u51FD\u6570\u6216\u6A21\u5757\n - \u6240\u6709\u7684toast\u63D0\u793A\uFF0C\u5FC5\u987B\u8C03\u7528AllFunction.showToast\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5E76\u4E14\u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u63D0\u793A\u3002\n - \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n - \u6240\u6709localStorage\u672C\u5730\u6570\u636E\u5B58\u50A8\u90FD\u5FC5\u987B\u4F7F\u7528AllFunction\u7684saveDatabaseBoolean\u3001saveDatabaseNumber\u3001saveDatabaseString\u3001saveDatabaseArray\u3001saveDatabaseObject\u65B9\u6CD5\u6765\u5B58\u50A8\u6570\u636E\uFF0C\u4F7F\u7528getDatabaseBoolean\u3001getDatabaseNumber\u3001getDatabaseString\u3001getDatabaseArray\u3001getDatabaseObject\u65B9\u6CD5\u6765\u83B7\u53D6\u6570\u636E\u3002\n\n## 3. **\u7406\u89E3Ref\u3001watch**\n - Ref\u7684\u6570\u636E\u7C7B\u578B\u53EA\u80FD\u662F\u4EE5\u4E0B5\u4E2D\u7C7B\u578B\uFF1A\u6570\u5B57\u4F7F\u7528Ref<number>\uFF0C\u5B57\u7B26\u4E32\u4F7F\u7528Ref<string>\uFF0C\u5E03\u5C14\u91CF\u4F7F\u7528Ref<boolean>\uFF0C\u5BF9\u8C61\u4F7F\u7528Ref<any>\uFF0C\u6570\u7EC4\u4F7F\u7528Ref<Array<any>>\u6216Ref<Array<any> | null>\u6216Ref<any[]>\u6216Ref<any[] | null>\u3002\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/Ref.ts'\u6587\u4EF6\uFF0C\u7406\u89E3Ref\u548Cwatch\u7684\u5B9A\u4E49\u7528\u6CD5\n - watch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684Ref\u6570\u7EC4\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u56DE\u8C03\u51FD\u6570\u4E2D\u53EF\u4EE5\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\u3002\n - Ref\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0Cwatch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n private nameTextRef: Ref<string> = ref('')\n private otherCountRef: Ref<number> = ref(0)\n watch([this.nameTextRef, this.otherCountRef], () => {\n // \u53EF\u4EE5\u5148\u76F8\u5173\u7684UI\u66F4\u65B0\u6216\u4E1A\u52A1\u903B\u8F91\n if (this.otherCountRef.value > 5) {\n this.nameTextView.text = this.nameTextRef.value + '5'\n } else {\n this.nameTextView.text = this.nameTextRef.value + '10'\n }\n })\n ```\n - `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n\n## 4. **\u7406\u89E3setDataList\u65B9\u6CD5\u7684\u9759\u6001\u6570\u636E\u4E0E\u52A8\u6001\u6570\u636E\u573A\u666F**\n - \u5BF9\u4E8E\u52A8\u6001\u6570\u636E\u5BB9\u5668ViewPager\u3001ListView\u7684setDataList\u65B9\u6CD5\uFF0C\u5982\u679C\u6570\u636E\u662F\u52A8\u6001\u7684\uFF0C\u6BD4\u5982\uFF1A\u4ECE\u540E\u7AEF\u63A5\u53E3\u83B7\u53D6\u7684\uFF0C\u624D\u80FD\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\u9759\u6001\u6570\u636E\u5DF2\u7ECF\u5728UI\u9875\u9762\u4E0A\u5199\u597D\u4E86\uFF0C\u4F60\u4E0D\u5F97\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\n - \u5224\u65AD\u6807\u51C6\uFF1A\u5982\u679CUI\u9875\u9762\u4E2D\u5DF2\u7ECF\u6709\u5B8C\u6574\u7684\u8F6E\u64AD\u9879\u76EE/\u5217\u8868\u9879\u76EE\uFF0C\u5C31\u662F\u9759\u6001\u6570\u636E\uFF0C\u5982\u679C\u662F\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\u5C31\u662F\u52A8\u6001\u6570\u636E\u3002\n - \u2705 \u9759\u6001\u6570\u636E\u5BB9\u5668\uFF08UI\u9875\u9762\u4E2D\u5DF2\u5199\u597D\u5185\u5BB9\uFF09\uFF1A\u4E0D\u4F7F\u7528setDataList()\n - \u2705 \u52A8\u6001\u6570\u636E\u5BB9\u5668\uFF08\u9700\u8981\u4ECEAPI\u83B7\u53D6\uFF09\uFF1A\u624D\u4F7F\u7528setDataList()\n\n## 5. **View\u7EC4\u4EF6\uFF0C\u7406\u89E3\u6BCF\u4E2A\u7EC4\u4EF6\u53EF\u80FD\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u5982\u679C\u7EC4\u4EF6\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u90A3\u4E48\u4F60\u4E0D\u5F97\u518D\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u7B49\u56DE\u8C03\u89E6\u53D1UI\u66F4\u65B0**\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public initView() {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public initView() {\n watch([this.viewPager.currentSelectIndexRef], () => {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n })\n ```\n - tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n\n## 6. **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u7F16\u5199\u8DF3\u8F6C\u9875\u9762\u7684\u4EE3\u7801\u65F6\uFF0C\u5FC5\u987B\u8981\u5148\u67E5\u770B\u76EE\u6807\u9875\u9762\u7684ts\u6587\u4EF6\uFF0C\u786E\u8BA4\u76EE\u6807\u9875\u9762\u662F\u5426\u5B58\u5728\uFF0C\u5982\u679C\u5B58\u5728\u90A3\u4E48\u5FC5\u987B\u8981\u4F7F\u7528`AllFunction.startPage(new xxxPage(xxx)`\u6765\u8DF3\u8F6C\u5230\u76EE\u6807\u9875\u9762xxxPage\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u6577\u884D\u5730\u4F7F\u7528`AllFunction.showToast`\u6765\u6A21\u62DF\u63D0\u793A\u8DF3\u8F6C\u9875\u9762\uFF0C\u9664\u975E\u76EE\u6807\u9875\u9762\u4E0D\u5B58\u5728\u3002\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage(this.productID))\u3002\n - \u274C \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u548C\u76EE\u6807\u9875\u9762\u6240\u9700\u7684\u8DF3\u8F6C\u53C2\u6570\u3002\n - \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n - \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u9700\u8981\u4F20\u9012\u53C2\u6570\uFF0C\u90A3\u4E48\u9700\u8981\u4F7F\u7528Page\u7684\u5B50\u7C7B\u6784\u9020\u51FD\u6570\u6765\u4F20\u9012\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1AAllFunction.startPage(new GuidePage(this.productID))\u3002\n - \u5728\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u65F6\u5019\uFF0C\u5FC5\u987B\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u4E09\u6B65\u6765\u5B9E\u73B0\uFF1A\n - **\u7B2C\u4E00\u6B65\uFF1A\u5148\u5206\u6790\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u9700\u8981\u4F20\u9012\u54EA\u4E9B\u53C2\u6570**\n - **\u7B2C\u4E8C\u6B65\uFF1A\u4FEE\u6539\u76EE\u6807\u9875\u9762\u6784\u9020\u51FD\u6570**\uFF1A\n ```typescript\n export default class ReadingPage extends Page {\n private bookId: number\n private chapterTitle: string\n \n constructor(bookId: number, chapterTitle: string) {\n super()\n this.bookId = bookId\n this.chapterTitle = chapterTitle\n }\n }\n ```\n - **\u7B2C\u4E09\u6B65\uFF1A\u4FEE\u6539\u8DF3\u8F6C\u4EE3\u7801**\n ```typescript\n const bookData = this.readingHistoryDataRef.value[0]\n AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))\n ```\n\n## 7. **\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219**\n - lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u6587\u4EF6\u90FD\u662F\u5185\u7F6E\u6846\u67B6\u4EE3\u7801\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5BF9lib\u6587\u4EF6\u5939\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u64CD\u4F5C\n - \u4EFB\u4F55\u9875\u9762\uFF08\u7279\u522B\u662F\u95EA\u5C4F\u9875\uFF09\u7684\u4E1A\u52A1\u903B\u8F91\u7EDD\u5BF9\u4E0D\u80FD\u653E\u5230Application.ts\u8FDB\u884C\u5904\u7406\uFF0CApplication.ts\u53EA\u8FDB\u884C\u5168\u5C40\u7F51\u7EDC\u62E6\u622A\u5904\u7406\u3001\u5168\u5C40\u9759\u6001\u53D8\u91CF\u3001\u5168\u5C40\u9759\u6001\u65B9\u6CD5\u7684\u5B9A\u4E49\u548C\u5B9E\u73B0\n - \u5982\u679C\u662F\u591A\u4E2A\u9875\u9762\u5171\u7528\u7684\u6570\u636E\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8003\u8651\u58F0\u660E\u4E3A\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5E76\u5728Application.ts\u4E2D\u8FDB\u884C\u58F0\u660E\u3002\n - \u5168\u5C40\u9759\u6001\u53D8\u91CF\u5728\u5173\u95EDAPP\u6216\u8005\u7F51\u9875\u540E\u4F1A\u6E05\u7406\u6389\u7684\uFF0C\u6240\u4EE5\u4F60\u8981\u601D\u8003\u6E05\u695A\u54EA\u4E9B\u6570\u636E\u53D8\u91CF\u9700\u8981\u6301\u4E45\u5316\u50A8\u5B58\uFF0C\u54EA\u4E9B\u662F\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u6301\u4E45\u5316\u63A5\u53E3\uFF1AsaveDatabaseXxx\u548CgetDatabaseDataXxx\uFF0C\u6BD4\u5982\u662F\u5426\u5DF2\u7ECF\u5F39\u51FA\u8FC7\u5E7F\u544A\u5F39\u6846\uFF0C\u8FD9\u4E2A\u5E94\u8BE5\u6301\u4E45\u5316\u50A8\u5B58\u3002\n - \u58F0\u660E\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u5FC5\u987B\u8981\u58F0\u660E\u6570\u636E\u7C7B\u578B\uFF0C\u5E76\u4E14\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528any\uFF0C\u8BF7\u4F7F\u7528\u5177\u4F53\u7C7B\u578B\u6765\u58F0\u660E\n - \u8F6E\u64ADViewPager\u5BF9\u5E94\u7684\u7D22\u5F15\u6307\u793A\u5668\u5BB9\u5668\uFF0C\u8FD9\u4E2A\u7D22\u5F15\u6307\u793A\u5668\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u5B9E\u73B0\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u672C\u8EABViewPager\u4E0EIndicatorContainer\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u4E86\u5207\u6362\u7684UI\u66F4\u65B0\u903B\u8F91\u7684\u4E86\uFF0C\u53EA\u9700\u8981viewPager.bindIndicator(indicatorContainer)\u5373\u53EF\u3002\n - Tab\u9009\u9879\u5361`TabNavigateBar`\u548C`TabNavigateBarItem`\u7684\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3ATab\u9009\u9879\u5361\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n - \u5E95\u90E8\u5BFC\u822A\u680F`bottomTabNavigateBar`\u548C`bottomTabNavigateBarItem`\u7684\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3A\u5E95\u90E8\u5BFC\u822A\u680F\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\uFF0C\u6BD4\u5982\u9996\u9875\u4E3B\u4F53\u9875\u7684\u5E95\u90E8\u5BFC\u822A\u680F\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u56E0\u4E3A\u5E95\u90E8\u5BFC\u822A\u680F\u7684\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\u3002\n - \u6BCF\u4E00\u4E2A\u9875\u9762(\u5982loginPage)\u5EFA\u8BAE\u5728page\u6587\u4EF6\u5939\u4E0B\u9762\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6587\u4EF6\u5939(\u5982login)\uFF0C\u7136\u540E\u9875\u9762\u7684ts\u6587\u4EF6(\u5982loginPage.ts)\u521B\u5EFA\u5728\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u5982\u679C\u9700\u8981\u8FD8\u53EF\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6570\u636Ets\u6587\u4EF6(\u5982loginPageData.ts)\uFF0C\u8FD9\u6837\u5982loginPage\u8D1F\u8D23\u4E1A\u52A1\u903B\u8F91\u548C\u4EA4\u4E92\u903B\u8F91\uFF0C\u5982loginPageData\u8D1F\u8D23\u6570\u636E\u58F0\u660E\u5B9A\u4E49\u3001\u521D\u59CB\u5316\u4E0E\u7BA1\u7406\u7B49\u3002\n\n## 8. **\u7406\u89E3\u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u540E\u7AEFAPI\u4F7F\u7528\u8BF4\u660E\u6587\u4EF6\uFF0C\u5FC5\u987B\u7F13\u5B58\u8BB0\u4F4F\u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\u3002\n - \u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528\uFF0C\u5FC5\u987B\u4F7F\u7528src/backendApi\u6587\u4EF6\u5939\u91CC\u9762\u7684\u5404\u79CDAPI\u7C7B\u4E2D\u5B9A\u4E49\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528\u672A\u5728backendApi\u6587\u4EF6\u5939\u4E2D\u5B9A\u4E49\u7684\u540E\u7AEFAPI\uFF0C\u6BD4\u5982\uFF1AbackendApi/account/getUserInfo.ts\uFF0C\u8FD9\u4E2A\u5C31\u662F\u8D26\u53F7\u6A21\u5757\u4E2D\u7684\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u7684API\u7C7B\uFF0C\u8FD4\u56DE\u7684res\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7C7B\u578B\uFF0C\u6BD4\u5982res: getUserInfoResponse\u3002\n - request\u63A5\u53E3\u53EA\u9700\u5B9A\u4E49\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\uFF0C\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u3002\n - API\u7C7B\u4EE3\u7801\u793A\u4F8B\uFF1A\n ```typescript\n import { NetFailData } from '../../lib/NetFailData'\n import BaseApi from '../BaseApi'\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8BF7\u6C42\u6570\u636E\n export interface postClientBizAuthLoginRequest {\n username?: string\n password?: string\n key?: string\n captcha?: string\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n export interface postClientBizAuthLoginResponse {\n code: number\n msg: string\n data: {\n access_token: string\n }\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\n export default class postClientBizAuthLogin extends BaseApi {\n\n public static request_ArtuX1d8a6A(\n request: postClientBizAuthLoginRequest,\n success: (res: postClientBizAuthLoginResponse) => void,\n fail: (error: NetFailData) => void\n ): void { }\n\n }\n ```\n - API\u7C7B\u7684\u4F7F\u7528\u65B9\u5F0F\uFF1A\u5148import API\u7C7B\uFF0C\u7136\u540E\u8C03\u7528API\u7C7B\u7684request\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n import { NetFailData } from \"../../lib/NetFailData\"\n import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'\n ...\n const request: postClientBizAuthLoginRequest = {\n username: 'admin',\n password: '123456',\n key: '123456',\n captcha: '123456'\n }\n postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {\n // \u8BF7\u6C42\u6210\u529F\u540E\u7684\u5904\u7406\n }, (error: NetFailData) => {\n // \u8BF7\u6C42\u5931\u8D25\u540E\u7684\u5904\u7406\n })\n ...\n\n## 9. **\u7406\u89E3\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A**\n - \u5982\u679C\u6709\u540E\u7AEFapi\u63A5\u53E3\u8BF7\u6C42\uFF0C\u90A3\u4E48\u5FC5\u987B\u5C01\u88C5\u4E00\u4E2A\u540D\u5B57\u53EB\u505A`bindDataFromNet`\u7684\u65B9\u6CD5\u6765\u5904\u7406\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u7684\u903B\u8F91\n - \u5728\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\uFF0C\u5FC5\u987B\u4E25\u683C\u53C2\u8003`api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50`\uFF0C\u9700\u8981\u6839\u636Evtype\u6765\u505A\u6570\u636E\u7ED1\u5B9A\n - vtype=\"verticalListView\"\u3001vtype=\"horizontalListView\"\u3001vtype=\"viewPager\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u7ED1\u5B9A\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n this.xxxVerticalListView.setDataList(xxxResponse.data.list)\u3001this.xxxHorizontalListView.setDataList(xxxResponse.xxxList)\u3001this.xxxViewPager.setDataList(xxxResponse.xxxList)\n - `setDataList`\u7684\u5165\u53C2\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1AxxxResponse.data.xxxList\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u4E0D\u80FD\u5199\u51FD\u6570\u8C03\u7528\u7B49\u3002\n - vtype=\"listItemCard\"\u3001vtype=\"oneViewPagerContent\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u6DF1\u5EA6\u904D\u5386\u5B83\u7684\u7B2C1\u4E2Aitem\u7684\u5B69\u5B50\uFF0C\u7136\u540E\u7ED3\u5408\u540E\u7AEFapi\u8FD4\u56DE\u7684xxxResponse\u7684\u6570\u636E\u7ED3\u6784\u7ED9\u7B2C1\u4E2Aitem\u8BBE\u7F6E\u6570\u636E\uFF0C\u6CE8\u610F\u53EA\u9700\u7ED9\u7B2C1\u4E2Aitem\u8282\u70B9\u8BBE\u7F6E\u6570\u636E\uFF0C\u800C\u4E0D\u662F\u6240\u6709item\u8282\u70B9\u90FD\u8BBE\u7F6E\u6570\u636E\uFF0C\u5E76\u4E14\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\u7684\u7B2C\u4E00\u4E2AitemData\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1Aconst itemData = dataList[0]; this.recommendBookTitle1.text = itemData.xxx.titleText\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u5982\u679C\u9700\u8981\u903B\u8F91\u5904\u7406\u540E\u624D\u80FD\u5F97\u51FAthis.recommendBookTitle1.text\u7684\u503C\uFF0C\u90A3\u5C31\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A`getxxx(itemData: any): string`\u65B9\u6CD5\u6765\u83B7\u53D6\uFF0C\u7136\u540E:this.recommendBookTitle1.text = this.getxxx(itemData)\n - api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50\uFF1A\n ```typescript\n // \u540E\u7AEFxxxApi\u8FD4\u56DE\u7684xxxResponse\u6570\u636E\u7ED3\u6784\n export interface getRecommendBookListResponse {\n code: number\n msg: string\n data: {\n list: [\n {\n id: number // \u4E66\u7C4DID\n title: string // \u4E66\u7C4D\u6807\u9898\n author: string // \u4F5C\u8005\u540D\u79F0\n coverUrl: string // \u5C01\u9762\u56FE\u7247URL\n description: string // \u4E66\u7C4D\u7B80\u4ECB\n categoryName: string // \u5206\u7C7B\u540D\u79F0\n }\n ] // \u4E66\u7C4D\u5217\u8868\n total: number // \u603B\u6570\u91CF\n page: number // \u5F53\u524D\u9875\u7801\n size: number // \u6BCF\u9875\u6570\u91CF\n }\n }\n ...\n private bindDataFromNet(getRecommendBookListData: getRecommendBookListResponse) {\n // \u8BBE\u7F6E\u4E66\u7C4D\u5217\u8868\u6570\u636E\n this.recommendBookList.setDataList(getRecommendBookListData.data.listData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const listItemData = getRecommendBookListData.data.listData[0]\n this.recommendBookCover1.src = listItemData.coverUrl\n this.recommendBookTitle1.text = listItemData.title\n this.recommendBookAuthor1.text = listItemData.author\n ...\n // \u8BBE\u7F6E\u8F6E\u64AD\u6570\u636E\n this.recommendViewPager.setDataList(getRecommendBookListData.data.viewPagerData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const viePagerItemData = getRecommendBookListData.data.viewPagerData[0]\n this.recommendImage1.src = viePagerItemData.coverUrl\n this.carouselTitle1.text = this.getCarouselTitleData(viePagerItemData) // \u7531\u4E8E\u6709\u590D\u6742\u7684\u903B\u8F91\u5904\u7406\uFF0C\u6240\u4EE5\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A\u65B9\u6CD5\u6765\u83B7\u53D6\n }\n private getCarouselTitleData(itemData: any) {\n let title = ''\n if (itemData.title) {\n title = itemData.title\n } else if (itemData.description) {\n title = itemData.description\n } else {\n title = itemData.categoryName\n }\n return title\n }\n ...\n ```\n - \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\u65F6\uFF0C\u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5FC5\u987B\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\uFF0C\u5982\uFF1A\n ```typescript\n // \u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\u65F6\u6539\u4E3A\u8C03\u7528\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n this.recommendImage1.src = this.xxxMethod(getRecommendBookListResponse)\n // \u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n private xxxMethod(res: getRecommendBookListResponse): string {\n let tmp = getRecommendBookListResponse.data.list[0].coverUrl\n if (tmp && tmp.length > 5) {\n return tmp + '\u957F\u540D\u5B57'\n }\n return tmp\n }\n ```\n \n\n## 10. \u4E00\u4E9B\u9AD8\u7EA7View\u7EC4\u4EF6\u5185\u90E8\u5DF2\u5C01\u88C5\u597D\u903B\u8F91\uFF0C\u56E0\u6B64\u4E00\u4E9BView\u7EC4\u4EF6\u4E0D\u9700\u8981\u505A\u4EE5\u4E0B\u4E8B\u60C5\n- \u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3AViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- Tab\u9009\u9879\u5361`TabNavigateBar`\u548C`TabNavigateBarItem`\u7684\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3ATab\u9009\u9879\u5361\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- \u5E95\u90E8\u5BFC\u822A\u680F`bottomTabNavigateBar`\u548C`bottomTabNavigateBarItem`\u7684\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3A\u5E95\u90E8\u5BFC\u822A\u680F\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- \u5B50\u9875\u9762\u5BB9\u5668`SubPageContainer`\u4E0D\u9700\u8981\u7F16\u5199\u4EFB\u4F55\u8BBE\u7F6E\u9875\u9762\u6216\u5207\u6362\u9875\u9762\u7684\u903B\u8F91\u3002\n- \u7981\u6B62\u5BF9ImageView\u8FDB\u884Ccolor\u5C5E\u6027\u7684\u8BBE\u7F6E\u3002\n- \u591A\u72B6\u6001\u5BB9\u5668`MultiStateContainer`\uFF0C\u7981\u6B62\u5BF9\u5176\u5185\u90E8\u7684\u5B50View\u7EC4\u4EF6\u8FDB\u884C\u76F4\u63A5\u8BBE\u7F6E\uFF0C\u800C\u5FC5\u987B\u901A\u8FC7`currentStationRef`\u6765\u5207\u6362\u72B6\u6001\uFF0C\u4FEE\u6539`currentStationRef`\u5207\u6362\u72B6\u6001\u540E\u5C31\u4F1A\u81EA\u52A8\u663E\u793A\u8BE5\u72B6\u6001\u4E0B\u7684UI\u7EC4\u4EF6\uFF0C\u5E76\u4E14\u9690\u85CF\u5176\u4ED6\u72B6\u6001\u4E0B\u7684UI\u7EC4\u4EF6\u3002\n\n";
|
|
1
|
+
export declare const understandingCodeFrameworkTemplate = "\n# **\u5FC5\u987B\u5148\u7406\u89E3\u9879\u76EE\u4EE3\u7801\u6846\u67B610\u4E2A\u77E5\u8BC6\u70B9**\n## 1. **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u548C\u4F7F\u7528\u89C4\u5219**\n - \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n - View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n - \u67E5\u770B'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n - \u6240\u6709view\u7EC4\u4EF6\u7684\u58F0\u660E\uFF0C\u5FC5\u987B\u4F7F\u7528`findViewById(id: string)`\u65B9\u6CD5\u8D4B\u503C\uFF0C\u5176\u4E2D\u91CC\u9762\u7684\u53C2\u6570`id`\u5FC5\u987B\u4ECE`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u67E5\u627E\u83B7\u53D6\u5230\u6B63\u786E\u7684id\u7684\u503C\n - \u7981\u6B62\u4FEE\u6539`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md`\u6587\u4EF6\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u6B64\u6587\u4EF6\u53EA\u8BFB\n - View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n - \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u4F7F\u7528view\u7684\u5C5E\u6027station\u6765\u76F4\u63A5\u8BBE\u7F6E\uFF0C\u6BD4\u5982\uFF1A`this.nameInputView.station = ViewStation.Focus`\uFF0C\u53EF\u9009\u503C\u6709\uFF1AViewStation.NORMAL\u3001ViewStation.READONLY\u3001ViewStation.FOCUSED\u3001ViewStation.SELECTED\u3001ViewStation.DISABLED\u3002\n - \u6240\u6709View\u7EC4\u4EF6(\u5305\u62ECBaseView\u3001BaseContainer\u4EE5\u53CA\u5B83\u4EEC\u7684\u5B50\u7C7B)\u7684\u70B9\u51FB\u4E8B\u4EF6\uFF0C\u90FD\u53EF\u4EE5\u76F4\u63A5\u5728view\u7EC4\u4EF6\u7684\u58F0\u660E\u540E\u9762\u6DFB\u52A0`setOnClickListener`\u65B9\u6CD5\u6765\u76D1\u542C\u70B9\u51FB\u4E8B\u4EF6\uFF0C\u6BD4\u5982\uFF1A`this.xxxContainer.setOnClickListener(() => { this.nameTextView.text = '\u70B9\u51FB\u4E86' + this.nameTextView.text })`\n - \u6240\u6709\u7684dialog\u5BF9\u8BDD\u6846\uFF0C\u5FC5\u987B\u8C03\u7528Dialog\u7EC4\u4EF6\u7684show\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5173\u95ED\u65F6\u5FC5\u987B\u8C03\u7528Dialog\u7EC4\u4EF6\u7684hide\u65B9\u6CD5\u6765\u5173\u95ED\uFF0C\u6BD4\u5982\uFF1Athis.xxxDialog.show()\u3001this.xxxDialog.hide()\uFF0C\u7981\u6B62\u4F7F\u7528view\u7684visibility\u5C5E\u6027\u6765\u663E\u793A\u9690\u85CF\u5BF9\u8BDD\u6846\u3002\n - \u6240\u6709\u7684DropDownMenu\u4E0B\u62C9\u83DC\u5355\uFF0C\u5FC5\u987B\u8C03\u7528DropDownMenu\u7EC4\u4EF6\u7684show\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5173\u95ED\u65F6\u5FC5\u987B\u8C03\u7528DropDownMenu\u7EC4\u4EF6\u7684hide\u65B9\u6CD5\u6765\u5173\u95ED\uFF0C\u6BD4\u5982\uFF1Athis.xxxDropDownMenu.show()\u3001this.xxxDropDownMenu.hide()\uFF0C\u7981\u6B62\u4F7F\u7528view\u7684visibility\u5C5E\u6027\u6765\u663E\u793A\u9690\u85CF\u4E0B\u62C9\u83DC\u5355\u3002\n - \u6240\u6709\u7684SideSlideContainer\u4FA7\u6ED1\u5BB9\u5668\uFF0C\u5FC5\u987B\u8C03\u7528SideSlideContainer\u7EC4\u4EF6\u7684show\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5173\u95ED\u65F6\u5FC5\u987B\u8C03\u7528SideSlideContainer\u7EC4\u4EF6\u7684hide\u65B9\u6CD5\u6765\u5173\u95ED\uFF0C\u6BD4\u5982\uFF1Athis.xxxSideSlideContainer.show()\u3001this.xxxSideSlideContainer.hide()\uFF0C\u7981\u6B62\u4F7F\u7528view\u7684visibility\u5C5E\u6027\u6765\u663E\u793A\u9690\u85CF\u4FA7\u6ED1\u5BB9\u5668\u3002\n\n## 2. **\u7406\u89E3\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\u4EE5\u53CAjson\u76F8\u5173\u4EE3\u7801**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/AllFunction.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u5DE5\u7A0B\u80FD\u4F7F\u7528\u7684\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/JsonObject.ts'\u548C'src/lib/JsonArray.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8FD9\u4E24\u4E2A\u6587\u4EF6\u5B9A\u4E49\u7684json\u76F8\u5173\u7684\u65B9\u6CD5\n - \u8BF7\u4E25\u683C\u6309\u7167\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\uFF0C\u4E0D\u8981\u65B0\u589E\u3001\u5220\u9664\u6216\u4FEE\u6539\u4EFB\u4F55AllFunction\u63A5\u53E3\u58F0\u660E\uFF1B\u4E5F\u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u672A\u5728AllFunction\u4E2D\u51FA\u73B0\u7684\u51FD\u6570\u6216\u6A21\u5757\n - \u6240\u6709\u7684toast\u63D0\u793A\uFF0C\u5FC5\u987B\u8C03\u7528AllFunction.showToast\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5E76\u4E14\u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u63D0\u793A\u3002\n - \u6240\u6709\u7684dialog\u5BF9\u8BDD\u6846\uFF0C\u5FC5\u987B\u8C03\u7528Dialog\u7EC4\u4EF6\u7684show\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5173\u95ED\u65F6\u5FC5\u987B\u8C03\u7528Dialog\u7EC4\u4EF6\u7684hide\u65B9\u6CD5\u6765\u5173\u95ED\uFF0C\u6BD4\u5982\uFF1Athis.xxxDialog.show()\u3001this.xxxDialog.hide()\uFF0C\u7981\u6B62\u4F7F\u7528view\u7684visibility\u5C5E\u6027\u6765\u663E\u793A\u9690\u85CF\u5BF9\u8BDD\u6846\u3002\n - \u6240\u6709\u7684DropDownMenu\u4E0B\u62C9\u83DC\u5355\uFF0C\u5FC5\u987B\u8C03\u7528DropDownMenu\u7EC4\u4EF6\u7684show\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5173\u95ED\u65F6\u5FC5\u987B\u8C03\u7528DropDownMenu\u7EC4\u4EF6\u7684hide\u65B9\u6CD5\u6765\u5173\u95ED\uFF0C\u6BD4\u5982\uFF1Athis.xxxDropDownMenu.show()\u3001this.xxxDropDownMenu.hide()\uFF0C\u7981\u6B62\u4F7F\u7528view\u7684visibility\u5C5E\u6027\u6765\u663E\u793A\u9690\u85CF\u4E0B\u62C9\u83DC\u5355\u3002\n - \u6240\u6709\u7684SideSlideContainer\u4FA7\u6ED1\u5BB9\u5668\uFF0C\u5FC5\u987B\u8C03\u7528SideSlideContainer\u7EC4\u4EF6\u7684show\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5173\u95ED\u65F6\u5FC5\u987B\u8C03\u7528SideSlideContainer\u7EC4\u4EF6\u7684hide\u65B9\u6CD5\u6765\u5173\u95ED\uFF0C\u6BD4\u5982\uFF1Athis.xxxSideSlideContainer.show()\u3001this.xxxSideSlideContainer.hide()\uFF0C\u7981\u6B62\u4F7F\u7528view\u7684visibility\u5C5E\u6027\u6765\u663E\u793A\u9690\u85CF\u4FA7\u6ED1\u5BB9\u5668\u3002\n - \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n - \u6240\u6709localStorage\u672C\u5730\u6570\u636E\u5B58\u50A8\u90FD\u5FC5\u987B\u4F7F\u7528AllFunction\u7684saveDatabaseBoolean\u3001saveDatabaseNumber\u3001saveDatabaseString\u3001saveDatabaseArray\u3001saveDatabaseObject\u65B9\u6CD5\u6765\u5B58\u50A8\u6570\u636E\uFF0C\u4F7F\u7528getDatabaseBoolean\u3001getDatabaseNumber\u3001getDatabaseString\u3001getDatabaseArray\u3001getDatabaseObject\u65B9\u6CD5\u6765\u83B7\u53D6\u6570\u636E\u3002\n\n## 3. **\u7406\u89E3Ref\u3001watch**\n - Ref\u7684\u6570\u636E\u7C7B\u578B\u53EA\u80FD\u662F\u4EE5\u4E0B5\u4E2D\u7C7B\u578B\uFF1A\u6570\u5B57\u4F7F\u7528Ref<number>\uFF0C\u5B57\u7B26\u4E32\u4F7F\u7528Ref<string>\uFF0C\u5E03\u5C14\u91CF\u4F7F\u7528Ref<boolean>\uFF0C\u5BF9\u8C61\u4F7F\u7528Ref<any>\uFF0C\u6570\u7EC4\u4F7F\u7528Ref<Array<any>>\u6216Ref<Array<any> | null>\u6216Ref<any[]>\u6216Ref<any[] | null>\u3002\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/Ref.ts'\u6587\u4EF6\uFF0C\u7406\u89E3Ref\u548Cwatch\u7684\u5B9A\u4E49\u7528\u6CD5\n - watch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684Ref\u6570\u7EC4\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u56DE\u8C03\u51FD\u6570\u4E2D\u53EF\u4EE5\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\u3002\n - Ref\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0Cwatch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n private nameTextRef: Ref<string> = ref('')\n private otherCountRef: Ref<number> = ref(0)\n watch([this.nameTextRef, this.otherCountRef], () => {\n // \u53EF\u4EE5\u5148\u76F8\u5173\u7684UI\u66F4\u65B0\u6216\u4E1A\u52A1\u903B\u8F91\n if (this.otherCountRef.value > 5) {\n this.nameTextView.text = this.nameTextRef.value + '5'\n } else {\n this.nameTextView.text = this.nameTextRef.value + '10'\n }\n })\n ```\n - `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n\n## 4. **\u7406\u89E3setDataList\u65B9\u6CD5\u7684\u9759\u6001\u6570\u636E\u4E0E\u52A8\u6001\u6570\u636E\u573A\u666F**\n - \u5BF9\u4E8E\u52A8\u6001\u6570\u636E\u5BB9\u5668ViewPager\u3001ListView\u7684setDataList\u65B9\u6CD5\uFF0C\u5982\u679C\u6570\u636E\u662F\u52A8\u6001\u7684\uFF0C\u6BD4\u5982\uFF1A\u4ECE\u540E\u7AEF\u63A5\u53E3\u83B7\u53D6\u7684\uFF0C\u624D\u80FD\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\u9759\u6001\u6570\u636E\u5DF2\u7ECF\u5728UI\u9875\u9762\u4E0A\u5199\u597D\u4E86\uFF0C\u4F60\u4E0D\u5F97\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\n - \u5224\u65AD\u6807\u51C6\uFF1A\u5982\u679CUI\u9875\u9762\u4E2D\u5DF2\u7ECF\u6709\u5B8C\u6574\u7684\u8F6E\u64AD\u9879\u76EE/\u5217\u8868\u9879\u76EE\uFF0C\u5C31\u662F\u9759\u6001\u6570\u636E\uFF0C\u5982\u679C\u662F\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\u5C31\u662F\u52A8\u6001\u6570\u636E\u3002\n - \u2705 \u9759\u6001\u6570\u636E\u5BB9\u5668\uFF08UI\u9875\u9762\u4E2D\u5DF2\u5199\u597D\u5185\u5BB9\uFF09\uFF1A\u4E0D\u4F7F\u7528setDataList()\n - \u2705 \u52A8\u6001\u6570\u636E\u5BB9\u5668\uFF08\u9700\u8981\u4ECEAPI\u83B7\u53D6\uFF09\uFF1A\u624D\u4F7F\u7528setDataList()\n\n## 5. **View\u7EC4\u4EF6\uFF0C\u7406\u89E3\u6BCF\u4E2A\u7EC4\u4EF6\u53EF\u80FD\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u5982\u679C\u7EC4\u4EF6\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u90A3\u4E48\u4F60\u4E0D\u5F97\u518D\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u7B49\u56DE\u8C03\u89E6\u53D1UI\u66F4\u65B0**\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public initView() {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public initView() {\n watch([this.viewPager.currentSelectIndexRef], () => {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n })\n ```\n - tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n\n## 6. **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u7F16\u5199\u8DF3\u8F6C\u9875\u9762\u7684\u4EE3\u7801\u65F6\uFF0C\u5FC5\u987B\u8981\u5148\u67E5\u770B\u76EE\u6807\u9875\u9762\u7684ts\u6587\u4EF6\uFF0C\u786E\u8BA4\u76EE\u6807\u9875\u9762\u662F\u5426\u5B58\u5728\uFF0C\u5982\u679C\u5B58\u5728\u90A3\u4E48\u5FC5\u987B\u8981\u4F7F\u7528`AllFunction.startPage(new xxxPage(xxx)`\u6765\u8DF3\u8F6C\u5230\u76EE\u6807\u9875\u9762xxxPage\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u6577\u884D\u5730\u4F7F\u7528`AllFunction.showToast`\u6765\u6A21\u62DF\u63D0\u793A\u8DF3\u8F6C\u9875\u9762\uFF0C\u9664\u975E\u76EE\u6807\u9875\u9762\u4E0D\u5B58\u5728\u3002\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage(this.productID))\u3002\n - \u274C \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u548C\u76EE\u6807\u9875\u9762\u6240\u9700\u7684\u8DF3\u8F6C\u53C2\u6570\u3002\n - \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n - \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u9700\u8981\u4F20\u9012\u53C2\u6570\uFF0C\u90A3\u4E48\u9700\u8981\u4F7F\u7528Page\u7684\u5B50\u7C7B\u6784\u9020\u51FD\u6570\u6765\u4F20\u9012\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1AAllFunction.startPage(new GuidePage(this.productID))\u3002\n - \u5728\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u65F6\u5019\uFF0C\u5FC5\u987B\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u4E09\u6B65\u6765\u5B9E\u73B0\uFF1A\n - **\u7B2C\u4E00\u6B65\uFF1A\u5148\u5206\u6790\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u9700\u8981\u4F20\u9012\u54EA\u4E9B\u53C2\u6570**\n - **\u7B2C\u4E8C\u6B65\uFF1A\u4FEE\u6539\u76EE\u6807\u9875\u9762\u6784\u9020\u51FD\u6570**\uFF1A\n ```typescript\n export default class ReadingPage extends Page {\n private bookId: number\n private chapterTitle: string\n \n constructor(bookId: number, chapterTitle: string) {\n super()\n this.bookId = bookId\n this.chapterTitle = chapterTitle\n }\n }\n ```\n - **\u7B2C\u4E09\u6B65\uFF1A\u4FEE\u6539\u8DF3\u8F6C\u4EE3\u7801**\n ```typescript\n const bookData = this.readingHistoryDataRef.value[0]\n AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))\n ```\n\n## 7. **\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219**\n - lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u6587\u4EF6\u90FD\u662F\u5185\u7F6E\u6846\u67B6\u4EE3\u7801\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5BF9lib\u6587\u4EF6\u5939\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u64CD\u4F5C\n - \u4EFB\u4F55\u9875\u9762\uFF08\u7279\u522B\u662F\u95EA\u5C4F\u9875\uFF09\u7684\u4E1A\u52A1\u903B\u8F91\u7EDD\u5BF9\u4E0D\u80FD\u653E\u5230Application.ts\u8FDB\u884C\u5904\u7406\uFF0CApplication.ts\u53EA\u8FDB\u884C\u5168\u5C40\u7F51\u7EDC\u62E6\u622A\u5904\u7406\u3001\u5168\u5C40\u9759\u6001\u53D8\u91CF\u3001\u5168\u5C40\u9759\u6001\u65B9\u6CD5\u7684\u5B9A\u4E49\u548C\u5B9E\u73B0\n - \u5982\u679C\u662F\u591A\u4E2A\u9875\u9762\u5171\u7528\u7684\u6570\u636E\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8003\u8651\u58F0\u660E\u4E3A\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5E76\u5728Application.ts\u4E2D\u8FDB\u884C\u58F0\u660E\u3002\n - \u5168\u5C40\u9759\u6001\u53D8\u91CF\u5728\u5173\u95EDAPP\u6216\u8005\u7F51\u9875\u540E\u4F1A\u6E05\u7406\u6389\u7684\uFF0C\u6240\u4EE5\u4F60\u8981\u601D\u8003\u6E05\u695A\u54EA\u4E9B\u6570\u636E\u53D8\u91CF\u9700\u8981\u6301\u4E45\u5316\u50A8\u5B58\uFF0C\u54EA\u4E9B\u662F\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u6301\u4E45\u5316\u63A5\u53E3\uFF1AsaveDatabaseXxx\u548CgetDatabaseDataXxx\uFF0C\u6BD4\u5982\u662F\u5426\u5DF2\u7ECF\u5F39\u51FA\u8FC7\u5E7F\u544A\u5F39\u6846\uFF0C\u8FD9\u4E2A\u5E94\u8BE5\u6301\u4E45\u5316\u50A8\u5B58\u3002\n - \u58F0\u660E\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u5FC5\u987B\u8981\u58F0\u660E\u6570\u636E\u7C7B\u578B\uFF0C\u5E76\u4E14\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528any\uFF0C\u8BF7\u4F7F\u7528\u5177\u4F53\u7C7B\u578B\u6765\u58F0\u660E\n - \u8F6E\u64ADViewPager\u5BF9\u5E94\u7684\u7D22\u5F15\u6307\u793A\u5668\u5BB9\u5668\uFF0C\u8FD9\u4E2A\u7D22\u5F15\u6307\u793A\u5668\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u5B9E\u73B0\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u672C\u8EABViewPager\u4E0EIndicatorContainer\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u4E86\u5207\u6362\u7684UI\u66F4\u65B0\u903B\u8F91\u7684\u4E86\uFF0C\u53EA\u9700\u8981viewPager.bindIndicator(indicatorContainer)\u5373\u53EF\u3002\n - Tab\u9009\u9879\u5361`TabNavigateBar`\u548C`TabNavigateBarItem`\u7684\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3ATab\u9009\u9879\u5361\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n - \u5E95\u90E8\u5BFC\u822A\u680F`bottomTabNavigateBar`\u548C`bottomTabNavigateBarItem`\u7684\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3A\u5E95\u90E8\u5BFC\u822A\u680F\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\uFF0C\u6BD4\u5982\u9996\u9875\u4E3B\u4F53\u9875\u7684\u5E95\u90E8\u5BFC\u822A\u680F\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u56E0\u4E3A\u5E95\u90E8\u5BFC\u822A\u680F\u7684\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\u3002\n - \u6BCF\u4E00\u4E2A\u9875\u9762(\u5982loginPage)\u5FC5\u987B\u5728page\u6587\u4EF6\u5939\u4E0B\u9762\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6587\u4EF6\u5939(\u5982login)\uFF0C\u7136\u540E\u9875\u9762\u7684ts\u6587\u4EF6(\u5982loginPage.ts)\u521B\u5EFA\u5728\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\u3002\n\n## 8. **\u7406\u89E3\u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u540E\u7AEFAPI\u4F7F\u7528\u8BF4\u660E\u6587\u4EF6\uFF0C\u5FC5\u987B\u7F13\u5B58\u8BB0\u4F4F\u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\u3002\n - \u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528\uFF0C\u5FC5\u987B\u4F7F\u7528src/backendApi\u6587\u4EF6\u5939\u91CC\u9762\u7684\u5404\u79CDAPI\u7C7B\u4E2D\u5B9A\u4E49\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528\u672A\u5728backendApi\u6587\u4EF6\u5939\u4E2D\u5B9A\u4E49\u7684\u540E\u7AEFAPI\uFF0C\u6BD4\u5982\uFF1AbackendApi/account/getUserInfo.ts\uFF0C\u8FD9\u4E2A\u5C31\u662F\u8D26\u53F7\u6A21\u5757\u4E2D\u7684\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u7684API\u7C7B\uFF0C\u8FD4\u56DE\u7684res\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7C7B\u578B\uFF0C\u6BD4\u5982res: getUserInfoResponse\u3002\n - request\u63A5\u53E3\u53EA\u9700\u5B9A\u4E49\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\uFF0C\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u3002\n - API\u7C7B\u4EE3\u7801\u793A\u4F8B\uFF1A\n ```typescript\n import { NetFailData } from '../../lib/NetFailData'\n import BaseApi from '../BaseApi'\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8BF7\u6C42\u6570\u636E\n export interface postClientBizAuthLoginRequest {\n username?: string\n password?: string\n key?: string\n captcha?: string\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n export interface postClientBizAuthLoginResponse {\n code: number\n msg: string\n data: {\n access_token: string\n }\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\n export default class postClientBizAuthLogin extends BaseApi {\n\n public static request_ArtuX1d8a6A(\n request: postClientBizAuthLoginRequest,\n success: (res: postClientBizAuthLoginResponse) => void,\n fail: (error: NetFailData) => void\n ): void { }\n\n }\n ```\n - API\u7C7B\u7684\u4F7F\u7528\u65B9\u5F0F\uFF1A\u5148import API\u7C7B\uFF0C\u7136\u540E\u8C03\u7528API\u7C7B\u7684request\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n import { NetFailData } from \"../../lib/NetFailData\"\n import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'\n ...\n const request: postClientBizAuthLoginRequest = {\n username: 'admin',\n password: '123456',\n key: '123456',\n captcha: '123456'\n }\n postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {\n // \u8BF7\u6C42\u6210\u529F\u540E\u7684\u5904\u7406\n }, (error: NetFailData) => {\n // \u8BF7\u6C42\u5931\u8D25\u540E\u7684\u5904\u7406\n })\n ...\n\n## 9. **\u7406\u89E3\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A**\n - \u5FC5\u987B\u67E5\u770BxxxPage.md\u6587\u4EF6\u91CC\u9762\u7684\u8BE5\u8282\u70B9\u662F\u5426\u6709\u58F0\u660EfromApiOrCacheData(true)\u7684\u60C5\u51B5\uFF0C\u5982\u679C\u6709\u58F0\u660E\u8868\u793A\u8BE5\u8282\u70B9\u9700\u8981\u4ECE\u540E\u7AEFapi\u63A5\u53E3\u83B7\u53D6\u6570\u636E\uFF0C\u90A3\u4E48\u5FC5\u987B\u5C01\u88C5\u4E00\u4E2A\u540D\u5B57\u53EB\u505A`bindDataFromNet`\u7684\u65B9\u6CD5\u6765\u5904\u7406\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u7684\u903B\u8F91\u3002\n - \u5728\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\uFF0C\u5FC5\u987B\u4E25\u683C\u53C2\u8003`api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50`\uFF0C\u9700\u8981\u6839\u636Evtype\u6765\u505A\u6570\u636E\u7ED1\u5B9A\n - vtype=\"verticalListView\"\u3001vtype=\"horizontalListView\"\u3001vtype=\"viewPager\"\u3001vtype=\"inlineBlockAndWrap\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u7ED1\u5B9A\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n this.xxxVerticalListView.setDataList(xxxResponse.data.list)\u3001this.xxxHorizontalListView.setDataList(xxxResponse.xxxList)\u3001this.xxxViewPager.setDataList(xxxResponse.xxxList)\n - `setDataList`\u7684\u5165\u53C2\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1AxxxResponse.data.xxxList\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u4E0D\u80FD\u5199\u51FD\u6570\u8C03\u7528\u7B49\u3002\n - vtype=\"listItemCard\"\u3001vtype=\"oneViewPagerContent\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u6DF1\u5EA6\u904D\u5386\u5B83\u7684\u7B2C1\u4E2Aitem\u7684\u5B69\u5B50\uFF0C\u7136\u540E\u7ED3\u5408\u540E\u7AEFapi\u8FD4\u56DE\u7684xxxResponse\u7684\u6570\u636E\u7ED3\u6784\u7ED9\u7B2C1\u4E2Aitem\u8BBE\u7F6E\u6570\u636E\uFF0C\u6CE8\u610F\u53EA\u9700\u7ED9\u7B2C1\u4E2Aitem\u8282\u70B9\u8BBE\u7F6E\u6570\u636E\uFF0C\u800C\u4E0D\u662F\u6240\u6709item\u8282\u70B9\u90FD\u8BBE\u7F6E\u6570\u636E\uFF0C\u5E76\u4E14\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\u7684\u7B2C\u4E00\u4E2AitemData\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1Aconst itemData = dataList[0]; this.recommendBookTitle1.text = itemData.xxx.titleText\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u5982\u679C\u9700\u8981\u903B\u8F91\u5904\u7406\u540E\u624D\u80FD\u5F97\u51FAthis.recommendBookTitle1.text\u7684\u503C\uFF0C\u90A3\u5C31\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A`getxxx(itemData: any): string`\u65B9\u6CD5\u6765\u83B7\u53D6\uFF0C\u7136\u540E:this.recommendBookTitle1.text = this.getxxx(itemData)\n - api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50\uFF1A\n ```typescript\n // \u540E\u7AEFxxxApi\u8FD4\u56DE\u7684xxxResponse\u6570\u636E\u7ED3\u6784\n export interface getRecommendBookListResponse {\n code: number\n msg: string\n data: {\n list: [\n {\n id: number // \u4E66\u7C4DID\n title: string // \u4E66\u7C4D\u6807\u9898\n author: string // \u4F5C\u8005\u540D\u79F0\n coverUrl: string // \u5C01\u9762\u56FE\u7247URL\n description: string // \u4E66\u7C4D\u7B80\u4ECB\n categoryName: string // \u5206\u7C7B\u540D\u79F0\n }\n ] // \u4E66\u7C4D\u5217\u8868\n total: number // \u603B\u6570\u91CF\n page: number // \u5F53\u524D\u9875\u7801\n size: number // \u6BCF\u9875\u6570\u91CF\n }\n }\n ...\n private bindDataFromNet(getRecommendBookListData: getRecommendBookListResponse) {\n // \u8BBE\u7F6E\u4E66\u7C4D\u5217\u8868\u6570\u636E\n this.recommendBookList.setDataList(getRecommendBookListData.data.listData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const listItemData = getRecommendBookListData.data.listData[0]\n this.recommendBookCover1.src = listItemData.coverUrl\n this.recommendBookTitle1.text = listItemData.title\n this.recommendBookAuthor1.text = listItemData.author\n ...\n // \u8BBE\u7F6E\u8F6E\u64AD\u6570\u636E\n this.recommendViewPager.setDataList(getRecommendBookListData.data.viewPagerData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const viePagerItemData = getRecommendBookListData.data.viewPagerData[0]\n this.recommendImage1.src = viePagerItemData.coverUrl\n this.carouselTitle1.text = this.getCarouselTitleData(viePagerItemData) // \u7531\u4E8E\u6709\u590D\u6742\u7684\u903B\u8F91\u5904\u7406\uFF0C\u6240\u4EE5\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A\u65B9\u6CD5\u6765\u83B7\u53D6\n }\n private getCarouselTitleData(itemData: any) {\n let title = ''\n if (itemData.title) {\n title = itemData.title\n } else if (itemData.description) {\n title = itemData.description\n } else {\n title = itemData.categoryName\n }\n return title\n }\n ...\n ```\n - \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\u65F6\uFF0C\u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5FC5\u987B\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\uFF0C\u5982\uFF1A\n ```typescript\n // \u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\u65F6\u6539\u4E3A\u8C03\u7528\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n this.recommendImage1.src = this.xxxMethod(getRecommendBookListResponse)\n // \u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n private xxxMethod(res: getRecommendBookListResponse): string {\n let tmp = getRecommendBookListResponse.data.list[0].coverUrl\n if (tmp && tmp.length > 5) {\n return tmp + '\u957F\u540D\u5B57'\n }\n return tmp\n }\n ```\n \n\n## 10. \u4E00\u4E9B\u9AD8\u7EA7View\u7EC4\u4EF6\u5185\u90E8\u5DF2\u5C01\u88C5\u597D\u903B\u8F91\uFF0C\u56E0\u6B64\u4E00\u4E9BView\u7EC4\u4EF6\u4E0D\u9700\u8981\u505A\u4EE5\u4E0B\u4E8B\u60C5\n- \u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3AViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- Tab\u9009\u9879\u5361`TabNavigateBar`\u548C`TabNavigateBarItem`\u7684\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3ATab\u9009\u9879\u5361\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- \u5E95\u90E8\u5BFC\u822A\u680F`bottomTabNavigateBar`\u548C`bottomTabNavigateBarItem`\u7684\u6ED1\u52A8\u548C\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3A\u5E95\u90E8\u5BFC\u822A\u680F\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u70B9\u51FB\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- \u5B50\u9875\u9762\u5BB9\u5668`SubPageContainer`\u4E0D\u9700\u8981\u7F16\u5199\u4EFB\u4F55\u8BBE\u7F6E\u9875\u9762\u6216\u5207\u6362\u9875\u9762\u7684\u903B\u8F91\u3002\n- \u7981\u6B62\u5BF9ImageView\u8FDB\u884Ccolor\u5C5E\u6027\u7684\u8BBE\u7F6E\u3002\n- \u591A\u72B6\u6001\u5BB9\u5668`MultiStateContainer`\uFF0C\u7981\u6B62\u5BF9\u5176\u5185\u90E8\u7684\u5B50View\u7EC4\u4EF6\u8FDB\u884C\u76F4\u63A5\u8BBE\u7F6E\uFF0C\u800C\u5FC5\u987B\u901A\u8FC7`currentStationRef`\u6765\u5207\u6362\u72B6\u6001\uFF0C\u4FEE\u6539`currentStationRef`\u5207\u6362\u72B6\u6001\u540E\u5C31\u4F1A\u81EA\u52A8\u663E\u793A\u8BE5\u72B6\u6001\u4E0B\u7684UI\u7EC4\u4EF6\uFF0C\u5E76\u4E14\u9690\u85CF\u5176\u4ED6\u72B6\u6001\u4E0B\u7684UI\u7EC4\u4EF6\u3002\n\n";
|
|
2
2
|
//# sourceMappingURL=appCodeRule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,
|
|
1
|
+
{"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,63hCA4R9C,CAAC"}
|
package/build/appCodeRule.js
CHANGED
|
@@ -27,12 +27,19 @@ export const understandingCodeFrameworkTemplate = `
|
|
|
27
27
|
\`\`\`
|
|
28
28
|
- 所有View组件的显示、隐藏占位、隐藏不占位的设置都必须使用View的\`visibility\`属性进行设置,不得使用\`station\`属性。
|
|
29
29
|
- 所有View组件的normal、readOnly、focus、selected、disabled状态的变化都必须使用view的属性station来直接设置,比如:\`this.nameInputView.station = ViewStation.Focus\`,可选值有:ViewStation.NORMAL、ViewStation.READONLY、ViewStation.FOCUSED、ViewStation.SELECTED、ViewStation.DISABLED。
|
|
30
|
+
- 所有View组件(包括BaseView、BaseContainer以及它们的子类)的点击事件,都可以直接在view组件的声明后面添加\`setOnClickListener\`方法来监听点击事件,比如:\`this.xxxContainer.setOnClickListener(() => { this.nameTextView.text = '点击了' + this.nameTextView.text })\`
|
|
31
|
+
- 所有的dialog对话框,必须调用Dialog组件的show方法来显示,关闭时必须调用Dialog组件的hide方法来关闭,比如:this.xxxDialog.show()、this.xxxDialog.hide(),禁止使用view的visibility属性来显示隐藏对话框。
|
|
32
|
+
- 所有的DropDownMenu下拉菜单,必须调用DropDownMenu组件的show方法来显示,关闭时必须调用DropDownMenu组件的hide方法来关闭,比如:this.xxxDropDownMenu.show()、this.xxxDropDownMenu.hide(),禁止使用view的visibility属性来显示隐藏下拉菜单。
|
|
33
|
+
- 所有的SideSlideContainer侧滑容器,必须调用SideSlideContainer组件的show方法来显示,关闭时必须调用SideSlideContainer组件的hide方法来关闭,比如:this.xxxSideSlideContainer.show()、this.xxxSideSlideContainer.hide(),禁止使用view的visibility属性来显示隐藏侧滑容器。
|
|
30
34
|
|
|
31
35
|
## 2. **理解唯一的能力方法AllFunction.ts以及json相关代码**
|
|
32
36
|
- 使用'read_file'工具阅读并理解'src/lib/AllFunction.ts'文件,理解该工程能使用的唯一的能力方法
|
|
33
37
|
- 使用'read_file'工具阅读并理解'src/lib/JsonObject.ts'和'src/lib/JsonArray.ts'文件,理解这两个文件定义的json相关的方法
|
|
34
38
|
- 请严格按照唯一的能力方法AllFunction.ts,不要新增、删除或修改任何AllFunction接口声明;也不要调用其他未在AllFunction中出现的函数或模块
|
|
35
39
|
- 所有的toast提示,必须调用AllFunction.showToast方法来显示,并且如用户描述没有明确说明需要toast提示,你不得擅自进行Toast提示。
|
|
40
|
+
- 所有的dialog对话框,必须调用Dialog组件的show方法来显示,关闭时必须调用Dialog组件的hide方法来关闭,比如:this.xxxDialog.show()、this.xxxDialog.hide(),禁止使用view的visibility属性来显示隐藏对话框。
|
|
41
|
+
- 所有的DropDownMenu下拉菜单,必须调用DropDownMenu组件的show方法来显示,关闭时必须调用DropDownMenu组件的hide方法来关闭,比如:this.xxxDropDownMenu.show()、this.xxxDropDownMenu.hide(),禁止使用view的visibility属性来显示隐藏下拉菜单。
|
|
42
|
+
- 所有的SideSlideContainer侧滑容器,必须调用SideSlideContainer组件的show方法来显示,关闭时必须调用SideSlideContainer组件的hide方法来关闭,比如:this.xxxSideSlideContainer.show()、this.xxxSideSlideContainer.hide(),禁止使用view的visibility属性来显示隐藏侧滑容器。
|
|
36
43
|
- 延时执行AllFunction.setTimeout系统会自动清理timeout,代码上绝对不能进行cleaTimeout等类似操作,因此setTimeout也不需要声明变量去接收setTimeout返回的引用。
|
|
37
44
|
- 所有localStorage本地数据存储都必须使用AllFunction的saveDatabaseBoolean、saveDatabaseNumber、saveDatabaseString、saveDatabaseArray、saveDatabaseObject方法来存储数据,使用getDatabaseBoolean、getDatabaseNumber、getDatabaseString、getDatabaseArray、getDatabaseObject方法来获取数据。
|
|
38
45
|
|
|
@@ -137,7 +144,7 @@ export const understandingCodeFrameworkTemplate = `
|
|
|
137
144
|
- 轮播ViewPager对应的索引指示器容器,这个索引指示器不需要额外代码实现指示器点的切换UI更新逻辑,本身ViewPager与IndicatorContainer底层已经实现了切换的UI更新逻辑的了,只需要viewPager.bindIndicator(indicatorContainer)即可。
|
|
138
145
|
- Tab选项卡\`TabNavigateBar\`和\`TabNavigateBarItem\`的点击切换UI更新逻辑,不得在ts代码里面进行,因为Tab选项卡内部已经封装好了滑动和点击切换UI更新逻辑,你不需要再手动实现。
|
|
139
146
|
- 底部导航栏\`bottomTabNavigateBar\`和\`bottomTabNavigateBarItem\`的滑动和点击切换UI更新逻辑,不得在ts代码里面进行,因为底部导航栏内部已经封装好了点击切换UI更新逻辑,你不需要再手动实现,比如首页主体页的底部导航栏,不需要实现点击切换UI更新逻辑,因为底部导航栏的点击切换UI更新逻辑已经自动实现了。
|
|
140
|
-
- 每一个页面(如loginPage)
|
|
147
|
+
- 每一个页面(如loginPage)必须在page文件夹下面创建一个页面文件夹(如login),然后页面的ts文件(如loginPage.ts)创建在页面文件夹下面。
|
|
141
148
|
|
|
142
149
|
## 8. **理解后端API接口的定义与使用**
|
|
143
150
|
- 使用'read_file'工具读取'src/backendApi/backendApiInfo.md'后端API使用说明文件,必须缓存记住所有可用的后端API接口列表。
|
|
@@ -194,9 +201,9 @@ export const understandingCodeFrameworkTemplate = `
|
|
|
194
201
|
...
|
|
195
202
|
|
|
196
203
|
## 9. **理解调用后端api接口返回数据后与UI数据绑定**
|
|
197
|
-
-
|
|
204
|
+
- 必须查看xxxPage.md文件里面的该节点是否有声明fromApiOrCacheData(true)的情况,如果有声明表示该节点需要从后端api接口获取数据,那么必须封装一个名字叫做\`bindDataFromNet\`的方法来处理调用后端api接口返回数据后与UI数据绑定的逻辑。
|
|
198
205
|
- 在调用后端api接口返回数据后,必须严格参考\`api接口返回数据后与UI数据绑定例子\`,需要根据vtype来做数据绑定
|
|
199
|
-
- vtype="verticalListView"、vtype="horizontalListView"、vtype="viewPager"类型的节点组件,需要使用setDataList方法来绑定数据,比如:
|
|
206
|
+
- vtype="verticalListView"、vtype="horizontalListView"、vtype="viewPager"、vtype="inlineBlockAndWrap"类型的节点组件,需要使用setDataList方法来绑定数据,比如:
|
|
200
207
|
this.xxxVerticalListView.setDataList(xxxResponse.data.list)、this.xxxHorizontalListView.setDataList(xxxResponse.xxxList)、this.xxxViewPager.setDataList(xxxResponse.xxxList)
|
|
201
208
|
- \`setDataList\`的入参必须是直接写后端api返回的数据路径,比如:xxxResponse.data.xxxList,绝对不能使用全局变量和局部变量进行数据绑定,不能写其他逻辑代码,比如:不能写if、for、while等循环语句,不能写函数调用等。
|
|
202
209
|
- vtype="listItemCard"、vtype="oneViewPagerContent"类型的节点组件,需要深度遍历它的第1个item的孩子,然后结合后端api返回的xxxResponse的数据结构给第1个item设置数据,注意只需给第1个item节点设置数据,而不是所有item节点都设置数据,并且必须是直接写后端api返回的数据路径的第一个itemData的数据路径,比如:const itemData = dataList[0]; this.recommendBookTitle1.text = itemData.xxx.titleText,绝对不能使用全局变量和局部变量进行数据绑定,不能写其他逻辑代码,比如:不能写if、for、while等循环语句,如果需要逻辑处理后才能得出this.recommendBookTitle1.text的值,那就必须要封装一个\`getxxx(itemData: any): string\`方法来获取,然后:this.recommendBookTitle1.text = this.getxxx(itemData)
|
|
@@ -276,4 +283,4 @@ export const understandingCodeFrameworkTemplate = `
|
|
|
276
283
|
- 多状态容器\`MultiStateContainer\`,禁止对其内部的子View组件进行直接设置,而必须通过\`currentStationRef\`来切换状态,修改\`currentStationRef\`切换状态后就会自动显示该状态下的UI组件,并且隐藏其他状态下的UI组件。
|
|
277
284
|
|
|
278
285
|
`;
|
|
279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZVJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwQ29kZVJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxUmpELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdW5kZXJzdGFuZGluZ0NvZGVGcmFtZXdvcmtUZW1wbGF0ZSA9IGBcbiMgKirlv4XpobvlhYjnkIbop6Ppobnnm67ku6PnoIHmoYbmnrYxMOS4quefpeivhueCuSoqXG4jIyAxLiAqKueQhuino1ZpZXfnu4Tku7bnmoTlo7DmmI7lkozkvb/nlKjop4TliJkqKlxuICAtIOi/meS4jeaYr2h0bWzjgIFyZWFjdOetieW8gOWPke+8jOi/meaYr+S4gOS4quaWsOeahOW8gOWPkeahhuaetu+8jOaYr+WfuuS6jnNyYy9saWIvdWlsaWLmlofku7blpLnph4zpnaLnmoRVSee7hOS7tuW6k+adpeW8gOWPkeeahFxuICAtIFZpZXfnu4Tku7bnmoTln7rnsbvmmK9CYXNlVmlld++8jOWuueWZqOWfuuexu+aYr0Jhc2VDb250YWluZXJWaWV377yM5omA5pyJVmlld+e7hOS7tumDvee7p+aJv+iHqkJhc2VWaWV3XG4gIC0g5p+l55yLJ3NyYy9saWIvdWlsaWIvJ+aWh+S7tuWkueS4i+mdoueahOaWh+S7tuWQjeWtl++8jOeQhuino+aAu+WFseacieWkmuWwkeenjVVJ57uE5Lu2XG4gIC0g5omA5pyJdmlld+e7hOS7tueahOWjsOaYju+8jOW/hemhu+S9v+eUqFxcYGZpbmRWaWV3QnlJZChpZDogc3RyaW5nKVxcYOaWueazlei1i+WAvO+8jOWFtuS4remHjOmdoueahOWPguaVsFxcYGlkXFxg5b+F6aG75LuOXFxgc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS97cGFnZU5hbWVFTn0ubWRcXGDmn6Xmib7ojrflj5bliLDmraPnoa7nmoRpZOeahOWAvFxuICAtIOemgeatouS/ruaUuVxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1kXFxg5paH5Lu26YeM6Z2i55qE5Luj56CB77yM5q2k5paH5Lu25Y+q6K+7XG4gIC0gVmlld+e7hOS7tueahOWjsOaYjuW/hemhu+WcqOexu+aWh+S7tuW8gOWni+aXtuWFiOWjsOaYju+8jOW5tuS4lOW/hemhu+imgeWjsOaYjuWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvIzkuI3lvpflo7DmmI7kuLpCYXNlVmlld++8jOS4jeW+l+WcqOS7u+S9leWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvIzmr5TlpoLvvJpcbiAgICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHVibGljIGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gICAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5rKh5pyJ5aOw5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8ie+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKVxuICAgIFxcYFxcYFxcYFxuICAgIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOWcqOWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvInvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHJpdmF0ZSBvbmVGdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gIC0g5omA5pyJVmlld+e7hOS7tueahOaYvuekuuOAgemakOiXj+WNoOS9jeOAgemakOiXj+S4jeWNoOS9jeeahOiuvue9rumDveW/hemhu+S9v+eUqFZpZXfnmoRcXGB2aXNpYmlsaXR5XFxg5bGe5oCn6L+b6KGM6K6+572u77yM5LiN5b6X5L2/55SoXFxgc3RhdGlvblxcYOWxnuaAp+OAglxuICAtIOaJgOaciVZpZXfnu4Tku7bnmoRub3JtYWzjgIFyZWFkT25seeOAgWZvY3Vz44CBc2VsZWN0ZWTjgIFkaXNhYmxlZOeKtuaAgeeahOWPmOWMlumDveW/hemhu+S9v+eUqHZpZXfnmoTlsZ7mgKdzdGF0aW9u5p2l55u05o6l6K6+572u77yM5q+U5aaC77yaXFxgdGhpcy5uYW1lSW5wdXRWaWV3LnN0YXRpb24gPSBWaWV3U3RhdGlvbi5Gb2N1c1xcYO+8jOWPr+mAieWAvOacie+8mlZpZXdTdGF0aW9uLk5PUk1BTOOAgVZpZXdTdGF0aW9uLlJFQURPTkxZ44CBVmlld1N0YXRpb24uRk9DVVNFROOAgVZpZXdTdGF0aW9uLlNFTEVDVEVE44CBVmlld1N0YXRpb24uRElTQUJMRUTjgIJcblxuIyMgMi4gKirnkIbop6PllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c+S7peWPimpzb27nm7jlhbPku6PnoIEqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+75bm255CG6KejJ3NyYy9saWIvQWxsRnVuY3Rpb24udHMn5paH5Lu277yM55CG6Kej6K+l5bel56iL6IO95L2/55So55qE5ZSv5LiA55qE6IO95Yqb5pa55rOVXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6XlhbfpmIXor7vlubbnkIbop6Mnc3JjL2xpYi9Kc29uT2JqZWN0LnRzJ+WSjCdzcmMvbGliL0pzb25BcnJheS50cyfmlofku7bvvIznkIbop6Pov5nkuKTkuKrmlofku7blrprkuYnnmoRqc29u55u45YWz55qE5pa55rOVXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIC0g5omA5pyJ55qEdG9hc3Tmj5DnpLrvvIzlv4XpobvosIPnlKhBbGxGdW5jdGlvbi5zaG93VG9hc3Tmlrnms5XmnaXmmL7npLrvvIzlubbkuJTlpoLnlKjmiLfmj4/ov7DmsqHmnInmmI7noa7or7TmmI7pnIDopoF0b2FzdOaPkOekuu+8jOS9oOS4jeW+l+aTheiHqui/m+ihjFRvYXN05o+Q56S644CCXG4gIC0g5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG4gIC0g5omA5pyJbG9jYWxTdG9yYWdl5pys5Zyw5pWw5o2u5a2Y5YKo6YO95b+F6aG75L2/55SoQWxsRnVuY3Rpb27nmoRzYXZlRGF0YWJhc2VCb29sZWFu44CBc2F2ZURhdGFiYXNlTnVtYmVy44CBc2F2ZURhdGFiYXNlU3RyaW5n44CBc2F2ZURhdGFiYXNlQXJyYXnjgIFzYXZlRGF0YWJhc2VPYmplY3Tmlrnms5XmnaXlrZjlgqjmlbDmja7vvIzkvb/nlKhnZXREYXRhYmFzZUJvb2xlYW7jgIFnZXREYXRhYmFzZU51bWJlcuOAgWdldERhdGFiYXNlU3RyaW5n44CBZ2V0RGF0YWJhc2VBcnJheeOAgWdldERhdGFiYXNlT2JqZWN05pa55rOV5p2l6I635Y+W5pWw5o2u44CCXG5cbiMjIDMuICoq55CG6KejUmVm44CBd2F0Y2gqKlxuICAtIFJlZueahOaVsOaNruexu+Wei+WPquiDveaYr+S7peS4izXkuK3nsbvlnovvvJrmlbDlrZfkvb/nlKhSZWY8bnVtYmVyPu+8jOWtl+espuS4suS9v+eUqFJlZjxzdHJpbmc+77yM5biD5bCU6YeP5L2/55SoUmVmPGJvb2xlYW4+77yM5a+56LGh5L2/55SoUmVmPGFueT7vvIzmlbDnu4Tkvb/nlKhSZWY8QXJyYXk8YW55Pj7miJZSZWY8QXJyYXk8YW55PiB8IG51bGw+5oiWUmVmPGFueVtdPuaIllJlZjxhbnlbXSB8IG51bGw+44CCXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6XlhbfpmIXor7vlubbnkIbop6Mnc3JjL2xpYi9SZWYudHMn5paH5Lu277yM55CG6KejUmVm5ZKMd2F0Y2jnmoTlrprkuYnnlKjms5VcbiAgLSB3YXRjaOaYr+ebkeWQrFJlZueahOWPmOWMlu+8jOeEtuWQjuWBmuebuOWFs1VJ5pu05paw5oiW5YW25LuW5Lia5Yqh6YC76L6R77yM56ys5LiA5Liq5Y+C5pWw5piv55uR5ZCs55qEUmVm5pWw57uE77yM56ys5LqM5Liq5Y+C5pWw5piv55uR5ZCs55qE5Zue6LCD5Ye95pWw77yM5Zue6LCD5Ye95pWw5Lit5Y+v5Lul5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHjgIJcbiAgLSBSZWbmmK/lk43lupTlvI/mlbDmja7mupDvvIx3YXRjaOaYr+ebkeWQrFJlZueahOWPmOWMlu+8jOeEtuWQjuWBmuebuOWFs1VJ5pu05paw5oiW5YW25LuW5Lia5Yqh6YC76L6R77yM5q+U5aaC77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgcHJpdmF0ZSBuYW1lVGV4dFJlZjogUmVmPHN0cmluZz4gPSByZWYoJycpXG4gIHByaXZhdGUgb3RoZXJDb3VudFJlZjogUmVmPG51bWJlcj4gPSByZWYoMClcbiAgd2F0Y2goW3RoaXMubmFtZVRleHRSZWYsIHRoaXMub3RoZXJDb3VudFJlZl0sICgpID0+IHtcbiAgICAvLyDlj6/ku6XlhYjnm7jlhbPnmoRVSeabtOaWsOaIluS4muWKoemAu+i+kVxuICAgIGlmICh0aGlzLm90aGVyQ291bnRSZWYudmFsdWUgPiA1KSB7XG4gICAgICB0aGlzLm5hbWVUZXh0Vmlldy50ZXh0ID0gdGhpcy5uYW1lVGV4dFJlZi52YWx1ZSArICc1J1xuICAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYW1lVGV4dFZpZXcudGV4dCA9IHRoaXMubmFtZVRleHRSZWYudmFsdWUgKyAnMTAnXG4gICAgfVxuICB9KVxuICBcXGBcXGBcXGBcbiAgLSBcXGBzcmMvbGliL3VpbGliL1JlZi50c1xcYOmHjOmdoueahFxcYHdhdGNoXFxg5Ye95pWw77yM56ys5LiA5Liq5YWl5Y+CXFxgcmVmczogUmVmPFQ+W11cXGDnu53lr7nnpoHmraLlhYjlo7DmmI7lsYByZWbmlbDnu4Tpg6jlj5jph4/lho3kvKDlhaXvvIzmraPnoa7nmoTlhpnms5XlupTor6XmmK/nm7TmjqXlhpnmlbDnu4TvvJpcXGBbcmVmMSwgcmVmMl1cXGDlsLHooYxcbiAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXG4gICAgXFxgXFxgXFxgIHR5cGVzY3JpcHRcbiAgICBjb25zdCByZWZBcnJheSA9IFtyZWYxLCByZWYyXVxuICAgIHdhdGNoKHJlZkFycmF5LCAobmV3VmFsdWVzOiBUW10pID0+IHtcbiAgICAgICAgLy8g55uR5ZCscmVmMeWSjHJlZjLnmoTlj5jljJZcbiAgICB9KVxuICAgIFxcYFxcYFxcYFxuICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgdHlwZXNjcmlwdFxuICAgIHdhdGNoKFtyZWYxLCByZWYyXSwgKG5ld1ZhbHVlczogVFtdKSA9PiB7XG4gICAgICAgIC8vIOebkeWQrHJlZjHlkoxyZWYy55qE5Y+Y5YyWXG4gICAgfSlcbiAgICBcXGBcXGBcXGBcblxuIyMgNC4gKirnkIbop6NzZXREYXRhTGlzdOaWueazleeahOmdmeaAgeaVsOaNruS4juWKqOaAgeaVsOaNruWcuuaZryoqXG4gIC0g5a+55LqO5Yqo5oCB5pWw5o2u5a655ZmoVmlld1BhZ2Vy44CBTGlzdFZpZXfnmoRzZXREYXRhTGlzdOaWueazle+8jOWmguaenOaVsOaNruaYr+WKqOaAgeeahO+8jOavlOWmgu+8muS7juWQjuerr+aOpeWPo+iOt+WPlueahO+8jOaJjeiDveS9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CC6Z2Z5oCB5pWw5o2u5bey57uP5ZyoVUnpobXpnaLkuIrlhpnlpb3kuobvvIzkvaDkuI3lvpfkvb/nlKhzZXREYXRhTGlzdOaWueazleadpeiuvue9ruaVsOaNruOAglxuICAtIOWIpOaWreagh+WHhu+8muWmguaenFVJ6aG16Z2i5Lit5bey57uP5pyJ5a6M5pW055qE6L2u5pKt6aG555uuL+WIl+ihqOmhueebru+8jOWwseaYr+mdmeaAgeaVsOaNru+8jOWmguaenOaYr+e9kee7nEFQSei/lOWbnueahOaVsOaNruWIl+ihqOWwseaYr+WKqOaAgeaVsOaNruOAglxuICAtIOKchSDpnZnmgIHmlbDmja7lrrnlmajvvIhVSemhtemdouS4reW3suWGmeWlveWGheWuue+8ie+8muS4jeS9v+eUqHNldERhdGFMaXN0KClcbiAgLSDinIUg5Yqo5oCB5pWw5o2u5a655Zmo77yI6ZyA6KaB5LuOQVBJ6I635Y+W77yJ77ya5omN5L2/55Soc2V0RGF0YUxpc3QoKVxuXG4jIyA1LiAqKlZpZXfnu4Tku7bvvIznkIbop6Pmr4/kuKrnu4Tku7blj6/og73ph4zpnaLlt7Lnu4/mnInkuoblk43lupTlvI/mlbDmja7mupDvvIzlpoLmnpznu4Tku7bph4zpnaLlt7Lnu4/mnInkuoblk43lupTlvI/mlbDmja7mupDvvIzpgqPkuYjkvaDkuI3lvpflho3oh6rlt7HliJvlu7pyZWblj5jph4/miJbogIXkvb/nlKhvblNlbGVjdENoYW5nZeetieWbnuiwg+inpuWPkVVJ5pu05pawKipcbiAgLSDkvovlrZDvvJpWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXjlkoxjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKflt7Lnu4/mmK/lk43lupTlvI/mlbDmja7mupDvvIzlj6/ku6Xnm7TmjqXkvb/nlKhjdXJyZW50U2VsZWN0SW5kZXhSZWbmnaXnu5Hlrproh6rliqjmm7TmlrBVSeOAglxuICAgIHB1YmxpYyBpbml0VmlldygpIHtcbiAgICAgIHRoaXMuc2hvd0luZGV4VGV4dFZpZXcudGV4dCA9IHRoaXMudmlld1BhZ2VyLmN1cnJlbnRTZWxlY3RJbmRleFJlZi52YWx1ZSArIDEgKyAnLycgKyB0aGlzLnZpZXdQYWdlci5kYXRhTGlzdC5sZW5ndGhcbiAgICB9XG4gIC0g5L6L5a2Q77yaVmlld1BhZ2Vy55qEY3VycmVudFNlbGVjdEluZGV45ZKMY3VycmVudFNlbGVjdEluZGV4UmVm5bGe5oCn5bey57uP5piv5ZON5bqU5byP5pWw5o2u5rqQ77yM5Y+v5Lul55u05o6l5L2/55SoY3VycmVudFNlbGVjdEluZGV4UmVm5p2l57uR5a6a6Ieq5Yqo5pu05pawVUnvvIzmr5TlpoLvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHVibGljIGluaXRWaWV3KCkge1xuICAgICAgd2F0Y2goW3RoaXMudmlld1BhZ2VyLmN1cnJlbnRTZWxlY3RJbmRleFJlZl0sICgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93SW5kZXhUZXh0Vmlldy50ZXh0ID0gdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlICsgMSArICcvJyArIHRoaXMudmlld1BhZ2VyLmRhdGFMaXN0Lmxlbmd0aFxuICAgICAgfSlcbiAgICBcXGBcXGBcXGBcbiAgLSB0YWLnu4Tku7blkozova7mkq3nu4Tku7bnmoTpgInmi6nlj5jljJbnm5HlkKzvvIzlv4Xpobvkvb/nlKhcXGBWaWV3UGFnZXJcXGDmiJZcXGBUYWJDb250YWluZXJcXGDnmoRcXGBvblNlbGVjdENoYW5nZShmdW5jOiAoaXRlbTogYW55LCBwb3NpdGlvbjogbnVtYmVyKSA9PiB2b2lkKVxcYOWHveaVsOadpeebkeWQrOmAieaLqeWPmOWMllxuXG4jIyA2LiAqKueQhuino+mhtemdoui3s+i9rCoqXG4gIC0g57yW5YaZ6Lez6L2s6aG16Z2i55qE5Luj56CB5pe277yM5b+F6aG76KaB5YWI5p+l55yL55uu5qCH6aG16Z2i55qEdHPmlofku7bvvIznoa7orqTnm67moIfpobXpnaLmmK/lkKblrZjlnKjvvIzlpoLmnpzlrZjlnKjpgqPkuYjlv4XpobvopoHkvb/nlKhcXGBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IHh4eFBhZ2UoeHh4KVxcYOadpei3s+i9rOWIsOebruagh+mhtemdonh4eFBhZ2XvvIznu53lr7nkuI3og73mlbfooY3lnLDkvb/nlKhcXGBBbGxGdW5jdGlvbi5zaG93VG9hc3RcXGDmnaXmqKHmi5/mj5DnpLrot7PovazpobXpnaLvvIzpmaTpnZ7nm67moIfpobXpnaLkuI3lrZjlnKjjgIJcbiAgLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g4p2MIOmhtemdoui3s+i9rOS4jemcgOiAg+iZkeaooeWdl+WMluOAgeW+queOr+S+nei1luOAgea4kOi/m+W8j+W8gOWPke+8jOe7neWvueemgeatouWxj+iUvemhtemdoui3s+i9rOeahOS7o+egge+8jOaJgOaciemhtemdoumDveW3sue7j+WtmOWcqO+8jOS4jeS8muWHuueOsOe8luivkeWHuumUmeeahO+8jOW/hemhu+aYjuehruWGmeS4iumhtemdoui3s+i9rOeahOS7o+eggeWSjOebruagh+mhtemdouaJgOmcgOeahOi3s+i9rOWPguaVsOOAglxuICAtIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgICBwcm90ZWN0ZWQgb25BcHBsaWNhdGlvbkNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgU3BsYXNoUGFnZSgpKVxuICAgIH1cbiAgLSDinIUg5byV5YWl5YW25LuW57G75Y+q5YWB6K645LiA56eN5YaZ5rOV77ya5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuICAtIOKdjCDnu53lr7nnpoHmraLkvb/nlKjliqjmgIFpbXBvcnTnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICAgIGltcG9ydCgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLnRoZW4oKHsgZGVmYXVsdDogR3VpZGVQYWdlIH0pID0+IHtcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkpXG4gICAgICAgIH0pXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqHJlcXVpcmXnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s6ZyA6KaB5Lyg6YCS5Y+C5pWw77yM6YKj5LmI6ZyA6KaB5L2/55SoUGFnZeeahOWtkOexu+aehOmAoOWHveaVsOadpeS8oOmAkuWPguaVsO+8jOavlOWmgu+8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDlnKjlrp7njrDpobXpnaLot7Povazku6PnoIHnmoTml7blgJnvvIzlv4XpobvkuKXmoLzmjInnhafku6XkuIvkuInmraXmnaXlrp7njrDvvJpcbiAgICAgIC0gKirnrKzkuIDmraXvvJrlhYjliIbmnpDot7PovaznmoTnm67moIfpobXpnaLpnIDopoHkvKDpgJLlk6rkupvlj4LmlbAqKlxuICAgICAgLSAqKuesrOS6jOatpe+8muS/ruaUueebruagh+mhtemdouaehOmAoOWHveaVsCoq77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkaW5nUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgICAgICAgIHByaXZhdGUgYm9va0lkOiBudW1iZXJcbiAgICAgICAgICBwcml2YXRlIGNoYXB0ZXJUaXRsZTogc3RyaW5nXG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3RydWN0b3IoYm9va0lkOiBudW1iZXIsIGNoYXB0ZXJUaXRsZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgIHN1cGVyKClcbiAgICAgICAgICAgICAgdGhpcy5ib29rSWQgPSBib29rSWRcbiAgICAgICAgICAgICAgdGhpcy5jaGFwdGVyVGl0bGUgPSBjaGFwdGVyVGl0bGVcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBcXGBcXGBcXGBcbiAgICAgIC0gKirnrKzkuInmraXvvJrkv67mlLnot7Povazku6PnoIEqKlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgY29uc3QgYm9va0RhdGEgPSB0aGlzLnJlYWRpbmdIaXN0b3J5RGF0YVJlZi52YWx1ZVswXVxuICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWFkaW5nUGFnZShib29rRGF0YS5pZCwgYm9va0RhdGEuY2hhcHRlclRpdGxlKSlcbiAgICAgIFxcYFxcYFxcYFxuXG4jIyA3LiAqKueQhuino+WfuuehgOW8gOWPkeinhOWImSoqXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g5Lu75L2V6aG16Z2i77yI54m55Yir5piv6Zeq5bGP6aG177yJ55qE5Lia5Yqh6YC76L6R57ud5a+55LiN6IO95pS+5YiwQXBwbGljYXRpb24udHPov5vooYzlpITnkIbvvIxBcHBsaWNhdGlvbi50c+WPqui/m+ihjOWFqOWxgOe9kee7nOaLpuaIquWkhOeQhuOAgeWFqOWxgOmdmeaAgeWPmOmHj+OAgeWFqOWxgOmdmeaAgeaWueazleeahOWumuS5ieWSjOWunueOsFxuICAtIOWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj++8jOW5tuWcqEFwcGxpY2F0aW9uLnRz5Lit6L+b6KGM5aOw5piO44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5aOw5piO5YWo5bGA5Y+Y6YeP44CB5bGA6YOo5Y+Y6YeP5b+F6aG76KaB5aOw5piO5pWw5o2u57G75Z6L77yM5bm25LiU57ud5a+556aB5q2i5L2/55SoYW5577yM6K+35L2/55So5YW35L2T57G75Z6L5p2l5aOw5piOXG4gIC0g6L2u5pKtVmlld1BhZ2Vy5a+55bqU55qE57Si5byV5oyH56S65Zmo5a655Zmo77yM6L+Z5Liq57Si5byV5oyH56S65Zmo5LiN6ZyA6KaB6aKd5aSW5Luj56CB5a6e546w5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHvvIzmnKzouqtWaWV3UGFnZXLkuI5JbmRpY2F0b3JDb250YWluZXLlupXlsYLlt7Lnu4/lrp7njrDkuobliIfmjaLnmoRVSeabtOaWsOmAu+i+keeahOS6hu+8jOWPqumcgOimgXZpZXdQYWdlci5iaW5kSW5kaWNhdG9yKGluZGljYXRvckNvbnRhaW5lcinljbPlj6/jgIJcbiAgLSBUYWLpgInpobnljaFcXGBUYWJOYXZpZ2F0ZUJhclxcYOWSjFxcYFRhYk5hdmlnYXRlQmFySXRlbVxcYOeahOeCueWHu+WIh+aNolVJ5pu05paw6YC76L6R77yM5LiN5b6X5ZyodHPku6PnoIHph4zpnaLov5vooYzvvIzlm6DkuLpUYWLpgInpobnljaHlhoXpg6jlt7Lnu4/lsIHoo4Xlpb3kuobmu5Hliqjlkozngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS9oOS4jemcgOimgeWGjeaJi+WKqOWunueOsOOAglxuICAtIOW6lemDqOWvvOiIquagj1xcYGJvdHRvbVRhYk5hdmlnYXRlQmFyXFxg5ZKMXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJJdGVtXFxg55qE5ruR5Yqo5ZKM54K55Ye75YiH5o2iVUnmm7TmlrDpgLvovpHvvIzkuI3lvpflnKh0c+S7o+eggemHjOmdoui/m+ihjO+8jOWboOS4uuW6lemDqOWvvOiIquagj+WGhemDqOW3sue7j+WwgeijheWlveS6hueCueWHu+WIh+aNolVJ5pu05paw6YC76L6R77yM5L2g5LiN6ZyA6KaB5YaN5omL5Yqo5a6e546w77yM5q+U5aaC6aaW6aG15Li75L2T6aG155qE5bqV6YOo5a+86Iiq5qCP77yM5LiN6ZyA6KaB5a6e546w54K55Ye75YiH5o2iVUnmm7TmlrDpgLvovpHvvIzlm6DkuLrlupXpg6jlr7zoiKrmoI/nmoTngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+keW3sue7j+iHquWKqOWunueOsOS6huOAglxuICAtIOavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5bu66K6u5ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i77yM6aG16Z2i5paH5Lu25aS55LiL5aaC5p6c6ZyA6KaB6L+Y5Y+v5Yib5bu65LiA5Liq6aG16Z2i5pWw5o2udHPmlofku7Yo5aaCbG9naW5QYWdlRGF0YS50cynvvIzov5nmoLflpoJsb2dpblBhZ2XotJ/otKPkuJrliqHpgLvovpHlkozkuqTkupLpgLvovpHvvIzlpoJsb2dpblBhZ2VEYXRh6LSf6LSj5pWw5o2u5aOw5piO5a6a5LmJ44CB5Yid5aeL5YyW5LiO566h55CG562J44CCXG5cbiMjIDguICoq55CG6Kej5ZCO56uvQVBJ5o6l5Y+j55qE5a6a5LmJ5LiO5L2/55SoKipcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+ivu+WPlidzcmMvYmFja2VuZEFwaS9iYWNrZW5kQXBpSW5mby5tZCflkI7nq69BUEnkvb/nlKjor7TmmI7mlofku7bvvIzlv4XpobvnvJPlrZjorrDkvY/miYDmnInlj6/nlKjnmoTlkI7nq69BUEnmjqXlj6PliJfooajjgIJcbiAgLSDlkI7nq69BUEnmjqXlj6PnmoTlrprkuYnkuI7kvb/nlKjvvIzlv4Xpobvkvb/nlKhzcmMvYmFja2VuZEFwaeaWh+S7tuWkuemHjOmdoueahOWQhOenjUFQSeexu+S4reWumuS5ieeahOaWueazle+8jOS4jeWFgeiuuOS9v+eUqOacquWcqGJhY2tlbmRBcGnmlofku7blpLnkuK3lrprkuYnnmoTlkI7nq69BUEnvvIzmr5TlpoLvvJpiYWNrZW5kQXBpL2FjY291bnQvZ2V0VXNlckluZm8udHPvvIzov5nkuKrlsLHmmK/otKblj7fmqKHlnZfkuK3nmoTojrflj5bnlKjmiLfkv6Hmga/nmoRBUEnnsbvvvIzov5Tlm57nmoRyZXPlv4Xpobvlo7DmmI7lhbfkvZPnsbvlnovvvIzmr5TlpoJyZXM6IGdldFVzZXJJbmZvUmVzcG9uc2XjgIJcbiAgLSByZXF1ZXN05o6l5Y+j5Y+q6ZyA5a6a5LmJ5Y2z5Y+v77yM5LiN6ZyA6KaB5a6e546w77yM5bqV5bGC5bey57uP5a6e546w44CCXG4gIC0gQVBJ57G75Luj56CB56S65L6L77yaXG4gICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgIGltcG9ydCB7IE5ldEZhaWxEYXRhIH0gZnJvbSAnLi4vLi4vbGliL05ldEZhaWxEYXRhJ1xuICAgIGltcG9ydCBCYXNlQXBpIGZyb20gJy4uL0Jhc2VBcGknXG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j6K+35rGC5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVxdWVzdCB7XG4gICAgICAgIHVzZXJuYW1lPzogc3RyaW5nXG4gICAgICAgIHBhc3N3b3JkPzogc3RyaW5nXG4gICAgICAgIGtleT86IHN0cmluZ1xuICAgICAgICBjYXB0Y2hhPzogc3RyaW5nXG4gICAgfVxuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+i/lOWbnuaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6NcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIGV4dGVuZHMgQmFzZUFwaSAge1xuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVxdWVzdF9BcnR1WDFkOGE2QShcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0LFxuICAgICAgICAgICAgc3VjY2VzczogKHJlczogcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlKSA9PiB2b2lkLFxuICAgICAgICAgICAgZmFpbDogKGVycm9yOiBOZXRGYWlsRGF0YSkgPT4gdm9pZFxuICAgICAgICApOiB2b2lkIHsgfVxuXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAtIEFQSeexu+eahOS9v+eUqOaWueW8j++8muWFiGltcG9ydCBBUEnnsbvvvIznhLblkI7osIPnlKhBUEnnsbvnmoRyZXF1ZXN05pa55rOV77yM5q+U5aaC77yaXG4gICAgaW1wb3J0IHsgTmV0RmFpbERhdGEgfSBmcm9tIFwiLi4vLi4vbGliL05ldEZhaWxEYXRhXCJcbiAgICBpbXBvcnQgeyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIH0gZnJvbSAnLi4vLi4vYmFja2VuZEFwaS9hY2NvdW50L3Bvc3RDbGllbnRCaXpBdXRoTG9naW4nXG4gICAgLi4uXG4gICAgY29uc3QgcmVxdWVzdDogcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3QgPSB7XG4gICAgICB1c2VybmFtZTogJ2FkbWluJyxcbiAgICAgIHBhc3N3b3JkOiAnMTIzNDU2JyxcbiAgICAgIGtleTogJzEyMzQ1NicsXG4gICAgICBjYXB0Y2hhOiAnMTIzNDU2J1xuICAgIH1cbiAgICBwb3N0Q2xpZW50Qml6QXV0aExvZ2luLnJlcXVlc3RfQXJ0dVgxZDhhNkEocmVxdWVzdCwgKHJlc3BvbnNlOiBwb3N0Q2xpZW50Qml6QXV0aExvZ291dFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyDor7fmsYLmiJDlip/lkI7nmoTlpITnkIZcbiAgICB9LCAoZXJyb3I6IE5ldEZhaWxEYXRhKSA9PiB7XG4gICAgICAvLyDor7fmsYLlpLHotKXlkI7nmoTlpITnkIZcbiAgICB9KVxuICAgIC4uLlxuXG4jIyA5LiAqKueQhuino+iwg+eUqOWQjuerr2FwaeaOpeWPo+i/lOWbnuaVsOaNruWQjuS4jlVJ5pWw5o2u57uR5a6aKipcbiAgLSDlpoLmnpzmnInlkI7nq69hcGnmjqXlj6Por7fmsYLvvIzpgqPkuYjlv4XpobvlsIHoo4XkuIDkuKrlkI3lrZflj6vlgZpcXGBiaW5kRGF0YUZyb21OZXRcXGDnmoTmlrnms5XmnaXlpITnkIbosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumueahOmAu+i+kVxuICAtIOWcqOiwg+eUqOWQjuerr2FwaeaOpeWPo+i/lOWbnuaVsOaNruWQju+8jOW/hemhu+S4peagvOWPguiAg1xcYGFwaeaOpeWPo+i/lOWbnuaVsOaNruWQjuS4jlVJ5pWw5o2u57uR5a6a5L6L5a2QXFxg77yM6ZyA6KaB5qC55o2udnR5cGXmnaXlgZrmlbDmja7nu5HlrppcbiAgICAtIHZ0eXBlPVwidmVydGljYWxMaXN0Vmlld1wi44CBdnR5cGU9XCJob3Jpem9udGFsTGlzdFZpZXdcIuOAgXZ0eXBlPVwidmlld1BhZ2VyXCLnsbvlnovnmoToioLngrnnu4Tku7bvvIzpnIDopoHkvb/nlKhzZXREYXRhTGlzdOaWueazleadpee7keWumuaVsOaNru+8jOavlOWmgu+8mlxuICAgICAgdGhpcy54eHhWZXJ0aWNhbExpc3RWaWV3LnNldERhdGFMaXN0KHh4eFJlc3BvbnNlLmRhdGEubGlzdCnjgIF0aGlzLnh4eEhvcml6b250YWxMaXN0Vmlldy5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS54eHhMaXN0KeOAgXRoaXMueHh4Vmlld1BhZ2VyLnNldERhdGFMaXN0KHh4eFJlc3BvbnNlLnh4eExpc3QpXG4gICAgLSBcXGBzZXREYXRhTGlzdFxcYOeahOWFpeWPguW/hemhu+aYr+ebtOaOpeWGmeWQjuerr2Fwaei/lOWbnueahOaVsOaNrui3r+W+hO+8jOavlOWmgu+8mnh4eFJlc3BvbnNlLmRhdGEueHh4TGlzdO+8jOe7neWvueS4jeiDveS9v+eUqOWFqOWxgOWPmOmHj+WSjOWxgOmDqOWPmOmHj+i/m+ihjOaVsOaNrue7keWumu+8jOS4jeiDveWGmeWFtuS7lumAu+i+keS7o+egge+8jOavlOWmgu+8muS4jeiDveWGmWlm44CBZm9y44CBd2hpbGXnrYnlvqrnjq/or63lj6XvvIzkuI3og73lhpnlh73mlbDosIPnlKjnrYnjgIJcbiAgICAtIHZ0eXBlPVwibGlzdEl0ZW1DYXJkXCLjgIF2dHlwZT1cIm9uZVZpZXdQYWdlckNvbnRlbnRcIuexu+Wei+eahOiKgueCuee7hOS7tu+8jOmcgOimgea3seW6pumBjeWOhuWug+eahOesrDHkuKppdGVt55qE5a2p5a2Q77yM54S25ZCO57uT5ZCI5ZCO56uvYXBp6L+U5Zue55qEeHh4UmVzcG9uc2XnmoTmlbDmja7nu5PmnoTnu5nnrKwx5LiqaXRlbeiuvue9ruaVsOaNru+8jOazqOaEj+WPqumcgOe7meesrDHkuKppdGVt6IqC54K56K6+572u5pWw5o2u77yM6ICM5LiN5piv5omA5pyJaXRlbeiKgueCuemDveiuvue9ruaVsOaNru+8jOW5tuS4lOW/hemhu+aYr+ebtOaOpeWGmeWQjuerr2Fwaei/lOWbnueahOaVsOaNrui3r+W+hOeahOesrOS4gOS4qml0ZW1EYXRh55qE5pWw5o2u6Lev5b6E77yM5q+U5aaC77yaY29uc3QgaXRlbURhdGEgPSBkYXRhTGlzdFswXTsgdGhpcy5yZWNvbW1lbmRCb29rVGl0bGUxLnRleHQgPSBpdGVtRGF0YS54eHgudGl0bGVUZXh077yM57ud5a+55LiN6IO95L2/55So5YWo5bGA5Y+Y6YeP5ZKM5bGA6YOo5Y+Y6YeP6L+b6KGM5pWw5o2u57uR5a6a77yM5LiN6IO95YaZ5YW25LuW6YC76L6R5Luj56CB77yM5q+U5aaC77ya5LiN6IO95YaZaWbjgIFmb3LjgIF3aGlsZeetieW+queOr+ivreWPpe+8jOWmguaenOmcgOimgemAu+i+keWkhOeQhuWQjuaJjeiDveW+l+WHunRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh055qE5YC877yM6YKj5bCx5b+F6aG76KaB5bCB6KOF5LiA5LiqXFxgZ2V0eHh4KGl0ZW1EYXRhOiBhbnkpOiBzdHJpbmdcXGDmlrnms5XmnaXojrflj5bvvIznhLblkI46dGhpcy5yZWNvbW1lbmRCb29rVGl0bGUxLnRleHQgPSB0aGlzLmdldHh4eChpdGVtRGF0YSlcbiAgICAtIGFwaeaOpeWPo+i/lOWbnuaVsOaNruWQjuS4jlVJ5pWw5o2u57uR5a6a5L6L5a2Q77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICAvLyDlkI7nq694eHhBcGnov5Tlm57nmoR4eHhSZXNwb25zZeaVsOaNrue7k+aehFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlIHtcbiAgICAgICAgICBjb2RlOiBudW1iZXJcbiAgICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbGlzdDogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBudW1iZXIgLy8g5Lmm57GNSURcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3RyaW5nIC8vIOS5puexjeagh+mimFxuICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcjogc3RyaW5nIC8vIOS9nOiAheWQjeensFxuICAgICAgICAgICAgICAgICAgICAgIGNvdmVyVXJsOiBzdHJpbmcgLy8g5bCB6Z2i5Zu+54mHVVJMXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyAvLyDkuabnsY3nroDku4tcbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWU6IHN0cmluZyAvLyDliIbnsbvlkI3np7BcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSAvLyDkuabnsY3liJfooahcbiAgICAgICAgICAgICAgdG90YWw6IG51bWJlciAvLyDmgLvmlbDph49cbiAgICAgICAgICAgICAgcGFnZTogbnVtYmVyIC8vIOW9k+WJjemhteeggVxuICAgICAgICAgICAgICBzaXplOiBudW1iZXIgLy8g5q+P6aG15pWw6YePXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLi4uXG4gICAgICBwcml2YXRlIGJpbmREYXRhRnJvbU5ldChnZXRSZWNvbW1lbmRCb29rTGlzdERhdGE6IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UpIHtcbiAgICAgICAgLy8g6K6+572u5Lmm57GN5YiX6KGo5pWw5o2uXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va0xpc3Quc2V0RGF0YUxpc3QoZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhLmRhdGEubGlzdERhdGEpXG4gICAgICAgIC8vIOiuvue9ruesrDHkuKppdGVt6IqC54K55pWw5o2uXG4gICAgICAgIGNvbnN0IGxpc3RJdGVtRGF0YSA9IGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLmxpc3REYXRhWzBdXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va0NvdmVyMS5zcmMgPSBsaXN0SXRlbURhdGEuY292ZXJVcmxcbiAgICAgICAgdGhpcy5yZWNvbW1lbmRCb29rVGl0bGUxLnRleHQgPSBsaXN0SXRlbURhdGEudGl0bGVcbiAgICAgICAgdGhpcy5yZWNvbW1lbmRCb29rQXV0aG9yMS50ZXh0ID0gbGlzdEl0ZW1EYXRhLmF1dGhvclxuICAgICAgICAuLi5cbiAgICAgICAgLy8g6K6+572u6L2u5pKt5pWw5o2uXG4gICAgICAgIHRoaXMucmVjb21tZW5kVmlld1BhZ2VyLnNldERhdGFMaXN0KGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLnZpZXdQYWdlckRhdGEpXG4gICAgICAgIC8vIOiuvue9ruesrDHkuKppdGVt6IqC54K55pWw5o2uXG4gICAgICAgIGNvbnN0IHZpZVBhZ2VySXRlbURhdGEgPSBnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS52aWV3UGFnZXJEYXRhWzBdXG4gICAgICAgIHRoaXMucmVjb21tZW5kSW1hZ2UxLnNyYyA9IHZpZVBhZ2VySXRlbURhdGEuY292ZXJVcmxcbiAgICAgICAgdGhpcy5jYXJvdXNlbFRpdGxlMS50ZXh0ID0gdGhpcy5nZXRDYXJvdXNlbFRpdGxlRGF0YSh2aWVQYWdlckl0ZW1EYXRhKSAvLyDnlLHkuo7mnInlpI3mnYLnmoTpgLvovpHlpITnkIbvvIzmiYDku6Xlv4XpobvopoHlsIHoo4XkuIDkuKrmlrnms5XmnaXojrflj5ZcbiAgICAgIH1cbiAgICAgIHByaXZhdGUgZ2V0Q2Fyb3VzZWxUaXRsZURhdGEoaXRlbURhdGE6IGFueSkge1xuICAgICAgICBsZXQgdGl0bGUgPSAnJ1xuICAgICAgICBpZiAoaXRlbURhdGEudGl0bGUpIHtcbiAgICAgICAgICB0aXRsZSA9IGl0ZW1EYXRhLnRpdGxlXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbURhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aXRsZSA9IGl0ZW1EYXRhLmRlc2NyaXB0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS5jYXRlZ29yeU5hbWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGl0bGVcbiAgICAgIH1cbiAgICAgIC4uLlxuICAgICAgXFxgXFxgXFxgXG4gICAgLSDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNruaXtu+8jOWmguaenOihqOi+vuW8j+WPs+S+p+a2ieWPiumAu+i+kei/kOeul++8jOW/hemhu+WwgeijheaIkOS4gOS4quexu+aIkOWRmOaWueazle+8jOWmgu+8mlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgLy8g5raJ5Y+K6YC76L6R6L+Q566X5pe25pS55Li66LCD55So5LiA5Liq57G75oiQ5ZGY5pa55rOVXG4gICAgICB0aGlzLnJlY29tbWVuZEltYWdlMS5zcmMgPSB0aGlzLnh4eE1ldGhvZChnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlKVxuICAgICAgLy8g5aaC5p6c6KGo6L6+5byP5Y+z5L6n5raJ5Y+K6YC76L6R6L+Q566X77yM5bCB6KOF5oiQ5LiA5Liq57G75oiQ5ZGY5pa55rOVXG4gICAgICBwcml2YXRlIHh4eE1ldGhvZChyZXM6IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdG1wID0gZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZS5kYXRhLmxpc3RbMF0uY292ZXJVcmxcbiAgICAgICAgaWYgKHRtcCAmJiB0bXAubGVuZ3RoID4gNSkge1xuICAgICAgICAgICAgcmV0dXJuIHRtcCArICfplb/lkI3lrZcnXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRtcFxuICAgICAgfVxuICAgICAgXFxgXFxgXFxgXG4gICAgXG5cbiMjIDEwLiDkuIDkupvpq5jnuqdWaWV357uE5Lu25YaF6YOo5bey5bCB6KOF5aW96YC76L6R77yM5Zug5q2k5LiA5LqbVmlld+e7hOS7tuS4jemcgOimgeWBmuS7peS4i+S6i+aDhVxuLSDova7mkq1WaWV3UGFnZXLnmoTmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS4jeW+l+WcqHRz5Luj56CB6YeM6Z2i6L+b6KGM77yM5Zug5Li6Vmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHlt7Lnu4/oh6rliqjlrp7njrDkuobvvIzkvaDkuI3pnIDopoHlho3miYvliqjlrp7njrDjgIJcbi0gVGFi6YCJ6aG55Y2hXFxgVGFiTmF2aWdhdGVCYXJcXGDlkoxcXGBUYWJOYXZpZ2F0ZUJhckl0ZW1cXGDnmoTngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS4jeW+l+WcqHRz5Luj56CB6YeM6Z2i6L+b6KGM77yM5Zug5Li6VGFi6YCJ6aG55Y2h5YaF6YOo5bey57uP5bCB6KOF5aW95LqG5ruR5Yqo5ZKM54K55Ye75YiH5o2iVUnmm7TmlrDpgLvovpHvvIzkvaDkuI3pnIDopoHlho3miYvliqjlrp7njrDjgIJcbi0g5bqV6YOo5a+86Iiq5qCPXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJcXGDlkoxcXGBib3R0b21UYWJOYXZpZ2F0ZUJhckl0ZW1cXGDnmoTmu5Hliqjlkozngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS4jeW+l+WcqHRz5Luj56CB6YeM6Z2i6L+b6KGM77yM5Zug5Li65bqV6YOo5a+86Iiq5qCP5YaF6YOo5bey57uP5bCB6KOF5aW95LqG54K55Ye75YiH5o2iVUnmm7TmlrDpgLvovpHvvIzkvaDkuI3pnIDopoHlho3miYvliqjlrp7njrDjgIJcbi0g5a2Q6aG16Z2i5a655ZmoXFxgU3ViUGFnZUNvbnRhaW5lclxcYOS4jemcgOimgee8luWGmeS7u+S9leiuvue9rumhtemdouaIluWIh+aNoumhtemdoueahOmAu+i+keOAglxuLSDnpoHmraLlr7lJbWFnZVZpZXfov5vooYxjb2xvcuWxnuaAp+eahOiuvue9ruOAglxuLSDlpJrnirbmgIHlrrnlmahcXGBNdWx0aVN0YXRlQ29udGFpbmVyXFxg77yM56aB5q2i5a+55YW25YaF6YOo55qE5a2QVmlld+e7hOS7tui/m+ihjOebtOaOpeiuvue9ru+8jOiAjOW/hemhu+mAmui/h1xcYGN1cnJlbnRTdGF0aW9uUmVmXFxg5p2l5YiH5o2i54q25oCB77yM5L+u5pS5XFxgY3VycmVudFN0YXRpb25SZWZcXGDliIfmjaLnirbmgIHlkI7lsLHkvJroh6rliqjmmL7npLror6XnirbmgIHkuIvnmoRVSee7hOS7tu+8jOW5tuS4lOmakOiXj+WFtuS7lueKtuaAgeS4i+eahFVJ57uE5Lu244CCXG5cbmA7XG4iXX0=
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZVJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwQ29kZVJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNFJqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHVuZGVyc3RhbmRpbmdDb2RlRnJhbWV3b3JrVGVtcGxhdGUgPSBgXG4jICoq5b+F6aG75YWI55CG6Kej6aG555uu5Luj56CB5qGG5p62MTDkuKrnn6Xor4bngrkqKlxuIyMgMS4gKirnkIbop6NWaWV357uE5Lu255qE5aOw5piO5ZKM5L2/55So6KeE5YiZKipcbiAgLSDov5nkuI3mmK9odG1s44CBcmVhY3TnrYnlvIDlj5HvvIzov5nmmK/kuIDkuKrmlrDnmoTlvIDlj5HmoYbmnrbvvIzmmK/ln7rkuo5zcmMvbGliL3VpbGli5paH5Lu25aS56YeM6Z2i55qEVUnnu4Tku7blupPmnaXlvIDlj5HnmoRcbiAgLSBWaWV357uE5Lu255qE5Z+657G75pivQmFzZVZpZXfvvIzlrrnlmajln7rnsbvmmK9CYXNlQ29udGFpbmVyVmlld++8jOaJgOaciVZpZXfnu4Tku7bpg73nu6fmib/oh6pCYXNlVmlld1xuICAtIOafpeeciydzcmMvbGliL3VpbGliLyfmlofku7blpLnkuIvpnaLnmoTmlofku7blkI3lrZfvvIznkIbop6PmgLvlhbHmnInlpJrlsJHnp41VSee7hOS7tlxuICAtIOaJgOaciXZpZXfnu4Tku7bnmoTlo7DmmI7vvIzlv4Xpobvkvb/nlKhcXGBmaW5kVmlld0J5SWQoaWQ6IHN0cmluZylcXGDmlrnms5XotYvlgLzvvIzlhbbkuK3ph4zpnaLnmoTlj4LmlbBcXGBpZFxcYOW/hemhu+S7jlxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1kXFxg5p+l5om+6I635Y+W5Yiw5q2j56Gu55qEaWTnmoTlgLxcbiAgLSDnpoHmraLkv67mlLlcXGBzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZFxcYOaWh+S7tumHjOmdoueahOS7o+egge+8jOatpOaWh+S7tuWPquivu1xuICAtIFZpZXfnu4Tku7bnmoTlo7DmmI7lv4XpobvlnKjnsbvmlofku7blvIDlp4vml7blhYjlo7DmmI7vvIzlubbkuJTlv4XpobvopoHlo7DmmI7lhbfkvZPnmoRWaWV357uE5Lu257G75Z6L77yM5LiN5b6X5aOw5piO5Li6QmFzZVZpZXfvvIzkuI3lvpflnKjku7vkvZXlh73mlbDkvZPph4zpnaLpgJrov4dmaW5kVmlld0J5SWTmnaXlo7DmmI5WaWV357uE5Lu277yM5q+U5aaC77yaXG4gICAgLSDinIUg5q2j56Gu55qE5YaZ5rOV77yaXG4gICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgIHB1YmxpYyBjbGFzcyBIb21lUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgICAgcHJpdmF0ZSBuYW1lVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ25hbWVUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgICAuLi4uXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAgIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOayoeacieWjsOWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvInvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHJpdmF0ZSBuYW1lVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JylcbiAgICBcXGBcXGBcXGBcbiAgICAtIOKdjCDplJnor6/nmoTlhpnms5XvvIjlnKjlh73mlbDkvZPph4zpnaLpgJrov4dmaW5kVmlld0J5SWTmnaXlo7DmmI5WaWV357uE5Lu277yJ77yaXG4gICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgIHByaXZhdGUgb25lRnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBuYW1lVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ25hbWVUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgICAuLi4uXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAtIOaJgOaciVZpZXfnu4Tku7bnmoTmmL7npLrjgIHpmpDol4/ljaDkvY3jgIHpmpDol4/kuI3ljaDkvY3nmoTorr7nva7pg73lv4Xpobvkvb/nlKhWaWV355qEXFxgdmlzaWJpbGl0eVxcYOWxnuaAp+i/m+ihjOiuvue9ru+8jOS4jeW+l+S9v+eUqFxcYHN0YXRpb25cXGDlsZ7mgKfjgIJcbiAgLSDmiYDmnIlWaWV357uE5Lu255qEbm9ybWFs44CBcmVhZE9ubHnjgIFmb2N1c+OAgXNlbGVjdGVk44CBZGlzYWJsZWTnirbmgIHnmoTlj5jljJbpg73lv4Xpobvkvb/nlKh2aWV355qE5bGe5oCnc3RhdGlvbuadpeebtOaOpeiuvue9ru+8jOavlOWmgu+8mlxcYHRoaXMubmFtZUlucHV0Vmlldy5zdGF0aW9uID0gVmlld1N0YXRpb24uRm9jdXNcXGDvvIzlj6/pgInlgLzmnInvvJpWaWV3U3RhdGlvbi5OT1JNQUzjgIFWaWV3U3RhdGlvbi5SRUFET05MWeOAgVZpZXdTdGF0aW9uLkZPQ1VTRUTjgIFWaWV3U3RhdGlvbi5TRUxFQ1RFROOAgVZpZXdTdGF0aW9uLkRJU0FCTEVE44CCXG4gIC0g5omA5pyJVmlld+e7hOS7tijljIXmi6xCYXNlVmlld+OAgUJhc2VDb250YWluZXLku6Xlj4rlroPku6znmoTlrZDnsbsp55qE54K55Ye75LqL5Lu277yM6YO95Y+v5Lul55u05o6l5Zyodmlld+e7hOS7tueahOWjsOaYjuWQjumdoua3u+WKoFxcYHNldE9uQ2xpY2tMaXN0ZW5lclxcYOaWueazleadpeebkeWQrOeCueWHu+S6i+S7tu+8jOavlOWmgu+8mlxcYHRoaXMueHh4Q29udGFpbmVyLnNldE9uQ2xpY2tMaXN0ZW5lcigoKSA9PiB7IHRoaXMubmFtZVRleHRWaWV3LnRleHQgPSAn54K55Ye75LqGJyArIHRoaXMubmFtZVRleHRWaWV3LnRleHQgfSlcXGBcbiAgLSDmiYDmnInnmoRkaWFsb2flr7nor53moYbvvIzlv4XpobvosIPnlKhEaWFsb2fnu4Tku7bnmoRzaG935pa55rOV5p2l5pi+56S677yM5YWz6Zet5pe25b+F6aG76LCD55SoRGlhbG9n57uE5Lu255qEaGlkZeaWueazleadpeWFs+mXre+8jOavlOWmgu+8mnRoaXMueHh4RGlhbG9nLnNob3coKeOAgXRoaXMueHh4RGlhbG9nLmhpZGUoKe+8jOemgeatouS9v+eUqHZpZXfnmoR2aXNpYmlsaXR55bGe5oCn5p2l5pi+56S66ZqQ6JeP5a+56K+d5qGG44CCXG4gIC0g5omA5pyJ55qERHJvcERvd25NZW515LiL5ouJ6I+c5Y2V77yM5b+F6aG76LCD55SoRHJvcERvd25NZW5157uE5Lu255qEc2hvd+aWueazleadpeaYvuekuu+8jOWFs+mXreaXtuW/hemhu+iwg+eUqERyb3BEb3duTWVudee7hOS7tueahGhpZGXmlrnms5XmnaXlhbPpl63vvIzmr5TlpoLvvJp0aGlzLnh4eERyb3BEb3duTWVudS5zaG93KCnjgIF0aGlzLnh4eERyb3BEb3duTWVudS5oaWRlKCnvvIznpoHmraLkvb/nlKh2aWV355qEdmlzaWJpbGl0eeWxnuaAp+adpeaYvuekuumakOiXj+S4i+aLieiPnOWNleOAglxuICAtIOaJgOacieeahFNpZGVTbGlkZUNvbnRhaW5lcuS+p+a7keWuueWZqO+8jOW/hemhu+iwg+eUqFNpZGVTbGlkZUNvbnRhaW5lcue7hOS7tueahHNob3fmlrnms5XmnaXmmL7npLrvvIzlhbPpl63ml7blv4XpobvosIPnlKhTaWRlU2xpZGVDb250YWluZXLnu4Tku7bnmoRoaWRl5pa55rOV5p2l5YWz6Zet77yM5q+U5aaC77yadGhpcy54eHhTaWRlU2xpZGVDb250YWluZXIuc2hvdygp44CBdGhpcy54eHhTaWRlU2xpZGVDb250YWluZXIuaGlkZSgp77yM56aB5q2i5L2/55Sodmlld+eahHZpc2liaWxpdHnlsZ7mgKfmnaXmmL7npLrpmpDol4/kvqfmu5HlrrnlmajjgIJcblxuIyMgMi4gKirnkIbop6PllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c+S7peWPimpzb27nm7jlhbPku6PnoIEqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+75bm255CG6KejJ3NyYy9saWIvQWxsRnVuY3Rpb24udHMn5paH5Lu277yM55CG6Kej6K+l5bel56iL6IO95L2/55So55qE5ZSv5LiA55qE6IO95Yqb5pa55rOVXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6XlhbfpmIXor7vlubbnkIbop6Mnc3JjL2xpYi9Kc29uT2JqZWN0LnRzJ+WSjCdzcmMvbGliL0pzb25BcnJheS50cyfmlofku7bvvIznkIbop6Pov5nkuKTkuKrmlofku7blrprkuYnnmoRqc29u55u45YWz55qE5pa55rOVXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIC0g5omA5pyJ55qEdG9hc3Tmj5DnpLrvvIzlv4XpobvosIPnlKhBbGxGdW5jdGlvbi5zaG93VG9hc3Tmlrnms5XmnaXmmL7npLrvvIzlubbkuJTlpoLnlKjmiLfmj4/ov7DmsqHmnInmmI7noa7or7TmmI7pnIDopoF0b2FzdOaPkOekuu+8jOS9oOS4jeW+l+aTheiHqui/m+ihjFRvYXN05o+Q56S644CCXG4gIC0g5omA5pyJ55qEZGlhbG9n5a+56K+d5qGG77yM5b+F6aG76LCD55SoRGlhbG9n57uE5Lu255qEc2hvd+aWueazleadpeaYvuekuu+8jOWFs+mXreaXtuW/hemhu+iwg+eUqERpYWxvZ+e7hOS7tueahGhpZGXmlrnms5XmnaXlhbPpl63vvIzmr5TlpoLvvJp0aGlzLnh4eERpYWxvZy5zaG93KCnjgIF0aGlzLnh4eERpYWxvZy5oaWRlKCnvvIznpoHmraLkvb/nlKh2aWV355qEdmlzaWJpbGl0eeWxnuaAp+adpeaYvuekuumakOiXj+WvueivneahhuOAglxuICAtIOaJgOacieeahERyb3BEb3duTWVudeS4i+aLieiPnOWNle+8jOW/hemhu+iwg+eUqERyb3BEb3duTWVudee7hOS7tueahHNob3fmlrnms5XmnaXmmL7npLrvvIzlhbPpl63ml7blv4XpobvosIPnlKhEcm9wRG93bk1lbnXnu4Tku7bnmoRoaWRl5pa55rOV5p2l5YWz6Zet77yM5q+U5aaC77yadGhpcy54eHhEcm9wRG93bk1lbnUuc2hvdygp44CBdGhpcy54eHhEcm9wRG93bk1lbnUuaGlkZSgp77yM56aB5q2i5L2/55Sodmlld+eahHZpc2liaWxpdHnlsZ7mgKfmnaXmmL7npLrpmpDol4/kuIvmi4noj5zljZXjgIJcbiAgLSDmiYDmnInnmoRTaWRlU2xpZGVDb250YWluZXLkvqfmu5HlrrnlmajvvIzlv4XpobvosIPnlKhTaWRlU2xpZGVDb250YWluZXLnu4Tku7bnmoRzaG935pa55rOV5p2l5pi+56S677yM5YWz6Zet5pe25b+F6aG76LCD55SoU2lkZVNsaWRlQ29udGFpbmVy57uE5Lu255qEaGlkZeaWueazleadpeWFs+mXre+8jOavlOWmgu+8mnRoaXMueHh4U2lkZVNsaWRlQ29udGFpbmVyLnNob3coKeOAgXRoaXMueHh4U2lkZVNsaWRlQ29udGFpbmVyLmhpZGUoKe+8jOemgeatouS9v+eUqHZpZXfnmoR2aXNpYmlsaXR55bGe5oCn5p2l5pi+56S66ZqQ6JeP5L6n5ruR5a655Zmo44CCXG4gIC0g5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG4gIC0g5omA5pyJbG9jYWxTdG9yYWdl5pys5Zyw5pWw5o2u5a2Y5YKo6YO95b+F6aG75L2/55SoQWxsRnVuY3Rpb27nmoRzYXZlRGF0YWJhc2VCb29sZWFu44CBc2F2ZURhdGFiYXNlTnVtYmVy44CBc2F2ZURhdGFiYXNlU3RyaW5n44CBc2F2ZURhdGFiYXNlQXJyYXnjgIFzYXZlRGF0YWJhc2VPYmplY3Tmlrnms5XmnaXlrZjlgqjmlbDmja7vvIzkvb/nlKhnZXREYXRhYmFzZUJvb2xlYW7jgIFnZXREYXRhYmFzZU51bWJlcuOAgWdldERhdGFiYXNlU3RyaW5n44CBZ2V0RGF0YWJhc2VBcnJheeOAgWdldERhdGFiYXNlT2JqZWN05pa55rOV5p2l6I635Y+W5pWw5o2u44CCXG5cbiMjIDMuICoq55CG6KejUmVm44CBd2F0Y2gqKlxuICAtIFJlZueahOaVsOaNruexu+Wei+WPquiDveaYr+S7peS4izXkuK3nsbvlnovvvJrmlbDlrZfkvb/nlKhSZWY8bnVtYmVyPu+8jOWtl+espuS4suS9v+eUqFJlZjxzdHJpbmc+77yM5biD5bCU6YeP5L2/55SoUmVmPGJvb2xlYW4+77yM5a+56LGh5L2/55SoUmVmPGFueT7vvIzmlbDnu4Tkvb/nlKhSZWY8QXJyYXk8YW55Pj7miJZSZWY8QXJyYXk8YW55PiB8IG51bGw+5oiWUmVmPGFueVtdPuaIllJlZjxhbnlbXSB8IG51bGw+44CCXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6XlhbfpmIXor7vlubbnkIbop6Mnc3JjL2xpYi9SZWYudHMn5paH5Lu277yM55CG6KejUmVm5ZKMd2F0Y2jnmoTlrprkuYnnlKjms5VcbiAgLSB3YXRjaOaYr+ebkeWQrFJlZueahOWPmOWMlu+8jOeEtuWQjuWBmuebuOWFs1VJ5pu05paw5oiW5YW25LuW5Lia5Yqh6YC76L6R77yM56ys5LiA5Liq5Y+C5pWw5piv55uR5ZCs55qEUmVm5pWw57uE77yM56ys5LqM5Liq5Y+C5pWw5piv55uR5ZCs55qE5Zue6LCD5Ye95pWw77yM5Zue6LCD5Ye95pWw5Lit5Y+v5Lul5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHjgIJcbiAgLSBSZWbmmK/lk43lupTlvI/mlbDmja7mupDvvIx3YXRjaOaYr+ebkeWQrFJlZueahOWPmOWMlu+8jOeEtuWQjuWBmuebuOWFs1VJ5pu05paw5oiW5YW25LuW5Lia5Yqh6YC76L6R77yM5q+U5aaC77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgcHJpdmF0ZSBuYW1lVGV4dFJlZjogUmVmPHN0cmluZz4gPSByZWYoJycpXG4gIHByaXZhdGUgb3RoZXJDb3VudFJlZjogUmVmPG51bWJlcj4gPSByZWYoMClcbiAgd2F0Y2goW3RoaXMubmFtZVRleHRSZWYsIHRoaXMub3RoZXJDb3VudFJlZl0sICgpID0+IHtcbiAgICAvLyDlj6/ku6XlhYjnm7jlhbPnmoRVSeabtOaWsOaIluS4muWKoemAu+i+kVxuICAgIGlmICh0aGlzLm90aGVyQ291bnRSZWYudmFsdWUgPiA1KSB7XG4gICAgICB0aGlzLm5hbWVUZXh0Vmlldy50ZXh0ID0gdGhpcy5uYW1lVGV4dFJlZi52YWx1ZSArICc1J1xuICAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYW1lVGV4dFZpZXcudGV4dCA9IHRoaXMubmFtZVRleHRSZWYudmFsdWUgKyAnMTAnXG4gICAgfVxuICB9KVxuICBcXGBcXGBcXGBcbiAgLSBcXGBzcmMvbGliL3VpbGliL1JlZi50c1xcYOmHjOmdoueahFxcYHdhdGNoXFxg5Ye95pWw77yM56ys5LiA5Liq5YWl5Y+CXFxgcmVmczogUmVmPFQ+W11cXGDnu53lr7nnpoHmraLlhYjlo7DmmI7lsYByZWbmlbDnu4Tpg6jlj5jph4/lho3kvKDlhaXvvIzmraPnoa7nmoTlhpnms5XlupTor6XmmK/nm7TmjqXlhpnmlbDnu4TvvJpcXGBbcmVmMSwgcmVmMl1cXGDlsLHooYxcbiAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXG4gICAgXFxgXFxgXFxgIHR5cGVzY3JpcHRcbiAgICBjb25zdCByZWZBcnJheSA9IFtyZWYxLCByZWYyXVxuICAgIHdhdGNoKHJlZkFycmF5LCAobmV3VmFsdWVzOiBUW10pID0+IHtcbiAgICAgICAgLy8g55uR5ZCscmVmMeWSjHJlZjLnmoTlj5jljJZcbiAgICB9KVxuICAgIFxcYFxcYFxcYFxuICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgdHlwZXNjcmlwdFxuICAgIHdhdGNoKFtyZWYxLCByZWYyXSwgKG5ld1ZhbHVlczogVFtdKSA9PiB7XG4gICAgICAgIC8vIOebkeWQrHJlZjHlkoxyZWYy55qE5Y+Y5YyWXG4gICAgfSlcbiAgICBcXGBcXGBcXGBcblxuIyMgNC4gKirnkIbop6NzZXREYXRhTGlzdOaWueazleeahOmdmeaAgeaVsOaNruS4juWKqOaAgeaVsOaNruWcuuaZryoqXG4gIC0g5a+55LqO5Yqo5oCB5pWw5o2u5a655ZmoVmlld1BhZ2Vy44CBTGlzdFZpZXfnmoRzZXREYXRhTGlzdOaWueazle+8jOWmguaenOaVsOaNruaYr+WKqOaAgeeahO+8jOavlOWmgu+8muS7juWQjuerr+aOpeWPo+iOt+WPlueahO+8jOaJjeiDveS9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CC6Z2Z5oCB5pWw5o2u5bey57uP5ZyoVUnpobXpnaLkuIrlhpnlpb3kuobvvIzkvaDkuI3lvpfkvb/nlKhzZXREYXRhTGlzdOaWueazleadpeiuvue9ruaVsOaNruOAglxuICAtIOWIpOaWreagh+WHhu+8muWmguaenFVJ6aG16Z2i5Lit5bey57uP5pyJ5a6M5pW055qE6L2u5pKt6aG555uuL+WIl+ihqOmhueebru+8jOWwseaYr+mdmeaAgeaVsOaNru+8jOWmguaenOaYr+e9kee7nEFQSei/lOWbnueahOaVsOaNruWIl+ihqOWwseaYr+WKqOaAgeaVsOaNruOAglxuICAtIOKchSDpnZnmgIHmlbDmja7lrrnlmajvvIhVSemhtemdouS4reW3suWGmeWlveWGheWuue+8ie+8muS4jeS9v+eUqHNldERhdGFMaXN0KClcbiAgLSDinIUg5Yqo5oCB5pWw5o2u5a655Zmo77yI6ZyA6KaB5LuOQVBJ6I635Y+W77yJ77ya5omN5L2/55Soc2V0RGF0YUxpc3QoKVxuXG4jIyA1LiAqKlZpZXfnu4Tku7bvvIznkIbop6Pmr4/kuKrnu4Tku7blj6/og73ph4zpnaLlt7Lnu4/mnInkuoblk43lupTlvI/mlbDmja7mupDvvIzlpoLmnpznu4Tku7bph4zpnaLlt7Lnu4/mnInkuoblk43lupTlvI/mlbDmja7mupDvvIzpgqPkuYjkvaDkuI3lvpflho3oh6rlt7HliJvlu7pyZWblj5jph4/miJbogIXkvb/nlKhvblNlbGVjdENoYW5nZeetieWbnuiwg+inpuWPkVVJ5pu05pawKipcbiAgLSDkvovlrZDvvJpWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXjlkoxjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKflt7Lnu4/mmK/lk43lupTlvI/mlbDmja7mupDvvIzlj6/ku6Xnm7TmjqXkvb/nlKhjdXJyZW50U2VsZWN0SW5kZXhSZWbmnaXnu5Hlrproh6rliqjmm7TmlrBVSeOAglxuICAgIHB1YmxpYyBpbml0VmlldygpIHtcbiAgICAgIHRoaXMuc2hvd0luZGV4VGV4dFZpZXcudGV4dCA9IHRoaXMudmlld1BhZ2VyLmN1cnJlbnRTZWxlY3RJbmRleFJlZi52YWx1ZSArIDEgKyAnLycgKyB0aGlzLnZpZXdQYWdlci5kYXRhTGlzdC5sZW5ndGhcbiAgICB9XG4gIC0g5L6L5a2Q77yaVmlld1BhZ2Vy55qEY3VycmVudFNlbGVjdEluZGV45ZKMY3VycmVudFNlbGVjdEluZGV4UmVm5bGe5oCn5bey57uP5piv5ZON5bqU5byP5pWw5o2u5rqQ77yM5Y+v5Lul55u05o6l5L2/55SoY3VycmVudFNlbGVjdEluZGV4UmVm5p2l57uR5a6a6Ieq5Yqo5pu05pawVUnvvIzmr5TlpoLvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHVibGljIGluaXRWaWV3KCkge1xuICAgICAgd2F0Y2goW3RoaXMudmlld1BhZ2VyLmN1cnJlbnRTZWxlY3RJbmRleFJlZl0sICgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93SW5kZXhUZXh0Vmlldy50ZXh0ID0gdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlICsgMSArICcvJyArIHRoaXMudmlld1BhZ2VyLmRhdGFMaXN0Lmxlbmd0aFxuICAgICAgfSlcbiAgICBcXGBcXGBcXGBcbiAgLSB0YWLnu4Tku7blkozova7mkq3nu4Tku7bnmoTpgInmi6nlj5jljJbnm5HlkKzvvIzlv4Xpobvkvb/nlKhcXGBWaWV3UGFnZXJcXGDmiJZcXGBUYWJDb250YWluZXJcXGDnmoRcXGBvblNlbGVjdENoYW5nZShmdW5jOiAoaXRlbTogYW55LCBwb3NpdGlvbjogbnVtYmVyKSA9PiB2b2lkKVxcYOWHveaVsOadpeebkeWQrOmAieaLqeWPmOWMllxuXG4jIyA2LiAqKueQhuino+mhtemdoui3s+i9rCoqXG4gIC0g57yW5YaZ6Lez6L2s6aG16Z2i55qE5Luj56CB5pe277yM5b+F6aG76KaB5YWI5p+l55yL55uu5qCH6aG16Z2i55qEdHPmlofku7bvvIznoa7orqTnm67moIfpobXpnaLmmK/lkKblrZjlnKjvvIzlpoLmnpzlrZjlnKjpgqPkuYjlv4XpobvopoHkvb/nlKhcXGBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IHh4eFBhZ2UoeHh4KVxcYOadpei3s+i9rOWIsOebruagh+mhtemdonh4eFBhZ2XvvIznu53lr7nkuI3og73mlbfooY3lnLDkvb/nlKhcXGBBbGxGdW5jdGlvbi5zaG93VG9hc3RcXGDmnaXmqKHmi5/mj5DnpLrot7PovazpobXpnaLvvIzpmaTpnZ7nm67moIfpobXpnaLkuI3lrZjlnKjjgIJcbiAgLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g4p2MIOmhtemdoui3s+i9rOS4jemcgOiAg+iZkeaooeWdl+WMluOAgeW+queOr+S+nei1luOAgea4kOi/m+W8j+W8gOWPke+8jOe7neWvueemgeatouWxj+iUvemhtemdoui3s+i9rOeahOS7o+egge+8jOaJgOaciemhtemdoumDveW3sue7j+WtmOWcqO+8jOS4jeS8muWHuueOsOe8luivkeWHuumUmeeahO+8jOW/hemhu+aYjuehruWGmeS4iumhtemdoui3s+i9rOeahOS7o+eggeWSjOebruagh+mhtemdouaJgOmcgOeahOi3s+i9rOWPguaVsOOAglxuICAtIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgICBwcm90ZWN0ZWQgb25BcHBsaWNhdGlvbkNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgU3BsYXNoUGFnZSgpKVxuICAgIH1cbiAgLSDinIUg5byV5YWl5YW25LuW57G75Y+q5YWB6K645LiA56eN5YaZ5rOV77ya5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuICAtIOKdjCDnu53lr7nnpoHmraLkvb/nlKjliqjmgIFpbXBvcnTnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICAgIGltcG9ydCgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLnRoZW4oKHsgZGVmYXVsdDogR3VpZGVQYWdlIH0pID0+IHtcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkpXG4gICAgICAgIH0pXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqHJlcXVpcmXnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s6ZyA6KaB5Lyg6YCS5Y+C5pWw77yM6YKj5LmI6ZyA6KaB5L2/55SoUGFnZeeahOWtkOexu+aehOmAoOWHveaVsOadpeS8oOmAkuWPguaVsO+8jOavlOWmgu+8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDlnKjlrp7njrDpobXpnaLot7Povazku6PnoIHnmoTml7blgJnvvIzlv4XpobvkuKXmoLzmjInnhafku6XkuIvkuInmraXmnaXlrp7njrDvvJpcbiAgICAgIC0gKirnrKzkuIDmraXvvJrlhYjliIbmnpDot7PovaznmoTnm67moIfpobXpnaLpnIDopoHkvKDpgJLlk6rkupvlj4LmlbAqKlxuICAgICAgLSAqKuesrOS6jOatpe+8muS/ruaUueebruagh+mhtemdouaehOmAoOWHveaVsCoq77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkaW5nUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgICAgICAgIHByaXZhdGUgYm9va0lkOiBudW1iZXJcbiAgICAgICAgICBwcml2YXRlIGNoYXB0ZXJUaXRsZTogc3RyaW5nXG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3RydWN0b3IoYm9va0lkOiBudW1iZXIsIGNoYXB0ZXJUaXRsZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgIHN1cGVyKClcbiAgICAgICAgICAgICAgdGhpcy5ib29rSWQgPSBib29rSWRcbiAgICAgICAgICAgICAgdGhpcy5jaGFwdGVyVGl0bGUgPSBjaGFwdGVyVGl0bGVcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBcXGBcXGBcXGBcbiAgICAgIC0gKirnrKzkuInmraXvvJrkv67mlLnot7Povazku6PnoIEqKlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgY29uc3QgYm9va0RhdGEgPSB0aGlzLnJlYWRpbmdIaXN0b3J5RGF0YVJlZi52YWx1ZVswXVxuICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWFkaW5nUGFnZShib29rRGF0YS5pZCwgYm9va0RhdGEuY2hhcHRlclRpdGxlKSlcbiAgICAgIFxcYFxcYFxcYFxuXG4jIyA3LiAqKueQhuino+WfuuehgOW8gOWPkeinhOWImSoqXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g5Lu75L2V6aG16Z2i77yI54m55Yir5piv6Zeq5bGP6aG177yJ55qE5Lia5Yqh6YC76L6R57ud5a+55LiN6IO95pS+5YiwQXBwbGljYXRpb24udHPov5vooYzlpITnkIbvvIxBcHBsaWNhdGlvbi50c+WPqui/m+ihjOWFqOWxgOe9kee7nOaLpuaIquWkhOeQhuOAgeWFqOWxgOmdmeaAgeWPmOmHj+OAgeWFqOWxgOmdmeaAgeaWueazleeahOWumuS5ieWSjOWunueOsFxuICAtIOWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj++8jOW5tuWcqEFwcGxpY2F0aW9uLnRz5Lit6L+b6KGM5aOw5piO44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5aOw5piO5YWo5bGA5Y+Y6YeP44CB5bGA6YOo5Y+Y6YeP5b+F6aG76KaB5aOw5piO5pWw5o2u57G75Z6L77yM5bm25LiU57ud5a+556aB5q2i5L2/55SoYW5577yM6K+35L2/55So5YW35L2T57G75Z6L5p2l5aOw5piOXG4gIC0g6L2u5pKtVmlld1BhZ2Vy5a+55bqU55qE57Si5byV5oyH56S65Zmo5a655Zmo77yM6L+Z5Liq57Si5byV5oyH56S65Zmo5LiN6ZyA6KaB6aKd5aSW5Luj56CB5a6e546w5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHvvIzmnKzouqtWaWV3UGFnZXLkuI5JbmRpY2F0b3JDb250YWluZXLlupXlsYLlt7Lnu4/lrp7njrDkuobliIfmjaLnmoRVSeabtOaWsOmAu+i+keeahOS6hu+8jOWPqumcgOimgXZpZXdQYWdlci5iaW5kSW5kaWNhdG9yKGluZGljYXRvckNvbnRhaW5lcinljbPlj6/jgIJcbiAgLSBUYWLpgInpobnljaFcXGBUYWJOYXZpZ2F0ZUJhclxcYOWSjFxcYFRhYk5hdmlnYXRlQmFySXRlbVxcYOeahOeCueWHu+WIh+aNolVJ5pu05paw6YC76L6R77yM5LiN5b6X5ZyodHPku6PnoIHph4zpnaLov5vooYzvvIzlm6DkuLpUYWLpgInpobnljaHlhoXpg6jlt7Lnu4/lsIHoo4Xlpb3kuobmu5Hliqjlkozngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS9oOS4jemcgOimgeWGjeaJi+WKqOWunueOsOOAglxuICAtIOW6lemDqOWvvOiIquagj1xcYGJvdHRvbVRhYk5hdmlnYXRlQmFyXFxg5ZKMXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJJdGVtXFxg55qE5ruR5Yqo5ZKM54K55Ye75YiH5o2iVUnmm7TmlrDpgLvovpHvvIzkuI3lvpflnKh0c+S7o+eggemHjOmdoui/m+ihjO+8jOWboOS4uuW6lemDqOWvvOiIquagj+WGhemDqOW3sue7j+WwgeijheWlveS6hueCueWHu+WIh+aNolVJ5pu05paw6YC76L6R77yM5L2g5LiN6ZyA6KaB5YaN5omL5Yqo5a6e546w77yM5q+U5aaC6aaW6aG15Li75L2T6aG155qE5bqV6YOo5a+86Iiq5qCP77yM5LiN6ZyA6KaB5a6e546w54K55Ye75YiH5o2iVUnmm7TmlrDpgLvovpHvvIzlm6DkuLrlupXpg6jlr7zoiKrmoI/nmoTngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+keW3sue7j+iHquWKqOWunueOsOS6huOAglxuICAtIOavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5b+F6aG75ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i44CCXG5cbiMjIDguICoq55CG6Kej5ZCO56uvQVBJ5o6l5Y+j55qE5a6a5LmJ5LiO5L2/55SoKipcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+ivu+WPlidzcmMvYmFja2VuZEFwaS9iYWNrZW5kQXBpSW5mby5tZCflkI7nq69BUEnkvb/nlKjor7TmmI7mlofku7bvvIzlv4XpobvnvJPlrZjorrDkvY/miYDmnInlj6/nlKjnmoTlkI7nq69BUEnmjqXlj6PliJfooajjgIJcbiAgLSDlkI7nq69BUEnmjqXlj6PnmoTlrprkuYnkuI7kvb/nlKjvvIzlv4Xpobvkvb/nlKhzcmMvYmFja2VuZEFwaeaWh+S7tuWkuemHjOmdoueahOWQhOenjUFQSeexu+S4reWumuS5ieeahOaWueazle+8jOS4jeWFgeiuuOS9v+eUqOacquWcqGJhY2tlbmRBcGnmlofku7blpLnkuK3lrprkuYnnmoTlkI7nq69BUEnvvIzmr5TlpoLvvJpiYWNrZW5kQXBpL2FjY291bnQvZ2V0VXNlckluZm8udHPvvIzov5nkuKrlsLHmmK/otKblj7fmqKHlnZfkuK3nmoTojrflj5bnlKjmiLfkv6Hmga/nmoRBUEnnsbvvvIzov5Tlm57nmoRyZXPlv4Xpobvlo7DmmI7lhbfkvZPnsbvlnovvvIzmr5TlpoJyZXM6IGdldFVzZXJJbmZvUmVzcG9uc2XjgIJcbiAgLSByZXF1ZXN05o6l5Y+j5Y+q6ZyA5a6a5LmJ5Y2z5Y+v77yM5LiN6ZyA6KaB5a6e546w77yM5bqV5bGC5bey57uP5a6e546w44CCXG4gIC0gQVBJ57G75Luj56CB56S65L6L77yaXG4gICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgIGltcG9ydCB7IE5ldEZhaWxEYXRhIH0gZnJvbSAnLi4vLi4vbGliL05ldEZhaWxEYXRhJ1xuICAgIGltcG9ydCBCYXNlQXBpIGZyb20gJy4uL0Jhc2VBcGknXG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j6K+35rGC5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVxdWVzdCB7XG4gICAgICAgIHVzZXJuYW1lPzogc3RyaW5nXG4gICAgICAgIHBhc3N3b3JkPzogc3RyaW5nXG4gICAgICAgIGtleT86IHN0cmluZ1xuICAgICAgICBjYXB0Y2hhPzogc3RyaW5nXG4gICAgfVxuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+i/lOWbnuaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6NcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIGV4dGVuZHMgQmFzZUFwaSAge1xuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVxdWVzdF9BcnR1WDFkOGE2QShcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0LFxuICAgICAgICAgICAgc3VjY2VzczogKHJlczogcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlKSA9PiB2b2lkLFxuICAgICAgICAgICAgZmFpbDogKGVycm9yOiBOZXRGYWlsRGF0YSkgPT4gdm9pZFxuICAgICAgICApOiB2b2lkIHsgfVxuXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAtIEFQSeexu+eahOS9v+eUqOaWueW8j++8muWFiGltcG9ydCBBUEnnsbvvvIznhLblkI7osIPnlKhBUEnnsbvnmoRyZXF1ZXN05pa55rOV77yM5q+U5aaC77yaXG4gICAgaW1wb3J0IHsgTmV0RmFpbERhdGEgfSBmcm9tIFwiLi4vLi4vbGliL05ldEZhaWxEYXRhXCJcbiAgICBpbXBvcnQgeyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIH0gZnJvbSAnLi4vLi4vYmFja2VuZEFwaS9hY2NvdW50L3Bvc3RDbGllbnRCaXpBdXRoTG9naW4nXG4gICAgLi4uXG4gICAgY29uc3QgcmVxdWVzdDogcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3QgPSB7XG4gICAgICB1c2VybmFtZTogJ2FkbWluJyxcbiAgICAgIHBhc3N3b3JkOiAnMTIzNDU2JyxcbiAgICAgIGtleTogJzEyMzQ1NicsXG4gICAgICBjYXB0Y2hhOiAnMTIzNDU2J1xuICAgIH1cbiAgICBwb3N0Q2xpZW50Qml6QXV0aExvZ2luLnJlcXVlc3RfQXJ0dVgxZDhhNkEocmVxdWVzdCwgKHJlc3BvbnNlOiBwb3N0Q2xpZW50Qml6QXV0aExvZ291dFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyDor7fmsYLmiJDlip/lkI7nmoTlpITnkIZcbiAgICB9LCAoZXJyb3I6IE5ldEZhaWxEYXRhKSA9PiB7XG4gICAgICAvLyDor7fmsYLlpLHotKXlkI7nmoTlpITnkIZcbiAgICB9KVxuICAgIC4uLlxuXG4jIyA5LiAqKueQhuino+iwg+eUqOWQjuerr2FwaeaOpeWPo+i/lOWbnuaVsOaNruWQjuS4jlVJ5pWw5o2u57uR5a6aKipcbiAgLSDlv4Xpobvmn6XnnIt4eHhQYWdlLm1k5paH5Lu26YeM6Z2i55qE6K+l6IqC54K55piv5ZCm5pyJ5aOw5piOZnJvbUFwaU9yQ2FjaGVEYXRhKHRydWUp55qE5oOF5Ya177yM5aaC5p6c5pyJ5aOw5piO6KGo56S66K+l6IqC54K56ZyA6KaB5LuO5ZCO56uvYXBp5o6l5Y+j6I635Y+W5pWw5o2u77yM6YKj5LmI5b+F6aG75bCB6KOF5LiA5Liq5ZCN5a2X5Y+r5YGaXFxgYmluZERhdGFGcm9tTmV0XFxg55qE5pa55rOV5p2l5aSE55CG6LCD55So5ZCO56uvYXBp5o6l5Y+j6L+U5Zue5pWw5o2u5ZCO5LiOVUnmlbDmja7nu5HlrprnmoTpgLvovpHjgIJcbiAgLSDlnKjosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7vvIzlv4XpobvkuKXmoLzlj4LogINcXGBhcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumuS+i+WtkFxcYO+8jOmcgOimgeagueaNrnZ0eXBl5p2l5YGa5pWw5o2u57uR5a6aXG4gICAgLSB2dHlwZT1cInZlcnRpY2FsTGlzdFZpZXdcIuOAgXZ0eXBlPVwiaG9yaXpvbnRhbExpc3RWaWV3XCLjgIF2dHlwZT1cInZpZXdQYWdlclwi44CBdnR5cGU9XCJpbmxpbmVCbG9ja0FuZFdyYXBcIuexu+Wei+eahOiKgueCuee7hOS7tu+8jOmcgOimgeS9v+eUqHNldERhdGFMaXN05pa55rOV5p2l57uR5a6a5pWw5o2u77yM5q+U5aaC77yaXG4gICAgICB0aGlzLnh4eFZlcnRpY2FsTGlzdFZpZXcuc2V0RGF0YUxpc3QoeHh4UmVzcG9uc2UuZGF0YS5saXN0KeOAgXRoaXMueHh4SG9yaXpvbnRhbExpc3RWaWV3LnNldERhdGFMaXN0KHh4eFJlc3BvbnNlLnh4eExpc3Qp44CBdGhpcy54eHhWaWV3UGFnZXIuc2V0RGF0YUxpc3QoeHh4UmVzcG9uc2UueHh4TGlzdClcbiAgICAtIFxcYHNldERhdGFMaXN0XFxg55qE5YWl5Y+C5b+F6aG75piv55u05o6l5YaZ5ZCO56uvYXBp6L+U5Zue55qE5pWw5o2u6Lev5b6E77yM5q+U5aaC77yaeHh4UmVzcG9uc2UuZGF0YS54eHhMaXN077yM57ud5a+55LiN6IO95L2/55So5YWo5bGA5Y+Y6YeP5ZKM5bGA6YOo5Y+Y6YeP6L+b6KGM5pWw5o2u57uR5a6a77yM5LiN6IO95YaZ5YW25LuW6YC76L6R5Luj56CB77yM5q+U5aaC77ya5LiN6IO95YaZaWbjgIFmb3LjgIF3aGlsZeetieW+queOr+ivreWPpe+8jOS4jeiDveWGmeWHveaVsOiwg+eUqOetieOAglxuICAgIC0gdnR5cGU9XCJsaXN0SXRlbUNhcmRcIuOAgXZ0eXBlPVwib25lVmlld1BhZ2VyQ29udGVudFwi57G75Z6L55qE6IqC54K557uE5Lu277yM6ZyA6KaB5rex5bqm6YGN5Y6G5a6D55qE56ysMeS4qml0ZW3nmoTlranlrZDvvIznhLblkI7nu5PlkIjlkI7nq69hcGnov5Tlm57nmoR4eHhSZXNwb25zZeeahOaVsOaNrue7k+aehOe7meesrDHkuKppdGVt6K6+572u5pWw5o2u77yM5rOo5oSP5Y+q6ZyA57uZ56ysMeS4qml0ZW3oioLngrnorr7nva7mlbDmja7vvIzogIzkuI3mmK/miYDmnIlpdGVt6IqC54K56YO96K6+572u5pWw5o2u77yM5bm25LiU5b+F6aG75piv55u05o6l5YaZ5ZCO56uvYXBp6L+U5Zue55qE5pWw5o2u6Lev5b6E55qE56ys5LiA5LiqaXRlbURhdGHnmoTmlbDmja7ot6/lvoTvvIzmr5TlpoLvvJpjb25zdCBpdGVtRGF0YSA9IGRhdGFMaXN0WzBdOyB0aGlzLnJlY29tbWVuZEJvb2tUaXRsZTEudGV4dCA9IGl0ZW1EYXRhLnh4eC50aXRsZVRleHTvvIznu53lr7nkuI3og73kvb/nlKjlhajlsYDlj5jph4/lkozlsYDpg6jlj5jph4/ov5vooYzmlbDmja7nu5HlrprvvIzkuI3og73lhpnlhbbku5bpgLvovpHku6PnoIHvvIzmr5TlpoLvvJrkuI3og73lhplpZuOAgWZvcuOAgXdoaWxl562J5b6q546v6K+t5Y+l77yM5aaC5p6c6ZyA6KaB6YC76L6R5aSE55CG5ZCO5omN6IO95b6X5Ye6dGhpcy5yZWNvbW1lbmRCb29rVGl0bGUxLnRleHTnmoTlgLzvvIzpgqPlsLHlv4XpobvopoHlsIHoo4XkuIDkuKpcXGBnZXR4eHgoaXRlbURhdGE6IGFueSk6IHN0cmluZ1xcYOaWueazleadpeiOt+WPlu+8jOeEtuWQjjp0aGlzLnJlY29tbWVuZEJvb2tUaXRsZTEudGV4dCA9IHRoaXMuZ2V0eHh4KGl0ZW1EYXRhKVxuICAgIC0gYXBp5o6l5Y+j6L+U5Zue5pWw5o2u5ZCO5LiOVUnmlbDmja7nu5HlrprkvovlrZDvvJpcbiAgICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICAgIC8vIOWQjuerr3h4eEFwaei/lOWbnueahHh4eFJlc3BvbnNl5pWw5o2u57uT5p6EXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2Uge1xuICAgICAgICAgIGNvZGU6IG51bWJlclxuICAgICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsaXN0OiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IG51bWJlciAvLyDkuabnsY1JRFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzdHJpbmcgLy8g5Lmm57GN5qCH6aKYXG4gICAgICAgICAgICAgICAgICAgICAgYXV0aG9yOiBzdHJpbmcgLy8g5L2c6ICF5ZCN56ewXG4gICAgICAgICAgICAgICAgICAgICAgY292ZXJVcmw6IHN0cmluZyAvLyDlsIHpnaLlm77niYdVUkxcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIC8vIOS5puexjeeugOS7i1xuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5TmFtZTogc3RyaW5nIC8vIOWIhuexu+WQjeensFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdIC8vIOS5puexjeWIl+ihqFxuICAgICAgICAgICAgICB0b3RhbDogbnVtYmVyIC8vIOaAu+aVsOmHj1xuICAgICAgICAgICAgICBwYWdlOiBudW1iZXIgLy8g5b2T5YmN6aG156CBXG4gICAgICAgICAgICAgIHNpemU6IG51bWJlciAvLyDmr4/pobXmlbDph49cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAuLi5cbiAgICAgIHByaXZhdGUgYmluZERhdGFGcm9tTmV0KGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YTogZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSkge1xuICAgICAgICAvLyDorr7nva7kuabnsY3liJfooajmlbDmja5cbiAgICAgICAgdGhpcy5yZWNvbW1lbmRCb29rTGlzdC5zZXREYXRhTGlzdChnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS5saXN0RGF0YSlcbiAgICAgICAgLy8g6K6+572u56ysMeS4qml0ZW3oioLngrnmlbDmja5cbiAgICAgICAgY29uc3QgbGlzdEl0ZW1EYXRhID0gZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhLmRhdGEubGlzdERhdGFbMF1cbiAgICAgICAgdGhpcy5yZWNvbW1lbmRCb29rQ292ZXIxLnNyYyA9IGxpc3RJdGVtRGF0YS5jb3ZlclVybFxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tUaXRsZTEudGV4dCA9IGxpc3RJdGVtRGF0YS50aXRsZVxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tBdXRob3IxLnRleHQgPSBsaXN0SXRlbURhdGEuYXV0aG9yXG4gICAgICAgIC4uLlxuICAgICAgICAvLyDorr7nva7ova7mkq3mlbDmja5cbiAgICAgICAgdGhpcy5yZWNvbW1lbmRWaWV3UGFnZXIuc2V0RGF0YUxpc3QoZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhLmRhdGEudmlld1BhZ2VyRGF0YSlcbiAgICAgICAgLy8g6K6+572u56ysMeS4qml0ZW3oioLngrnmlbDmja5cbiAgICAgICAgY29uc3QgdmllUGFnZXJJdGVtRGF0YSA9IGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLnZpZXdQYWdlckRhdGFbMF1cbiAgICAgICAgdGhpcy5yZWNvbW1lbmRJbWFnZTEuc3JjID0gdmllUGFnZXJJdGVtRGF0YS5jb3ZlclVybFxuICAgICAgICB0aGlzLmNhcm91c2VsVGl0bGUxLnRleHQgPSB0aGlzLmdldENhcm91c2VsVGl0bGVEYXRhKHZpZVBhZ2VySXRlbURhdGEpIC8vIOeUseS6juacieWkjeadgueahOmAu+i+keWkhOeQhu+8jOaJgOS7peW/hemhu+imgeWwgeijheS4gOS4quaWueazleadpeiOt+WPllxuICAgICAgfVxuICAgICAgcHJpdmF0ZSBnZXRDYXJvdXNlbFRpdGxlRGF0YShpdGVtRGF0YTogYW55KSB7XG4gICAgICAgIGxldCB0aXRsZSA9ICcnXG4gICAgICAgIGlmIChpdGVtRGF0YS50aXRsZSkge1xuICAgICAgICAgIHRpdGxlID0gaXRlbURhdGEudGl0bGVcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtRGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHRpdGxlID0gaXRlbURhdGEuZGVzY3JpcHRpb25cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aXRsZSA9IGl0ZW1EYXRhLmNhdGVnb3J5TmFtZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aXRsZVxuICAgICAgfVxuICAgICAgLi4uXG4gICAgICBcXGBcXGBcXGBcbiAgICAtIOiuvue9ruesrDHkuKppdGVt6IqC54K55pWw5o2u5pe277yM5aaC5p6c6KGo6L6+5byP5Y+z5L6n5raJ5Y+K6YC76L6R6L+Q566X77yM5b+F6aG75bCB6KOF5oiQ5LiA5Liq57G75oiQ5ZGY5pa55rOV77yM5aaC77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICAvLyDmtonlj4rpgLvovpHov5Dnrpfml7bmlLnkuLrosIPnlKjkuIDkuKrnsbvmiJDlkZjmlrnms5VcbiAgICAgIHRoaXMucmVjb21tZW5kSW1hZ2UxLnNyYyA9IHRoaXMueHh4TWV0aG9kKGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UpXG4gICAgICAvLyDlpoLmnpzooajovr7lvI/lj7Pkvqfmtonlj4rpgLvovpHov5DnrpfvvIzlsIHoo4XmiJDkuIDkuKrnsbvmiJDlkZjmlrnms5VcbiAgICAgIHByaXZhdGUgeHh4TWV0aG9kKHJlczogZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0bXAgPSBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlLmRhdGEubGlzdFswXS5jb3ZlclVybFxuICAgICAgICBpZiAodG1wICYmIHRtcC5sZW5ndGggPiA1KSB7XG4gICAgICAgICAgICByZXR1cm4gdG1wICsgJ+mVv+WQjeWtlydcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG1wXG4gICAgICB9XG4gICAgICBcXGBcXGBcXGBcbiAgICBcblxuIyMgMTAuIOS4gOS6m+mrmOe6p1ZpZXfnu4Tku7blhoXpg6jlt7LlsIHoo4Xlpb3pgLvovpHvvIzlm6DmraTkuIDkuptWaWV357uE5Lu25LiN6ZyA6KaB5YGa5Lul5LiL5LqL5oOFXG4tIOi9ruaSrVZpZXdQYWdlcueahOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R77yM5LiN5b6X5ZyodHPku6PnoIHph4zpnaLov5vooYzvvIzlm6DkuLpWaWV3UGFnZXLnmoTmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+keW3sue7j+iHquWKqOWunueOsOS6hu+8jOS9oOS4jemcgOimgeWGjeaJi+WKqOWunueOsOOAglxuLSBUYWLpgInpobnljaFcXGBUYWJOYXZpZ2F0ZUJhclxcYOWSjFxcYFRhYk5hdmlnYXRlQmFySXRlbVxcYOeahOeCueWHu+WIh+aNolVJ5pu05paw6YC76L6R77yM5LiN5b6X5ZyodHPku6PnoIHph4zpnaLov5vooYzvvIzlm6DkuLpUYWLpgInpobnljaHlhoXpg6jlt7Lnu4/lsIHoo4Xlpb3kuobmu5Hliqjlkozngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS9oOS4jemcgOimgeWGjeaJi+WKqOWunueOsOOAglxuLSDlupXpg6jlr7zoiKrmoI9cXGBib3R0b21UYWJOYXZpZ2F0ZUJhclxcYOWSjFxcYGJvdHRvbVRhYk5hdmlnYXRlQmFySXRlbVxcYOeahOa7keWKqOWSjOeCueWHu+WIh+aNolVJ5pu05paw6YC76L6R77yM5LiN5b6X5ZyodHPku6PnoIHph4zpnaLov5vooYzvvIzlm6DkuLrlupXpg6jlr7zoiKrmoI/lhoXpg6jlt7Lnu4/lsIHoo4Xlpb3kuobngrnlh7vliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS9oOS4jemcgOimgeWGjeaJi+WKqOWunueOsOOAglxuLSDlrZDpobXpnaLlrrnlmahcXGBTdWJQYWdlQ29udGFpbmVyXFxg5LiN6ZyA6KaB57yW5YaZ5Lu75L2V6K6+572u6aG16Z2i5oiW5YiH5o2i6aG16Z2i55qE6YC76L6R44CCXG4tIOemgeatouWvuUltYWdlVmlld+i/m+ihjGNvbG9y5bGe5oCn55qE6K6+572u44CCXG4tIOWkmueKtuaAgeWuueWZqFxcYE11bHRpU3RhdGVDb250YWluZXJcXGDvvIznpoHmraLlr7nlhbblhoXpg6jnmoTlrZBWaWV357uE5Lu26L+b6KGM55u05o6l6K6+572u77yM6ICM5b+F6aG76YCa6L+HXFxgY3VycmVudFN0YXRpb25SZWZcXGDmnaXliIfmjaLnirbmgIHvvIzkv67mlLlcXGBjdXJyZW50U3RhdGlvblJlZlxcYOWIh+aNoueKtuaAgeWQjuWwseS8muiHquWKqOaYvuekuuivpeeKtuaAgeS4i+eahFVJ57uE5Lu277yM5bm25LiU6ZqQ6JeP5YW25LuW54q25oCB5LiL55qEVUnnu4Tku7bjgIJcblxuYDtcbiJdfQ==
|
package/build/uiDesignGuide.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const uiDesignGuidePromptTemplate = "\n# \u4F60\u662F UI \u8BBE\u8BA1\u5E08\u4E13\u5BB6\u3001\u4EE3\u7801\u5F00\u53D1\u4E13\u5BB6\uFF0C\u4F60\u5FC5\u987B\u6309\u7167`\u6267\u884C\u6B65\u9AA4\u6765`\u6267\u884C\u4EFB\u52A1\u3002\n\n## **\u6267\u884C\u8BBE\u8BA1\uFF1A\u6BCF\u4E00\u4E2A\u9875\u9762\u8BBE\u8BA1\u90FD\u5FC5\u987B\u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u4EE5\u4E0B 10 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 10 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\uFF0C\u5F97\u51FA\u8BE5\u529F\u80FD\u6A21\u5757\u73B0\u5728\u9700\u8981\u8BBE\u8BA1\u54EA\u4E00\u4E2A\u9875\u9762`pageNameEN`\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u90FD\u8BBE\u8BA1\u5B8C\u6210\u4E86\uFF0C\u90A3\u5C31\u505C\u6B62 AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`.bytefun/xxx\u529F\u80FD\u6A21\u5757.md` \u6587\u4EF6\uFF0C\u7406\u89E3\u5E76\u8F93\u51FA\u4E09\u90E8\u5206\u7684\u5185\u5BB9\u3002\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`.bytefun/UI\u8BBE\u8BA1\u89C4\u8303.md`UI\u89C4\u8303\u6587\u4EF6\u548C`.bytefun/ui-design-spec-demo.html`UI\u89C4\u8303\u6F14\u793A\u6587\u4EF6\uFF0C\u5B8C\u5168\u7406\u89E3\u638C\u63E1\u6574\u4E2AAPP\u7684UI\u8BBE\u8BA1\u89C4\u8303\uFF0C\u5305\u62EC\u6240\u6709\u989C\u8272\u3001\u5404\u79CD\u6587\u5B57\u3001\u5404\u79CD\u6309\u94AE\u3001\u5404\u79CD\u8F93\u5165\u6846\u3001\u6807\u9898\u680F\u3001\u5361\u7247\u3001\u5355\u9009\u3001\u591A\u9009\u7B49\u3002\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u7406\u89E3\u5E76\u9075\u5B88\u4EE5\u4E0B\u7981\u6B62\u7684\u591A\u4E2AUI\u8BBE\u8BA1\u4EE3\u7801\u5199\u6CD5\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`optimize_ui_design_prompt`\u4E25\u683C\u6309\u7167\u89C4\u5219\u8981\u6C42\uFF0C\u7136\u540E\u4E25\u683C\u9075\u5B88`optimize_ui_design_prompt`\u8FD4\u56DE\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u5B8C\u6210\u4E00\u4E2A`pageNameEN`html\u9875\u9762\u7684 UI \u8BBE\u8BA1\uFF0C\u5FC5\u987B\u6CE8\u610F\u4E00\u6B21\u53EA\u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\uFF08\u7981\u6B62 JS \u62FC\u63A5 html \u5B57\u7B26\u4E32\uFF0C\u7981\u6B62\u4F7F\u7528 js \u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728 html \u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\uFF09\u3002\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C6\u4E2AUI\u6837\u5F0F\u548C\u5C5E\u6027\u6B63\u786E\u6027\u548C\u5B8C\u6574\u6027\u7684\u68C0\u67E5\u3002\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\uFF0C\u7ED9 `nodeType` \u662F`oneStateContentContainer`\u3001`viewPagerItem`\u3001`tabPanel`\u7684\u8282\u70B9\u6DFB\u52A0\u663E\u793A\u548C\u9690\u85CF\u7684\u5207\u6362 js \u65B9\u6CD5:`switchTo{{\u8282\u70B9ID}}`\u3002\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C\u547D\u4EE4`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u8FDB\u884C\u4EE3\u7801\u68C0\u67E5\u548C\u4FEE\u590D\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u5F3A\u5236\u66F4\u65B0'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u7684`currentVersion`\u548C`designStatus`\uFF0C\u4EE5\u53CA\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\u90A3\u5C31\u66F4\u65B0`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5224\u65AD\u8BE5\u529F\u80FD\u6A21\u5757\u662F\u5426\u5168\u90E8\u9875\u9762\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\uFF0C\u90A3\u5C31\u6309\u7167\u89C4\u5219\u8BA1\u5212\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u6240\u6709\u9875\u9762\u90FD\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u90A3\u5C31\u7ED3\u675F AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n\n### **\u6B65\u9AA4\u89C4\u5219 1\uFF1A\u9605\u8BFB`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\u67E5\u770B\u8BE5\u529F\u80FD\u6A21\u5757\u9875\u9762\u8BBE\u8BA1\u8FDB\u5EA6\u60C5\u51B5`designStatus`\u5B57\u6BB5\uFF0C\u4F9D\u636E\u8BE5\u529F\u80FD\u6A21\u5757\u5404\u4E2A\u9875\u9762\u7684`designStatus`\u5B8C\u6210\u60C5\u51B5\u6267\u884C\u4EE5\u4E0B\u64CD\u4F5C\uFF1A**\n\n- \u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u6240\u6709\u9875\u9762\u90FD\u8BBE\u8BA1\u5B8C\u6210\u4E86\uFF0C\u90A3\u5C31\u505C\u6B62 AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n- \u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u8FD8\u6709\u672A\u8BBE\u8BA1\u5B8C\u6210\u7684\u9875\u9762\uFF0C\u90A3\u5C31\u83B7\u53D6\u5230\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u7B2C\u4E00\u4E2A\u672A\u8BBE\u8BA1\u5B8C\u6210\u7684\u9875\u9762`pageNameEN`\uFF0C\u7EE7\u7EED\u6267\u884C\u4E0B\u4E00\u6B65\n\n### **\u6B65\u9AA4\u89C4\u5219 2\uFF1A\u6839\u636E\u7528\u6237\u9700\u6C42\uFF0C\u5E76\u4F7F\u7528`read_file`\u5DE5\u5177\u8BFB\u53D6\u8BE5\u9875\u9762\u6240\u5728\u7684\u529F\u80FD\u6A21\u5757\u8BBE\u8BA1`.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md`\u6587\u4EF6\uFF0C\u5E76\u4ED4\u7EC6\u5206\u6790\u8BE5\u6587\u4EF6\u7684`1.1\u3001\u9875\u9762\u7EC4\u6210\u90E8\u5206`\u3001`1.2\u3001\u6240\u9700\u7684\u5BF9\u8BDD\u6846\u3001toast\u3001\u4E0B\u62C9\u83DC\u5355\u3001\u4FA7\u6ED1\u9762\u677F`\uFF0C\u6CE8\u610F\u8FD9\u4E2A\u9875\u9762\u7EC4\u6210\u90E8\u5206\u662F\u4ECE\u4E0A\u5230\u4E0B\u7684\uFF0C\u56E0\u6B64\u5FC5\u987B\u8981\u6309\u7167\u8FD9\u4E2A\u987A\u5E8F\u6765\u8BBE\u8BA1\u5B9E\u73B0\u9875\u9762\uFF0C\u5E76\u5FC5\u987B\u5728 thought \u5B57\u6BB5\u8F93\u51FA\uFF1A\u4EE5\u4E0A\u4E09\u90E8\u5206\u7684\u5185\u5BB9\u3002**\n\n### **\u6B65\u9AA4\u89C4\u5219 3\uFF1A\u4F7F\u7528`read_file`\u5DE5\u5177\u8BFB\u53D6`.bytefun/UI\u8BBE\u8BA1\u89C4\u8303.md`\u6587\u4EF6\uFF0C\u5B8C\u5168\u7406\u89E3\u638C\u63E1\u6574\u4E2AAPP\u7684UI\u8BBE\u8BA1\u89C4\u8303\uFF0C\u5305\u62EC\u6240\u6709\u989C\u8272\u3001\u5404\u79CD\u6587\u5B57\u3001\u5404\u79CD\u6309\u94AE\u3001\u5404\u79CD\u8F93\u5165\u6846\u3001\u6807\u9898\u680F\u3001\u5361\u7247\u3001\u5355\u9009\u3001\u591A\u9009\u7B49\u3002**\n\n### **\u6B65\u9AA4\u89C4\u5219 4\uFF1A\u5FC5\u987B\u7406\u89E3\u5E76\u9075\u5B88\u4EE5\u4E0B\u7981\u6B62\u7684\u591A\u4E2AUI\u8BBE\u8BA1\u4EE3\u7801\u5199\u6CD5**\n- \u7981\u6B62\u4F7F\u7528\u4EFB\u4F55\u524D\u7AEF\u6846\u67B6\uFF0C\u53EA\u4F7F\u7528 html+\u7C7B\u9009\u62E9\u5668\u6837\u5F0F+js \u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u62FC\u63A5html\u5B57\u7B26\u4E32\uFF0C\u5FC5\u987B\u5728body\u6807\u7B7E\u91CC\u9762\u76F4\u63A5\u5199html\u4EE3\u7801\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728html\u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\u3002\n- \u7981\u6B62\u4F7F\u7528\u6587\u672C\u6E10\u53D8\u8272\uFF0C\u5FC5\u987B\u4F7F\u7528\u7EAF\u8272\u6587\u672C\uFF0C\u4E5F\u5C31\u662F\u7981\u6B62\u4F7F\u7528`-webkit-text-fill-color`\u5C5E\u6027\u3002\n- \u7981\u6B62\u7ED9\u9875\u9762\u6DFB\u52A0`\u624B\u673A\u9876\u90E8\u72B6\u6001\u680F`\u3001`\u624B\u673A\u5E95\u90E8\u6307\u793A\u5668\u680F`\u4E24\u4E2A\u975E\u9875\u9762\u5185\u5BB9\u7684\u5143\u7D20\u8282\u70B9\uFF0C\u8FD9\u662F\u624B\u673A\u786C\u4EF6\u81EA\u5E26\u7684\u5143\u7D20\uFF0C\u4E0D\u80FD\u5728\u9875\u9762\u4E2D\u6DFB\u52A0\u3002\n- \u7981\u6B62\u4F7F\u7528`:before`\u3001`:after`\u4F2A\u5143\u7D20\uFF0C\u5FC5\u987B\u4F7F\u7528\u5176\u4ED6\u6807\u7B7E\u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528`backdrop-filter`\u7B49\u73BB\u7483\u6548\u679C\uFF0C\u5FC5\u987B\u5220\u9664\u6389\u6240\u6709\u4F7F\u7528\u5230\u73BB\u7483\u6548\u679C\u7684\u4EE3\u7801\u3002\n- \u7981\u6B62\u4F7F\u7528\u591A\u4E2Ap\u6807\u7B7E\u6216\u591A\u4E2A\u5176\u4ED6\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u4ECE\u7F51\u7EDC\u6216\u5176\u4ED6\u5730\u65B9\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\uFF0C\u6BD4\u5982\uFF1Adiv\u3001span\u7B49\uFF0C\u56E0\u4E3A\u7F51\u7EDC\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\u662F\u4E00\u4E2A\u6587\u672C\uFF0C\u65E0\u6CD5\u4F7F\u7528\u591A\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u3002\n- loading\u8282\u70B9\u7684\u5B9E\u73B0\u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u4E0E\u8FB9\u6846\u5C5E\u6027\u5B9E\u73B0\uFF0C\u5FC5\u987B\u4F7F\u7528\u56FE\u6807icon\u7684i\u6807\u7B7E\u6765\u5B9E\u73B0loading\u7684\u8282\u70B9\n- \u7981\u6B62\u4E3Ahtml\u6807\u7B7E\u8282\u70B9\u6DFB\u52A0\u52A8\u753B\u6216\u8FC7\u6E21\u6548\u679C\uFF0C\u9875\u9762\u8BBE\u8BA1\u4E0D\u9700\u8981\u4EFB\u4F55\u52A8\u753B\u548C\u8FC7\u6E21\u6548\u679C\uFF0C\u6BD4\u5982\u7981\u6B62\uFF1A@keyframes\u3001transition\u3001animation \u7B49\u3002\n- \u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u7B49\u5143\u7D20\u5FC5\u987B\u8981\u6709hover\u4E0E\u70B9\u51FB\u53CD\u9988\uFF0C\u70B9\u51FB\u53CD\u9988\u5FC5\u987B\u4F7F\u7528\u6D45\u8272\u7684\u80CC\u666F\u8272background\u6765\u53CD\u9988\u5C31\u884C\uFF0C\u4E25\u7981\u4F7F\u7528transform\u6548\u679C\n - \u274C \u9519\u8BEF\u7684\u7528\u6CD5\uFF1A \n ``` css\n .hot-sales-item:hover {\n transform: translateX(...px);\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u7528\u6CD5\uFF1A\n ``` css\n .hot-sales-item:hover {\n background: ...;\n }\n ```\n- \u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u6765\u5B9E\u73B0image\u56FE\u7247\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528img\u6807\u7B7E\u6765\u5B9E\u73B0\u56FE\u7247\u8282\u70B9\uFF0Cimg\u6807\u7B7E\u7684src\u5C5E\u6027\u5FC5\u987B\u8BBE\u7F6E\u4E3A\uFF1A`https://oss.bytefungo.com/f1/showImg1.jpg`\uFF0C\u5176\u4E2D\u91CC\u9762\u7684`showImg1`\u53EF\u4EE5\u6539\u4E3A1~30\u7684\u4EFB\u610F\u4E00\u4E2A\u6570\u5B57\uFF0C\u6BD4\u5982\uFF1A`showImg5`\u3002\n - \u274C\u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` html\n <div class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\">\n </div>\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` html\n <img class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\" src=\"https://oss.bytefungo.com/f1/showImg7.jpg\"> \n ```\n- \u7981\u6B62 id \u5C5E\u6027\u4E0D\u89C4\u8303\uFF0Cid \u5FC5\u987B\u552F\u4E00\uFF0C\u4E14\u53EA\u80FD\u7531\u5B57\u6BCD\u548C\u6570\u5B57\u7EC4\u6210\uFF08\u4E0D\u80FD\u4EE5\u6570\u5B57\u5F00\u5934\uFF09\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u9A7C\u5CF0\u547D\u540D\u3002\n- \u7981\u6B62\u4F7F\u7528\u884C\u5185 style \u5C5E\u6027\uFF0C\u5FC5\u987B\u901A\u8FC7 class \u548C CSS \u6587\u4EF6\u6765\u5B9A\u4E49\u6837\u5F0F\u3002\n- \u7981\u6B62 radial-gradient \u6837\u5F0F\u4E0D\u89C4\u8303\uFF0C\u5F84\u5411\u6E10\u53D8\u5FC5\u987B\u663E\u5F0F\u58F0\u660E\u4E3A circle\uFF0C\u4E14\u4E00\u4E2A DOM \u8282\u70B9\u53EA\u80FD\u5305\u542B\u4E00\u4E2A radial-gradient\u3002\n\n### **\u6B65\u9AA4\u89C4\u5219 5\uFF1A\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`optimize_ui_design_prompt`\u83B7\u53D6\u5230UI\u8BBE\u8BA1\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\uFF0C\u7136\u540E\u4E25\u683C\u9075\u5B88`optimize_ui_design_prompt`\u8FD4\u56DE\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u5B8C\u6210`doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u9875\u9762\u7684 UI \u8BBE\u8BA1**:\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E00\u3001\u6837\u5F0F\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E8C\u3001\u5FC5\u987B\u7ED9\u6BCF\u4E00\u4E2A\u8282\u70B9\u6DFB\u52A0id\u3001name\u3001nodeType\u5C5E\u6027`\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E09\u3001\u8F6E\u64AD\u4E0ETabs\u7EC4\u4EF6\u7684\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u56DB\u3001\u5217\u8868\u7EC4\u4EF6\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\uFF1A\u5982\u679C\u8BE5\u5217\u8868\u7684\u6570\u636E\u662F\u4ECE\u7F51\u7EDC\u62C9\u53D6\u7684\uFF0C\u90A3\u4E48\u5FC5\u987B\u4F7F\u7528\u591A\u72B6\u6001\u5BB9\u5668`multiStateContainer`\u5C06loading\u3001\u8054\u7F51\u5931\u8D25\u3001\u6CA1\u6709\u6570\u636E\u3001\u6709\u6570\u636E\u7684\u56DB\u4E2A\u72B6\u6001\u4F7F\u7528`oneStateContentContainer`\u5305\u8D77\u6765\u5E76\u5C55\u793A\u51FA\u6765\uFF0C\u5176\u4E2D\u6709\u6570\u636E\u72B6\u6001\u7684`oneStateContentContainer`\u5305\u542B\u7684\u5C31\u662F\u8BE5\u5217\u8868\u7EC4\u4EF6\u3002\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E94\u3001\u56FE\u6807\u4E0E\u56FE\u7247\u7684\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u516D\u3001\u9996\u9875\u4E3B\u4F53\u9875\u4E0E\u5B50\u9875\u9762\u7684\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E03\u3001\u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u8BE5\u9875\u9762\u8BBE\u8BA1\u9700\u6C42\uFF0C\u90A3\u5C31\u6309\u7167\u9875\u9762\u9ED8\u8BA4\u89C4\u5219\u8BBE\u8BA1`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n\n### **\u6B65\u9AA4\u89C4\u5219 6\uFF1A\u7ED9\u4EE5\u4E0B5\u70B9\u7684UI\u6837\u5F0F\u548C\u5C5E\u6027\u6B63\u786E\u6027\u548C\u5B8C\u6574\u6027\u68C0\u67E5**\n1. \u68C0\u67E5html\u9875\u9762\u6240\u6709\u6587\u672C\u6309\u94AE\u3001\u56FE\u6807\u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u3001\u53EF\u4EE5\u70B9\u51FB\u7684\u5143\u7D20\u7B49\u7B49\u662F\u5426\u90FD\u6709hover\u7684\u80CC\u666F\u8272\u53CD\u9988\u6548\u679C\uFF0C\u5982\u679C\u6CA1\u6709\u90A3\u5C31\u6DFB\u52A0hover\u7684\u80CC\u666F\u8272\u53CD\u9988\u6548\u679C\u3002\n2. \u68C0\u67E5tab\u9009\u9879\u5361\u6BCF\u4E00\u4E2Atab panel\u662F\u5426\u90FD\u6709\u5BF9\u5E94\u7684html\u4EE3\u7801\u5B9E\u73B0\u5B8C\u6574\u7684\u5185\u5BB9\u5C55\u793A\n3. `nodeType` \u662F`verticalListView`\u3001`horizontalListView`\u3001`viewPager`\u3001`tabPanelFather`\u3001`radioGroup`\u3001`checkBoxGroup`\u7C7B\u578B\u7684\u8282\u70B9\u6DFB\u52A0\u6570\u636E\u83B7\u53D6\u65B9\u5F0F\u5C5E\u6027`fromApiOrCacheData`\uFF0C`fromApiOrCacheData=\"true\"`\u7684\u60C5\u51B5\u5FC5\u987B\u6EE1\u8DB3\u4EE5\u4E0B\u6761\u4EF6\uFF1A\n - \u8BE5\u7EC4\u4EF6\u7684\u6570\u636E\u662F\u4ECE\u7F51\u7EDC\u6216\u8005\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u56DE\u6765\u7684\uFF0C\u6BD4\u5982\uFF1A\u70ED\u95E8\u5546\u54C1\u5217\u8868\u7EC4\u4EF6`verticalListView`\uFF0C\u8BE5\u7EC4\u4EF6\u7684\u6570\u636E\u662F\u4ECE\u7F51\u7EDC\u6216\u8005\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u56DE\u6765\u7684\n - \u5982\u679C\u662F\u4E00\u4E9B\u4E0D\u9700\u8981\u540E\u7AEF API \u8054\u7F51\u6216\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u83B7\u53D6\u7684\u9759\u6001\u5199\u6B7B\u7684\u6570\u636E\uFF0C\u90A3\u4E48\u5C31\u4E0D\u9700\u8981 `fromApiOrCacheData` \u5C5E\u6027\u4E86\uFF0C\u6BD4\u5982\uFF1A\u4E2A\u4EBA\u4E2D\u5FC3\u5217\u8868\u9879\u3001\u8BBE\u7F6E\u5217\u8868\u9879\u3001\u83DC\u5355\u5217\u8868\u9879\uFF0C\u8FD9\u4E9B\u6839\u672C\u4E0D\u9700\u8981\u7ECF\u8FC7\u540E\u53F0 API \u8054\u7F51\u6216\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u83B7\u53D6\u7684\uFF0C\u90A3\u4E48\u5C31\u4E0D\u8981 `fromApiOrCacheData` \u5C5E\u6027\n4\u3001\u68C0\u67E5tab\u9009\u9879\u5361\u6BCF\u4E00\u4E2Atab panel\u662F\u5426\u90FD\u6709\u5BF9\u5E94\u7684html\u4EE3\u7801\u5B9E\u73B0\u5B8C\u6574\u7684\u5185\u5BB9\u5C55\u793A\uFF0C\u7EDD\u5BF9\u7981\u6B62\u6577\u884D\u5730\u4F7F\u7528`Placeholder content/\u5F85\u5F00\u53D1/\u5F00\u53D1\u4E2D/\u5373\u5C06\u4E0A\u7EBF`\u7B49\u7B49\u6765\u6577\u884D\u5730\u5C55\u793ATabs\u9009\u9879\u5361\u7EC4\u4EF6\u7684\u6BCF\u4E00\u4E2ATab Panel\uFF0C\u5FC5\u987B\u6BCF\u4E00\u4E2ATab Panel\u90FD\u6709\u5177\u4F53\u771F\u5B9E\u7684\u5185\u5BB9\u5C55\u793A\u5B9E\u73B0\u3002\n5. \u68C0\u67E5\u5BC6\u7801\u8F93\u5165\u6846\u53F3\u4FA7\u7684\u5BC6\u7801\u663E\u793A\u4E0E\u9690\u85CF\u56FE\u6807\u7684`nodeType`\u8981\u6539\u4E3A`switch`\u5E76\u6DFB\u52A0\u4E00\u4E2A `checkedClass` \u5C5E\u6027\uFF0C\u7136\u540E\u7ED9html\u4E2D\u6240\u6709`nodeType` \u662F `switch`\u3001`radio`\u3001`checkBox`\u8282\u70B9\u7684\u5B69\u5B50 `i` \u6807\u7B7E\u8282\u70B9\u6DFB\u52A0\u4E00\u4E2A `checkedClass` \u5C5E\u6027\uFF0C\u7528\u4E8E\u8868\u793A\u9009\u4E2D\u72B6\u6001\u7684 icon \u56FE\u6807\u6837\u5F0F\u7C7B\u540D\uFF0C\u6BD4\u5982\uFF1A\n```html\n<div nodeType=\"radio\" id=\"xxxRadio\" name=\"xxx\u5355\u9009\">\n <i\n name=\"\u5355\u9009Icon\"\n nodeType=\"icon\"\n id=\"xxxRadioIcon\"\n class=\"fa xxx\"\n checkedClass=\"fa yyy\"\n ></i>\n <span name=\"xxx\u5355\u9009\u6587\u672C\" nodeType=\"text\" class=\"xxx-text\">xxx</span>\n</div>\n<div\n id=\"agreementCheckbox\"\n name=\"\u534F\u8BAE\u52FE\u9009\u6846\"\n nodeType=\"checkBox\"\n class=\"agreement-checkbox\"\n onclick=\"toggleAgreement()\"\n>\n <i\n id=\"agreementIcon\"\n name=\"\u534F\u8BAE\u52FE\u9009\u56FE\u6807\"\n nodeType=\"icon\"\n class=\"far fa-square\"\n checkedClass=\"fas fa-check-square\"\n ></i>\n</div>\n```\n\n### **\u6B65\u9AA4\u89C4\u5219 7 - \u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\uFF0C\u7ED9 `nodeType` \u662F`oneStateContentContainer`\u3001`viewPagerItem`\u3001`tabPanel`\u3001`dialogOverlay`\u3001`toast`\u3001`dropDownMenu`\u3001`sideSlidePanel`\u7684\u8282\u70B9\u6DFB\u52A0\u663E\u793A\u548C\u9690\u85CF\u7684\u5207\u6362 js \u65B9\u6CD5:`switchTo{{\u8282\u70B9ID}}`**\n\n- \u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\n- js \u65B9\u6CD5\u7684\u547D\u540D\u89C4\u5219\uFF1A`switchTo` + \u8282\u70B9 id\uFF0C\u6BD4\u5982\uFF1A`switchToAgeContainer`\u3001`switchToPhoneContainer`\n- \u5207\u6362\u663E\u793A\u548C\u9690\u85CF\u7684 js \u65B9\u6CD5\u4E0D\u5F97\u5E26\u6709\u4EFB\u4F55\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1A`switchToAgeContainer()`\u3001`switchToPhoneContainer()`\n- \u793A\u4F8B\uFF1A\n\n```javascript\nfunction switchToAgeContainer() {\n document.getElementById(\"ageContainer\").style.display = \"block\";\n document.getElementById(\"phoneContainer\").style.display = \"none\";\n}\nfunction showDisplayNoneTitleMenu() {\n document.getElementById(\"titleMenu\").style.display = \"flex\";\n}\n```\n\n### **\u6B65\u9AA4\u89C4\u5219 8 - \u6267\u884C\u547D\u4EE4`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u8FDB\u884C\u4EE3\u7801\u68C0\u67E5\uFF0C\u5FC5\u987B\u662F\u6267\u884C`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u800C\u4E0D\u662F`npx eslint xxx`\uFF0C{pageNameEN}.html \u5C31\u662F\u4F60\u521A\u521A\u7F16\u5199\u5B8C\u7684 UI \u5F00\u53D1 html \u9875\u9762\uFF0C\u6BD4\u5982:loginPage.html\uFF0C\u5982\u679C\u6267\u884C\u547D\u4EE4\u68C0\u6D4B\u53D1\u73B0\u4E86\u9519\u8BEF\uFF0C\u5FC5\u987B\u6309\u7167\u63D0\u793A\u628A\u6240\u6709\u9519\u8BEF\u4FEE\u590D\u5B8C\u6BD5\u624D\u884C\u3002**\n\n### **\u6B65\u9AA4\u89C4\u5219 9\uFF1A\u5F3A\u5236\u66F4\u65B0'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u7684`currentVersion`\u548C`designStatus`\uFF0C\u4EE5\u53CA\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\u90A3\u5C31\u66F4\u65B0`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u3002**\n\n- \u7B2C 1 \u70B9\uFF1A\u5148\u8BFB\u53D6'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7\u7684\u6570\u503C currentVersion\uFF0C\u7136\u540E\u66F4\u65B0\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7 version \u5C5E\u6027\u4E3A\uFF1AcurrentVersion+1\n- \u7B2C 2 \u70B9\uFF1A'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u91CC\u9762\u6807\u8BB0\u5F53\u524D\u9875\u9762\u7684\u8FDB\u5EA6\u72B6\u6001 designStatus \u5C5E\u6027\u4E3A completed\n- \u7B2C 3 \u70B9\uFF1A\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\uFF0C\u90A3\u4E48\u5FC5\u987B\u5728`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u6309\u987A\u5E8F\u6DFB\u52A0\u5F53\u524D\u9875\u9762\u7684\u6240\u6709\u5B50\u9875\u9762\u7684enName\uFF0C\u5B50\u9875\u9762\u7684\u987A\u5E8F\u4F60\u5FC5\u987B\u9605\u8BFB`.bytefun/xxx\u529F\u80FD\u6A21\u5757.md` \u6587\u4EF6\u91CC\u9762\u7684`\u9996\u9875\u4E3B\u4F53\u9875`\u7684`1.1\u3001\u9875\u9762\u7EC4\u6210\u90E8\u5206\uFF08\u4ECE\u4E0A\u5230\u4E0B\uFF09`\u6765\u786E\u5B9A\uFF0C\u5982\u679C\u5DF2\u5B58\u5728`subPageList`\u5B57\u6BB5\uFF0C\u90A3\u5C31\u8FDB\u884C\u5B50\u9875\u9762\u987A\u5E8F\u548C\u9519\u6F0F\u7684\u68C0\u67E5\u548C\u4FEE\u6B63\uFF0C\u683C\u5F0F\u4F8B\u5B50\uFF1A\n```json\n{\n \"enName\": \"homeMainPage\",\n \"subPageList\": [\n \"xxxPage\",\n \"yyyPage\",\n \"zzzPage\",\n \"aaaPage\"\n ]\n}\n```\n\n### **\u6B65\u9AA4\u89C4\u5219 10\uFF1A\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 10 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2Ahtml\u9875\u9762\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 10 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u8BBE\u8BA1\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\uFF0C\u5F97\u51FA\u8BE5\u529F\u80FD\u6A21\u5757\u73B0\u5728\u9700\u8981\u8BBE\u8BA1\u54EA\u4E00\u4E2A\u9875\u9762`pageNameEN`\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u90FD\u8BBE\u8BA1\u5B8C\u6210\u4E86\uFF0C\u90A3\u5C31\u505C\u6B62 AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md` \u6587\u4EF6\uFF0C\u7406\u89E3\u5E76\u8F93\u51FA\u4E09\u90E8\u5206\u7684\u5185\u5BB9\u3002\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`UI\u8BBE\u8BA1\u89C4\u8303.md`\u6587\u4EF6\uFF0C\u5B8C\u5168\u7406\u89E3\u638C\u63E1\u6574\u4E2AAPP\u7684UI\u8BBE\u8BA1\u89C4\u8303\uFF0C\u5305\u62EC\u989C\u8272\u3001\u6807\u9898\u680F\u3001\u5355\u9009\u3001\u591A\u9009\u3002\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u7406\u89E3\u5E76\u9075\u5B88\u4EE5\u4E0B\u7981\u6B62\u7684\u591A\u4E2AUI\u8BBE\u8BA1\u4EE3\u7801\u5199\u6CD5\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`optimize_ui_design_prompt`\u4E25\u683C\u6309\u7167\u89C4\u5219\u8981\u6C42\uFF0C\u7136\u540E\u4E25\u683C\u9075\u5B88`optimize_ui_design_prompt`\u8FD4\u56DE\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u5B8C\u6210\u4E00\u4E2A`pageNameEN`html\u9875\u9762\u7684 UI \u8BBE\u8BA1\uFF0C\u5FC5\u987B\u6CE8\u610F\u4E00\u6B21\u53EA\u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\uFF08\u7981\u6B62 JS \u62FC\u63A5 html \u5B57\u7B26\u4E32\uFF0C\u7981\u6B62\u4F7F\u7528 js \u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728 html \u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\uFF09\u3002\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C6\u4E2AUI\u6837\u5F0F\u548C\u5C5E\u6027\u6B63\u786E\u6027\u548C\u5B8C\u6574\u6027\u7684\u68C0\u67E5\u3002\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\uFF0C\u7ED9 `nodeType` \u662F`oneStateContentContainer`\u3001`viewPagerItem`\u3001`tabPanel`\u7684\u8282\u70B9\u6DFB\u52A0\u663E\u793A\u548C\u9690\u85CF\u7684\u5207\u6362 js \u65B9\u6CD5:`switchTo{{\u8282\u70B9ID}}`\u3002\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C\u547D\u4EE4`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u8FDB\u884C\u4EE3\u7801\u68C0\u67E5\u548C\u4FEE\u590D\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u5F3A\u5236\u66F4\u65B0'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u7684`currentVersion`\u548C`designStatus`\uFF0C\u4EE5\u53CA\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\u90A3\u5C31\u66F4\u65B0`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5224\u65AD\u8BE5\u529F\u80FD\u6A21\u5757\u662F\u5426\u5168\u90E8\u9875\u9762\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\uFF0C\u90A3\u5C31\u6309\u7167\u89C4\u5219\u8BA1\u5212\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u6240\u6709\u9875\u9762\u90FD\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u90A3\u5C31\u7ED3\u675F AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n\n## \uD83D\uDEAB \u7EDD\u5BF9\u7981\u6B62\n\n- \u274C \u8BF4\"\u4EFB\u52A1\u5B8C\u6210\"\u800C\u4E0D\u68C0\u67E5\u5176\u4ED6\u9875\u9762\n- \u274C \u8DF3\u8FC7\u8FDB\u5EA6\u6587\u4EF6\u68C0\u67E5\n- \u274C \u8BE2\u95EE\u7528\u6237\u662F\u5426\u7EE7\u7EED\n- \u274C \u8BA4\u4E3A\u5B8C\u6210\u4E00\u4E2A\u9875\u9762\u5C31\u662F\u5B8C\u6210\u6574\u4E2A\u4EFB\u52A1\n\n## \uD83C\uDFAF \u6210\u529F\u6807\u51C6\n\n\u53EA\u6709\u5F53\u524D\u6A21\u5757\u6240\u6709\u9875\u9762designStatus\u72B6\u6001\u90FD\u662F\"completed\"\u65F6\uFF0C\u624D\u80FD\u7ED3\u675F\u4F1A\u8BDD\u3002\n\n## **\u8FDD\u53CD\u6B64\u89C4\u5219 = \u4EFB\u52A1\u5931\u8D25**\n";
|
|
1
|
+
export declare const uiDesignGuidePromptTemplate = "\n# \u4F60\u662F UI \u8BBE\u8BA1\u5E08\u4E13\u5BB6\u3001\u4EE3\u7801\u5F00\u53D1\u4E13\u5BB6\uFF0C\u4F60\u5FC5\u987B\u6309\u7167`\u6267\u884C\u6B65\u9AA4\u6765`\u6267\u884C\u4EFB\u52A1\u3002\n\n## **\u6267\u884C\u8BBE\u8BA1\uFF1A\u6BCF\u4E00\u4E2A\u9875\u9762\u8BBE\u8BA1\u90FD\u5FC5\u987B\u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\uFF0C\u5F97\u51FA\u8BE5\u529F\u80FD\u6A21\u5757\u73B0\u5728\u9700\u8981\u8BBE\u8BA1\u54EA\u4E00\u4E2A\u9875\u9762`pageNameEN`\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u90FD\u8BBE\u8BA1\u5B8C\u6210\u4E86\uFF0C\u90A3\u5C31\u505C\u6B62 AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`.bytefun/xxx\u529F\u80FD\u6A21\u5757.md` \u6587\u4EF6\uFF0C\u7406\u89E3\u5E76\u8F93\u51FA\u4E09\u90E8\u5206\u7684\u5185\u5BB9\u3002\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`.bytefun/UI\u8BBE\u8BA1\u89C4\u8303.md`UI\u89C4\u8303\u6587\u4EF6\u548C`.bytefun/ui-design-spec-demo.html`UI\u89C4\u8303\u6F14\u793A\u6587\u4EF6\uFF0C\u5B8C\u5168\u7406\u89E3\u638C\u63E1\u6574\u4E2AAPP\u7684UI\u8BBE\u8BA1\u89C4\u8303\uFF0C\u5305\u62EC\u6240\u6709\u989C\u8272\u3001\u5404\u79CD\u6587\u5B57\u3001\u5404\u79CD\u6309\u94AE\u3001\u5404\u79CD\u8F93\u5165\u6846\u3001\u6807\u9898\u680F\u3001\u5361\u7247\u3001\u5355\u9009\u3001\u591A\u9009\u7B49\u3002\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u7406\u89E3\u5E76\u9075\u5B88\u4EE5\u4E0B\u7981\u6B62\u7684\u591A\u4E2AUI\u8BBE\u8BA1\u4EE3\u7801\u5199\u6CD5\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`optimize_ui_design_prompt`\u4E25\u683C\u6309\u7167\u89C4\u5219\u8981\u6C42\uFF0C\u7136\u540E\u4E25\u683C\u9075\u5B88`optimize_ui_design_prompt`\u8FD4\u56DE\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u5B8C\u6210\u4E00\u4E2A`pageNameEN`html\u9875\u9762\u7684 UI \u8BBE\u8BA1\uFF0C\u5FC5\u987B\u6CE8\u610F\u4E00\u6B21\u53EA\u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\uFF08\u7981\u6B62 JS \u62FC\u63A5 html \u5B57\u7B26\u4E32\uFF0C\u7981\u6B62\u4F7F\u7528 js \u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728 html \u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\uFF09\u3002\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u6307\u5B9A`nodeType`\u7684\u8282\u70B9\u5224\u65AD\u662F\u5426\u9700\u8981\u4ECE\u540E\u7AEFapi\u63A5\u53E3\u83B7\u53D6\u6570\u636E\uFF0C\u5982\u679C\u662F\u90A3\u5C31\u5FC5\u987B\u6DFB\u52A0\u5C5E\u6027`fromApiOrCacheData=\"true\"`\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C5\u4E2AUI\u6837\u5F0F\u548C\u5C5E\u6027\u6B63\u786E\u6027\u548C\u5B8C\u6574\u6027\u7684\u68C0\u67E5\u3002\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\uFF0C\u7ED9 `nodeType` \u662F`oneStateContentContainer`\u3001`viewPagerItem`\u3001`tabPanel`\u7684\u8282\u70B9\u6DFB\u52A0\u663E\u793A\u548C\u9690\u85CF\u7684\u5207\u6362 js \u65B9\u6CD5:`switchTo{{\u8282\u70B9ID}}`\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C\u547D\u4EE4`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u8FDB\u884C\u4EE3\u7801\u68C0\u67E5\u548C\u4FEE\u590D\u95EE\u9898\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5F3A\u5236\u66F4\u65B0'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u7684`currentVersion`\u548C`designStatus`\uFF0C\u4EE5\u53CA\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\u90A3\u5C31\u66F4\u65B0`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u3002\n11. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521911`\u6267\u884C\u4EFB\u52A1\uFF0C\u5224\u65AD\u8BE5\u529F\u80FD\u6A21\u5757\u662F\u5426\u5168\u90E8\u9875\u9762\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\uFF0C\u90A3\u5C31\u6309\u7167\u89C4\u5219\u8BA1\u5212\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u6240\u6709\u9875\u9762\u90FD\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u90A3\u5C31\u7ED3\u675F AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n\n### **\u6B65\u9AA4\u89C4\u5219 1\uFF1A\u9605\u8BFB`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\u67E5\u770B\u8BE5\u529F\u80FD\u6A21\u5757\u9875\u9762\u8BBE\u8BA1\u8FDB\u5EA6\u60C5\u51B5`designStatus`\u5B57\u6BB5\uFF0C\u4F9D\u636E\u8BE5\u529F\u80FD\u6A21\u5757\u5404\u4E2A\u9875\u9762\u7684`designStatus`\u5B8C\u6210\u60C5\u51B5\u6267\u884C\u4EE5\u4E0B\u64CD\u4F5C\uFF1A**\n\n- \u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u6240\u6709\u9875\u9762\u90FD\u8BBE\u8BA1\u5B8C\u6210\u4E86\uFF0C\u90A3\u5C31\u505C\u6B62 AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n- \u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u8FD8\u6709\u672A\u8BBE\u8BA1\u5B8C\u6210\u7684\u9875\u9762\uFF0C\u90A3\u5C31\u83B7\u53D6\u5230\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u7B2C\u4E00\u4E2A\u672A\u8BBE\u8BA1\u5B8C\u6210\u7684\u9875\u9762`pageNameEN`\uFF0C\u7EE7\u7EED\u6267\u884C\u4E0B\u4E00\u6B65\n\n### **\u6B65\u9AA4\u89C4\u5219 2\uFF1A\u6839\u636E\u7528\u6237\u9700\u6C42\uFF0C\u5E76\u4F7F\u7528`read_file`\u5DE5\u5177\u8BFB\u53D6\u8BE5\u9875\u9762\u6240\u5728\u7684\u529F\u80FD\u6A21\u5757\u8BBE\u8BA1`.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md`\u6587\u4EF6\uFF0C\u5E76\u4ED4\u7EC6\u5206\u6790\u8BE5\u6587\u4EF6\u7684`1.1\u3001\u9875\u9762\u7EC4\u6210\u90E8\u5206`\u3001`1.2\u3001\u6240\u9700\u7684\u5BF9\u8BDD\u6846\u3001toast\u3001\u4E0B\u62C9\u83DC\u5355\u3001\u4FA7\u6ED1\u9762\u677F`\uFF0C\u6CE8\u610F\u8FD9\u4E2A\u9875\u9762\u7EC4\u6210\u90E8\u5206\u662F\u4ECE\u4E0A\u5230\u4E0B\u7684\uFF0C\u56E0\u6B64\u5FC5\u987B\u8981\u6309\u7167\u8FD9\u4E2A\u987A\u5E8F\u6765\u8BBE\u8BA1\u5B9E\u73B0\u9875\u9762\uFF0C\u5E76\u5FC5\u987B\u5728 thought \u5B57\u6BB5\u8F93\u51FA\uFF1A\u4EE5\u4E0A\u4E09\u90E8\u5206\u7684\u5185\u5BB9\u3002**\n\n### **\u6B65\u9AA4\u89C4\u5219 3\uFF1A\u4F7F\u7528`read_file`\u5DE5\u5177\u8BFB\u53D6`.bytefun/UI\u8BBE\u8BA1\u89C4\u8303.md`\u6587\u4EF6\uFF0C\u5B8C\u5168\u7406\u89E3\u638C\u63E1\u6574\u4E2AAPP\u7684UI\u8BBE\u8BA1\u89C4\u8303\uFF0C\u5305\u62EC\u6240\u6709\u989C\u8272\u3001\u5404\u79CD\u6587\u5B57\u3001\u5404\u79CD\u6309\u94AE\u3001\u5404\u79CD\u8F93\u5165\u6846\u3001\u6807\u9898\u680F\u3001\u5361\u7247\u3001\u5355\u9009\u3001\u591A\u9009\u7B49\u3002**\n\n### **\u6B65\u9AA4\u89C4\u5219 4\uFF1A\u5FC5\u987B\u7406\u89E3\u5E76\u9075\u5B88\u4EE5\u4E0B\u7981\u6B62\u7684\u591A\u4E2AUI\u8BBE\u8BA1\u4EE3\u7801\u5199\u6CD5**\n- \u7981\u6B62\u4F7F\u7528\u4EFB\u4F55\u524D\u7AEF\u6846\u67B6\uFF0C\u53EA\u4F7F\u7528 html+\u7C7B\u9009\u62E9\u5668\u6837\u5F0F+js \u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u62FC\u63A5html\u5B57\u7B26\u4E32\uFF0C\u5FC5\u987B\u5728body\u6807\u7B7E\u91CC\u9762\u76F4\u63A5\u5199html\u4EE3\u7801\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728html\u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\u3002\n- \u7981\u6B62\u4F7F\u7528\u6587\u672C\u6E10\u53D8\u8272\uFF0C\u5FC5\u987B\u4F7F\u7528\u7EAF\u8272\u6587\u672C\uFF0C\u4E5F\u5C31\u662F\u7981\u6B62\u4F7F\u7528`-webkit-text-fill-color`\u5C5E\u6027\u3002\n- \u7981\u6B62\u7ED9\u9875\u9762\u6DFB\u52A0`\u624B\u673A\u9876\u90E8\u72B6\u6001\u680F`\u3001`\u624B\u673A\u5E95\u90E8\u6307\u793A\u5668\u680F`\u4E24\u4E2A\u975E\u9875\u9762\u5185\u5BB9\u7684\u5143\u7D20\u8282\u70B9\uFF0C\u8FD9\u662F\u624B\u673A\u786C\u4EF6\u81EA\u5E26\u7684\u5143\u7D20\uFF0C\u4E0D\u80FD\u5728\u9875\u9762\u4E2D\u6DFB\u52A0\u3002\n- \u7981\u6B62\u4F7F\u7528`:before`\u3001`:after`\u4F2A\u5143\u7D20\uFF0C\u5FC5\u987B\u4F7F\u7528\u5176\u4ED6\u6807\u7B7E\u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528`backdrop-filter`\u7B49\u73BB\u7483\u6548\u679C\uFF0C\u5FC5\u987B\u5220\u9664\u6389\u6240\u6709\u4F7F\u7528\u5230\u73BB\u7483\u6548\u679C\u7684\u4EE3\u7801\u3002\n- \u7981\u6B62\u4F7F\u7528\u591A\u4E2Ap\u6807\u7B7E\u6216\u591A\u4E2A\u5176\u4ED6\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u4ECE\u7F51\u7EDC\u6216\u5176\u4ED6\u5730\u65B9\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\uFF0C\u6BD4\u5982\uFF1Adiv\u3001span\u7B49\uFF0C\u56E0\u4E3A\u7F51\u7EDC\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\u662F\u4E00\u4E2A\u6587\u672C\uFF0C\u65E0\u6CD5\u4F7F\u7528\u591A\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u3002\n- loading\u8282\u70B9\u7684\u5B9E\u73B0\u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u4E0E\u8FB9\u6846\u5C5E\u6027\u5B9E\u73B0\uFF0C\u5FC5\u987B\u4F7F\u7528\u56FE\u6807icon\u7684i\u6807\u7B7E\u6765\u5B9E\u73B0loading\u7684\u8282\u70B9\n- \u7981\u6B62\u4E3Ahtml\u6807\u7B7E\u8282\u70B9\u6DFB\u52A0\u52A8\u753B\u6216\u8FC7\u6E21\u6548\u679C\uFF0C\u9875\u9762\u8BBE\u8BA1\u4E0D\u9700\u8981\u4EFB\u4F55\u52A8\u753B\u548C\u8FC7\u6E21\u6548\u679C\uFF0C\u6BD4\u5982\u7981\u6B62\uFF1A@keyframes\u3001transition\u3001animation \u7B49\u3002\n- \u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u7B49\u5143\u7D20\u5FC5\u987B\u8981\u6709hover\u4E0E\u70B9\u51FB\u53CD\u9988\uFF0C\u70B9\u51FB\u53CD\u9988\u5FC5\u987B\u4F7F\u7528\u6D45\u8272\u7684\u80CC\u666F\u8272background\u6765\u53CD\u9988\u5C31\u884C\uFF0C\u4E25\u7981\u4F7F\u7528transform\u6548\u679C\n - \u274C \u9519\u8BEF\u7684\u7528\u6CD5\uFF1A \n ``` css\n .hot-sales-item:hover {\n transform: translateX(...px);\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u7528\u6CD5\uFF1A\n ``` css\n .hot-sales-item:hover {\n background: ...;\n }\n ```\n- \u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u6765\u5B9E\u73B0image\u56FE\u7247\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528img\u6807\u7B7E\u6765\u5B9E\u73B0\u56FE\u7247\u8282\u70B9\uFF0Cimg\u6807\u7B7E\u7684src\u5C5E\u6027\u5FC5\u987B\u8BBE\u7F6E\u4E3A\uFF1A`https://oss.bytefungo.com/f1/showImg1.jpg`\uFF0C\u5176\u4E2D\u91CC\u9762\u7684`showImg1`\u53EF\u4EE5\u6539\u4E3A1~30\u7684\u4EFB\u610F\u4E00\u4E2A\u6570\u5B57\uFF0C\u6BD4\u5982\uFF1A`showImg5`\u3002\n - \u274C\u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` html\n <div class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\">\n </div>\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` html\n <img class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\" src=\"https://oss.bytefungo.com/f1/showImg7.jpg\"> \n ```\n- \u7981\u6B62 id \u5C5E\u6027\u4E0D\u89C4\u8303\uFF0Cid \u5FC5\u987B\u552F\u4E00\uFF0C\u4E14\u53EA\u80FD\u7531\u5B57\u6BCD\u548C\u6570\u5B57\u7EC4\u6210\uFF08\u4E0D\u80FD\u4EE5\u6570\u5B57\u5F00\u5934\uFF09\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u9A7C\u5CF0\u547D\u540D\u3002\n- \u7981\u6B62\u4F7F\u7528\u884C\u5185 style \u5C5E\u6027\uFF0C\u5FC5\u987B\u901A\u8FC7 class \u548C CSS \u6587\u4EF6\u6765\u5B9A\u4E49\u6837\u5F0F\u3002\n- \u7981\u6B62 radial-gradient \u6837\u5F0F\u4E0D\u89C4\u8303\uFF0C\u5F84\u5411\u6E10\u53D8\u5FC5\u987B\u663E\u5F0F\u58F0\u660E\u4E3A circle\uFF0C\u4E14\u4E00\u4E2A DOM \u8282\u70B9\u53EA\u80FD\u5305\u542B\u4E00\u4E2A radial-gradient\u3002\n\n### **\u6B65\u9AA4\u89C4\u5219 5\uFF1A\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`optimize_ui_design_prompt`\u83B7\u53D6\u5230UI\u8BBE\u8BA1\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\uFF0C\u7136\u540E\u4E25\u683C\u9075\u5B88`optimize_ui_design_prompt`\u8FD4\u56DE\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u5B8C\u6210`doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u9875\u9762\u7684 UI \u8BBE\u8BA1**:\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E00\u3001\u6837\u5F0F\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E8C\u3001\u5FC5\u987B\u7ED9\u6BCF\u4E00\u4E2A\u8282\u70B9\u6DFB\u52A0id\u3001name\u3001nodeType\u5C5E\u6027`\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E09\u3001\u8F6E\u64AD\u4E0ETabs\u7EC4\u4EF6\u7684\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u56DB\u3001\u5217\u8868\u7EC4\u4EF6\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\uFF1A\u5982\u679C\u8BE5\u5217\u8868\u7684\u6570\u636E\u662F\u4ECE\u7F51\u7EDC\u62C9\u53D6\u7684\uFF0C\u90A3\u4E48\u5FC5\u987B\u4F7F\u7528\u591A\u72B6\u6001\u5BB9\u5668`multiStateContainer`\u5C06loading\u3001\u8054\u7F51\u5931\u8D25\u3001\u6CA1\u6709\u6570\u636E\u3001\u6709\u6570\u636E\u7684\u56DB\u4E2A\u72B6\u6001\u4F7F\u7528`oneStateContentContainer`\u5305\u8D77\u6765\u5E76\u5C55\u793A\u51FA\u6765\uFF0C\u5176\u4E2D\u6709\u6570\u636E\u72B6\u6001\u7684`oneStateContentContainer`\u5305\u542B\u7684\u5C31\u662F\u8BE5\u5217\u8868\u7EC4\u4EF6\u3002\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E94\u3001\u56FE\u6807\u4E0E\u56FE\u7247\u7684\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u516D\u3001\u9996\u9875\u4E3B\u4F53\u9875\u4E0E\u5B50\u9875\u9762\u7684\u89C4\u5219`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n- \u5FC5\u987B\u7406\u89E3\u638C\u63E1\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u7684`\u4E03\u3001\u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u8BE5\u9875\u9762\u8BBE\u8BA1\u9700\u6C42\uFF0C\u90A3\u5C31\u6309\u7167\u9875\u9762\u9ED8\u8BA4\u89C4\u5219\u8BBE\u8BA1`\u7684\u6240\u6709\u5185\u5BB9\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u3002\n\n### **\u6B65\u9AA4\u89C4\u5219 6\uFF1A\u6307\u5B9A`nodeType`\u7684\u8282\u70B9\u5224\u65AD\u662F\u5426\u9700\u8981\u4ECE\u540E\u7AEFapi\u63A5\u53E3\u83B7\u53D6\u6570\u636E\uFF0C\u5982\u679C\u662F\u90A3\u5C31\u5FC5\u987B\u6DFB\u52A0\u5C5E\u6027`fromApiOrCacheData=\"true\"`**\n- \u5982\u679C`nodeType` \u662F`verticalListView`\u3001`horizontalListView`\u3001`viewPager`\u3001`tabPanelFather`\u3001`radioGroup`\u3001`checkBoxGroup`\u3001`gridContainer`\u3001`inlineBlockAndWrap`\u7C7B\u578B\u7684\u8282\u70B9\u6DFB\u52A0\u6570\u636E\u83B7\u53D6\u65B9\u5F0F\u5C5E\u6027`fromApiOrCacheData`\uFF0C`fromApiOrCacheData=\"true\"`\u7684\u60C5\u51B5\u5FC5\u987B\u6EE1\u8DB3\u4EE5\u4E0B\u6761\u4EF6\uFF1A\n - \u8BE5\u7EC4\u4EF6\u7684\u6570\u636E\u662F\u4ECE\u7F51\u7EDC\u6216\u8005\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u56DE\u6765\u7684\uFF0C\u6BD4\u5982\uFF1A\u70ED\u95E8\u5546\u54C1\u5217\u8868\u7EC4\u4EF6`verticalListView`\uFF0C\u8BE5\u7EC4\u4EF6\u7684\u6570\u636E\u662F\u4ECE\u7F51\u7EDC\u6216\u8005\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u56DE\u6765\u7684\n - \u5982\u679C\u662F\u4E00\u4E9B\u4E0D\u9700\u8981\u540E\u7AEF API \u8054\u7F51\u6216\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u83B7\u53D6\u7684\u9759\u6001\u5199\u6B7B\u7684\u6570\u636E\uFF0C\u90A3\u4E48\u5C31\u4E0D\u9700\u8981 `fromApiOrCacheData` \u5C5E\u6027\u4E86\uFF0C\u6BD4\u5982\uFF1A\u4E2A\u4EBA\u4E2D\u5FC3\u5217\u8868\u9879\u3001\u8BBE\u7F6E\u5217\u8868\u9879\u3001\u83DC\u5355\u5217\u8868\u9879\uFF0C\u8FD9\u4E9B\u6839\u672C\u4E0D\u9700\u8981\u7ECF\u8FC7\u540E\u53F0 API \u8054\u7F51\u6216\u672C\u5730\u6301\u4E45\u5316\u7F13\u5B58\u62C9\u53D6\u83B7\u53D6\u7684\uFF0C\u90A3\u4E48\u5C31\u4E0D\u8981 `fromApiOrCacheData` \u5C5E\u6027\n\n### **\u6B65\u9AA4\u89C4\u5219 7\uFF1A\u7ED9\u4EE5\u4E0B4\u70B9\u7684UI\u6837\u5F0F\u548C\u5C5E\u6027\u6B63\u786E\u6027\u548C\u5B8C\u6574\u6027\u68C0\u67E5**\n1. \u68C0\u67E5html\u9875\u9762\u6240\u6709\u6587\u672C\u6309\u94AE\u3001\u56FE\u6807\u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u3001\u53EF\u4EE5\u70B9\u51FB\u7684\u5143\u7D20\u7B49\u7B49\u662F\u5426\u90FD\u6709hover\u7684\u80CC\u666F\u8272\u53CD\u9988\u6548\u679C\uFF0C\u5982\u679C\u6CA1\u6709\u90A3\u5C31\u6DFB\u52A0hover\u7684\u80CC\u666F\u8272\u53CD\u9988\u6548\u679C\u3002\n2. \u68C0\u67E5tab\u9009\u9879\u5361\u6BCF\u4E00\u4E2Atab panel\u662F\u5426\u90FD\u6709\u5BF9\u5E94\u7684html\u4EE3\u7801\u5B9E\u73B0\u5B8C\u6574\u7684\u5185\u5BB9\u5C55\u793A\n4\u3001\u68C0\u67E5tab\u9009\u9879\u5361\u6BCF\u4E00\u4E2Atab panel\u662F\u5426\u90FD\u6709\u5BF9\u5E94\u7684html\u4EE3\u7801\u5B9E\u73B0\u5B8C\u6574\u7684\u5185\u5BB9\u5C55\u793A\uFF0C\u7EDD\u5BF9\u7981\u6B62\u6577\u884D\u5730\u4F7F\u7528`Placeholder content/\u5F85\u5F00\u53D1/\u5F00\u53D1\u4E2D/\u5373\u5C06\u4E0A\u7EBF`\u7B49\u7B49\u6765\u6577\u884D\u5730\u5C55\u793ATabs\u9009\u9879\u5361\u7EC4\u4EF6\u7684\u6BCF\u4E00\u4E2ATab Panel\uFF0C\u5FC5\u987B\u6BCF\u4E00\u4E2ATab Panel\u90FD\u6709\u5177\u4F53\u771F\u5B9E\u7684\u5185\u5BB9\u5C55\u793A\u5B9E\u73B0\u3002\n5. \u68C0\u67E5\u5BC6\u7801\u8F93\u5165\u6846\u53F3\u4FA7\u7684\u5BC6\u7801\u663E\u793A\u4E0E\u9690\u85CF\u56FE\u6807\u7684`nodeType`\u8981\u6539\u4E3A`switch`\u5E76\u6DFB\u52A0\u4E00\u4E2A `checkedClass` \u5C5E\u6027\uFF0C\u7136\u540E\u7ED9html\u4E2D\u6240\u6709`nodeType` \u662F `switch`\u3001`radio`\u3001`checkBox`\u8282\u70B9\u7684\u5B69\u5B50 `i` \u6807\u7B7E\u8282\u70B9\u6DFB\u52A0\u4E00\u4E2A `checkedClass` \u5C5E\u6027\uFF0C\u7528\u4E8E\u8868\u793A\u9009\u4E2D\u72B6\u6001\u7684 icon \u56FE\u6807\u6837\u5F0F\u7C7B\u540D\uFF0C\u6BD4\u5982\uFF1A\n```html\n<div nodeType=\"radio\" id=\"xxxRadio\" name=\"xxx\u5355\u9009\">\n <i\n name=\"\u5355\u9009Icon\"\n nodeType=\"icon\"\n id=\"xxxRadioIcon\"\n class=\"fa xxx\"\n checkedClass=\"fa yyy\"\n ></i>\n <span name=\"xxx\u5355\u9009\u6587\u672C\" nodeType=\"text\" class=\"xxx-text\">xxx</span>\n</div>\n<div\n id=\"agreementCheckbox\"\n name=\"\u534F\u8BAE\u52FE\u9009\u6846\"\n nodeType=\"checkBox\"\n class=\"agreement-checkbox\"\n onclick=\"toggleAgreement()\"\n>\n <i\n id=\"agreementIcon\"\n name=\"\u534F\u8BAE\u52FE\u9009\u56FE\u6807\"\n nodeType=\"icon\"\n class=\"far fa-square\"\n checkedClass=\"fas fa-check-square\"\n ></i>\n</div>\n```\n\n### **\u6B65\u9AA4\u89C4\u5219 8 - \u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\uFF0C\u7ED9 `nodeType` \u662F`oneStateContentContainer`\u3001`viewPagerItem`\u3001`tabPanel`\u3001`dialogOverlay`\u3001`toast`\u3001`dropDownMenu`\u3001`sideSlidePanel`\u7684\u8282\u70B9\u6DFB\u52A0\u663E\u793A\u548C\u9690\u85CF\u7684\u5207\u6362 js \u65B9\u6CD5:`switchTo{{\u8282\u70B9ID}}`**\n\n- \u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\n- js \u65B9\u6CD5\u7684\u547D\u540D\u89C4\u5219\uFF1A`switchTo` + \u8282\u70B9 id\uFF0C\u6BD4\u5982\uFF1A`switchToAgeContainer`\u3001`switchToPhoneContainer`\n- \u5207\u6362\u663E\u793A\u548C\u9690\u85CF\u7684 js \u65B9\u6CD5\u4E0D\u5F97\u5E26\u6709\u4EFB\u4F55\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1A`switchToAgeContainer()`\u3001`switchToPhoneContainer()`\n- \u793A\u4F8B\uFF1A\n\n```javascript\nfunction switchToAgeContainer() {\n document.getElementById(\"ageContainer\").style.display = \"block\";\n document.getElementById(\"phoneContainer\").style.display = \"none\";\n}\nfunction showDisplayNoneTitleMenu() {\n document.getElementById(\"titleMenu\").style.display = \"flex\";\n}\n```\n\n### **\u6B65\u9AA4\u89C4\u5219 9 - \u6267\u884C\u547D\u4EE4`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u8FDB\u884C\u4EE3\u7801\u68C0\u67E5\uFF0C\u5FC5\u987B\u662F\u6267\u884C`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u800C\u4E0D\u662F`npx eslint xxx`\uFF0C{pageNameEN}.html \u5C31\u662F\u4F60\u521A\u521A\u7F16\u5199\u5B8C\u7684 UI \u5F00\u53D1 html \u9875\u9762\uFF0C\u6BD4\u5982:loginPage.html\uFF0C\u5982\u679C\u6267\u884C\u547D\u4EE4\u68C0\u6D4B\u53D1\u73B0\u4E86\u9519\u8BEF\uFF0C\u5FC5\u987B\u6309\u7167\u63D0\u793A\u628A\u6240\u6709\u9519\u8BEF\u4FEE\u590D\u5B8C\u6BD5\u624D\u884C\u3002**\n\n### **\u6B65\u9AA4\u89C4\u5219 10\uFF1A\u5F3A\u5236\u66F4\u65B0'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u7684`currentVersion`\u548C`designStatus`\uFF0C\u4EE5\u53CA\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\u90A3\u5C31\u66F4\u65B0`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u3002**\n\n- \u7B2C 1 \u70B9\uFF1A\u5148\u8BFB\u53D6'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7\u7684\u6570\u503C currentVersion\uFF0C\u7136\u540E\u66F4\u65B0\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7 version \u5C5E\u6027\u4E3A\uFF1AcurrentVersion+1\n- \u7B2C 2 \u70B9\uFF1A'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u91CC\u9762\u6807\u8BB0\u5F53\u524D\u9875\u9762\u7684\u8FDB\u5EA6\u72B6\u6001 designStatus \u5C5E\u6027\u4E3A completed\n- \u7B2C 3 \u70B9\uFF1A\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\uFF0C\u90A3\u4E48\u5FC5\u987B\u5728`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u6309\u987A\u5E8F\u6DFB\u52A0\u5F53\u524D\u9875\u9762\u7684\u6240\u6709\u5B50\u9875\u9762\u7684enName\uFF0C\u5B50\u9875\u9762\u7684\u987A\u5E8F\u4F60\u5FC5\u987B\u9605\u8BFB`.bytefun/xxx\u529F\u80FD\u6A21\u5757.md` \u6587\u4EF6\u91CC\u9762\u7684`\u9996\u9875\u4E3B\u4F53\u9875`\u7684`1.1\u3001\u9875\u9762\u7EC4\u6210\u90E8\u5206\uFF08\u4ECE\u4E0A\u5230\u4E0B\uFF09`\u6765\u786E\u5B9A\uFF0C\u5982\u679C\u5DF2\u5B58\u5728`subPageList`\u5B57\u6BB5\uFF0C\u90A3\u5C31\u8FDB\u884C\u5B50\u9875\u9762\u987A\u5E8F\u548C\u9519\u6F0F\u7684\u68C0\u67E5\u548C\u4FEE\u6B63\uFF0C\u683C\u5F0F\u4F8B\u5B50\uFF1A\n```json\n{\n \"enName\": \"homeMainPage\",\n \"subPageList\": [\n \"xxxPage\",\n \"yyyPage\",\n \"zzzPage\",\n \"aaaPage\"\n ]\n}\n```\n\n### **\u6B65\u9AA4\u89C4\u5219 11\uFF1A\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 11 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2Ahtml\u9875\u9762\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 11 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u8BBE\u8BA1\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\uFF0C\u5F97\u51FA\u8BE5\u529F\u80FD\u6A21\u5757\u73B0\u5728\u9700\u8981\u8BBE\u8BA1\u54EA\u4E00\u4E2A\u9875\u9762`pageNameEN`\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u90FD\u8BBE\u8BA1\u5B8C\u6210\u4E86\uFF0C\u90A3\u5C31\u505C\u6B62 AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`.bytefun/xxx\u529F\u80FD\u6A21\u5757.md` \u6587\u4EF6\uFF0C\u7406\u89E3\u5E76\u8F93\u51FA\u4E09\u90E8\u5206\u7684\u5185\u5BB9\u3002\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`.bytefun/UI\u8BBE\u8BA1\u89C4\u8303.md`UI\u89C4\u8303\u6587\u4EF6\u548C`.bytefun/ui-design-spec-demo.html`UI\u89C4\u8303\u6F14\u793A\u6587\u4EF6\uFF0C\u5B8C\u5168\u7406\u89E3\u638C\u63E1\u6574\u4E2AAPP\u7684UI\u8BBE\u8BA1\u89C4\u8303\uFF0C\u5305\u62EC\u6240\u6709\u989C\u8272\u3001\u5404\u79CD\u6587\u5B57\u3001\u5404\u79CD\u6309\u94AE\u3001\u5404\u79CD\u8F93\u5165\u6846\u3001\u6807\u9898\u680F\u3001\u5361\u7247\u3001\u5355\u9009\u3001\u591A\u9009\u7B49\u3002\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u7406\u89E3\u5E76\u9075\u5B88\u4EE5\u4E0B\u7981\u6B62\u7684\u591A\u4E2AUI\u8BBE\u8BA1\u4EE3\u7801\u5199\u6CD5\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`optimize_ui_design_prompt`\u4E25\u683C\u6309\u7167\u89C4\u5219\u8981\u6C42\uFF0C\u7136\u540E\u4E25\u683C\u9075\u5B88`optimize_ui_design_prompt`\u8FD4\u56DE\u7684\u89C4\u5219\u8981\u6C42\u63D0\u793A\u8BCD\u5B8C\u6210\u4E00\u4E2A`pageNameEN`html\u9875\u9762\u7684 UI \u8BBE\u8BA1\uFF0C\u5FC5\u987B\u6CE8\u610F\u4E00\u6B21\u53EA\u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\uFF08\u7981\u6B62 JS \u62FC\u63A5 html \u5B57\u7B26\u4E32\uFF0C\u7981\u6B62\u4F7F\u7528 js \u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728 html \u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\uFF09\u3002\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u6307\u5B9A`nodeType`\u7684\u8282\u70B9\u5224\u65AD\u662F\u5426\u9700\u8981\u4ECE\u540E\u7AEFapi\u63A5\u53E3\u83B7\u53D6\u6570\u636E\uFF0C\u5982\u679C\u662F\u90A3\u5C31\u5FC5\u987B\u6DFB\u52A0\u5C5E\u6027`fromApiOrCacheData=\"true\"`\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C5\u4E2AUI\u6837\u5F0F\u548C\u5C5E\u6027\u6B63\u786E\u6027\u548C\u5B8C\u6574\u6027\u7684\u68C0\u67E5\u3002\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED9\u9700\u8981\u5207\u6362\u9690\u85CF\u548C\u663E\u793A\u7684\u8282\u70B9\u6DFB\u52A0`showDisplayNone{{\u8282\u70B9id}}`\u7684js\u65B9\u6CD5\uFF0C\u7ED9 `nodeType` \u662F`oneStateContentContainer`\u3001`viewPagerItem`\u3001`tabPanel`\u7684\u8282\u70B9\u6DFB\u52A0\u663E\u793A\u548C\u9690\u85CF\u7684\u5207\u6362 js \u65B9\u6CD5:`switchTo{{\u8282\u70B9ID}}`\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C\u547D\u4EE4`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html`\u8FDB\u884C\u4EE3\u7801\u68C0\u67E5\u548C\u4FEE\u590D\u95EE\u9898\u3002\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u5F3A\u5236\u66F4\u65B0'doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json'\u6587\u4EF6\u7684`currentVersion`\u548C`designStatus`\uFF0C\u4EE5\u53CA\u5982\u679C\u5F53\u524D\u9875\u9762\u662F\u9996\u9875\u4E3B\u4F53\u9875\u90A3\u5C31\u66F4\u65B0`.bytefun/project.json`\u6587\u4EF6\u7684\u9996\u9875\u4E3B\u4F53\u9875\u7684json\u5BF9\u8C61\u7684`subPageList`\u5B57\u6BB5\u3002\n11. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521911`\u6267\u884C\u4EFB\u52A1\uFF0C\u5224\u65AD\u8BE5\u529F\u80FD\u6A21\u5757\u662F\u5426\u5168\u90E8\u9875\u9762\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\uFF0C\u90A3\u5C31\u6309\u7167\u89C4\u5219\u8BA1\u5212\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u6240\u6709\u9875\u9762\u90FD\u5B8C\u6210\u4E86UI\u8BBE\u8BA1\uFF0C\u90A3\u5C31\u7ED3\u675F AI \u4F1A\u8BDD\uFF0C\u505C\u6B62\u4EFB\u52A1\n\n## \uD83D\uDEAB \u7EDD\u5BF9\u7981\u6B62\n\n- \u274C \u8BF4\"\u4EFB\u52A1\u5B8C\u6210\"\u800C\u4E0D\u68C0\u67E5\u5176\u4ED6\u9875\u9762\n- \u274C \u8DF3\u8FC7\u8FDB\u5EA6\u6587\u4EF6\u68C0\u67E5\n- \u274C \u8BE2\u95EE\u7528\u6237\u662F\u5426\u7EE7\u7EED\n- \u274C \u8BA4\u4E3A\u5B8C\u6210\u4E00\u4E2A\u9875\u9762\u5C31\u662F\u5B8C\u6210\u6574\u4E2A\u4EFB\u52A1\n\n## \uD83C\uDFAF \u6210\u529F\u6807\u51C6\n\n\u53EA\u6709\u5F53\u524D\u6A21\u5757\u6240\u6709\u9875\u9762designStatus\u72B6\u6001\u90FD\u662F\"completed\"\u65F6\uFF0C\u624D\u80FD\u7ED3\u675F\u4F1A\u8BDD\u3002\n\n## **\u8FDD\u53CD\u6B64\u89C4\u5219 = \u4EFB\u52A1\u5931\u8D25**\n";
|
|
2
2
|
//# sourceMappingURL=uiDesignGuide.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uiDesignGuide.d.ts","sourceRoot":"","sources":["../src/uiDesignGuide.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"uiDesignGuide.d.ts","sourceRoot":"","sources":["../src/uiDesignGuide.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,kn5BA6KvC,CAAA"}
|
package/build/uiDesignGuide.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
export const uiDesignGuidePromptTemplate = `
|
|
2
2
|
# 你是 UI 设计师专家、代码开发专家,你必须按照\`执行步骤来\`执行任务。
|
|
3
3
|
|
|
4
|
-
## **执行设计:每一个页面设计都必须调用 todo_write 工具创建以下
|
|
4
|
+
## **执行设计:每一个页面设计都必须调用 todo_write 工具创建以下 11 个任务列表,创建完成后必须确认:如果任务数量不是 11 个,立即报错并重新创建。**
|
|
5
5
|
|
|
6
6
|
1. 严格按照\`步骤规则1\`执行任务,阅读\`doc/UI设计进度.json\`,得出该功能模块现在需要设计哪一个页面\`pageNameEN\`,如果该功能模块都设计完成了,那就停止 AI 会话,停止任务
|
|
7
7
|
2. 严格按照\`步骤规则2\`执行任务,阅读\`.bytefun/xxx功能模块.md\` 文件,理解并输出三部分的内容。
|
|
8
8
|
3. 严格按照\`步骤规则3\`执行任务,阅读\`.bytefun/UI设计规范.md\`UI规范文件和\`.bytefun/ui-design-spec-demo.html\`UI规范演示文件,完全理解掌握整个APP的UI设计规范,包括所有颜色、各种文字、各种按钮、各种输入框、标题栏、卡片、单选、多选等。
|
|
9
9
|
4. 严格按照\`步骤规则4\`执行任务,必须理解并遵守以下禁止的多个UI设计代码写法
|
|
10
10
|
5. 严格按照\`步骤规则5\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`严格按照规则要求,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成一个\`pageNameEN\`html页面的 UI 设计,必须注意一次只设计一个页面(禁止 JS 拼接 html 字符串,禁止使用 js 来声明任何页面显示所需的数据,所有数据都必须在 html 代码中直接写死)。
|
|
11
|
-
6. 严格按照\`步骤规则6
|
|
12
|
-
7. 严格按照\`步骤规则7
|
|
13
|
-
8. 严格按照\`步骤规则8
|
|
14
|
-
9. 严格按照\`步骤规则9
|
|
15
|
-
10. 严格按照\`步骤规则10
|
|
11
|
+
6. 严格按照\`步骤规则6\`执行任务,指定\`nodeType\`的节点判断是否需要从后端api接口获取数据,如果是那就必须添加属性\`fromApiOrCacheData="true"\`
|
|
12
|
+
7. 严格按照\`步骤规则7\`执行任务,执行5个UI样式和属性正确性和完整性的检查。
|
|
13
|
+
8. 严格按照\`步骤规则8\`执行任务,给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`。
|
|
14
|
+
9. 严格按照\`步骤规则9\`执行任务,执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查和修复问题。
|
|
15
|
+
10. 严格按照\`步骤规则10\`执行任务,强制更新'doc/UI设计进度.json'文件的\`currentVersion\`和\`designStatus\`,以及如果当前页面是首页主体页那就更新\`.bytefun/project.json\`文件的首页主体页的json对象的\`subPageList\`字段。
|
|
16
|
+
11. 严格按照\`步骤规则11\`执行任务,判断该功能模块是否全部页面完成了UI设计,如果还没有完成,那就按照规则计划下一个页面的开发,如果该功能模块所有页面都完成了UI设计,那就结束 AI 会话,停止任务
|
|
16
17
|
|
|
17
18
|
### **步骤规则 1:阅读\`doc/UI设计进度.json\`查看该功能模块页面设计进度情况\`designStatus\`字段,依据该功能模块各个页面的\`designStatus\`完成情况执行以下操作:**
|
|
18
19
|
|
|
@@ -70,12 +71,14 @@ export const uiDesignGuidePromptTemplate = `
|
|
|
70
71
|
- 必须理解掌握规则要求提示词的\`六、首页主体页与子页面的规则\`的所有内容,必须严格遵守。
|
|
71
72
|
- 必须理解掌握规则要求提示词的\`七、如果用户没有明确说明该页面设计需求,那就按照页面默认规则设计\`的所有内容,必须严格遵守。
|
|
72
73
|
|
|
73
|
-
### **步骤规则 6
|
|
74
|
-
|
|
75
|
-
2. 检查tab选项卡每一个tab panel是否都有对应的html代码实现完整的内容展示
|
|
76
|
-
3. \`nodeType\` 是\`verticalListView\`、\`horizontalListView\`、\`viewPager\`、\`tabPanelFather\`、\`radioGroup\`、\`checkBoxGroup\`类型的节点添加数据获取方式属性\`fromApiOrCacheData\`,\`fromApiOrCacheData="true"\`的情况必须满足以下条件:
|
|
74
|
+
### **步骤规则 6:指定\`nodeType\`的节点判断是否需要从后端api接口获取数据,如果是那就必须添加属性\`fromApiOrCacheData="true"\`**
|
|
75
|
+
- 如果\`nodeType\` 是\`verticalListView\`、\`horizontalListView\`、\`viewPager\`、\`tabPanelFather\`、\`radioGroup\`、\`checkBoxGroup\`、\`gridContainer\`、\`inlineBlockAndWrap\`类型的节点添加数据获取方式属性\`fromApiOrCacheData\`,\`fromApiOrCacheData="true"\`的情况必须满足以下条件:
|
|
77
76
|
- 该组件的数据是从网络或者本地持久化缓存拉取回来的,比如:热门商品列表组件\`verticalListView\`,该组件的数据是从网络或者本地持久化缓存拉取回来的
|
|
78
77
|
- 如果是一些不需要后端 API 联网或本地持久化缓存拉取获取的静态写死的数据,那么就不需要 \`fromApiOrCacheData\` 属性了,比如:个人中心列表项、设置列表项、菜单列表项,这些根本不需要经过后台 API 联网或本地持久化缓存拉取获取的,那么就不要 \`fromApiOrCacheData\` 属性
|
|
78
|
+
|
|
79
|
+
### **步骤规则 7:给以下4点的UI样式和属性正确性和完整性检查**
|
|
80
|
+
1. 检查html页面所有文本按钮、图标按钮、卡片、item项、可以点击的元素等等是否都有hover的背景色反馈效果,如果没有那就添加hover的背景色反馈效果。
|
|
81
|
+
2. 检查tab选项卡每一个tab panel是否都有对应的html代码实现完整的内容展示
|
|
79
82
|
4、检查tab选项卡每一个tab panel是否都有对应的html代码实现完整的内容展示,绝对禁止敷衍地使用\`Placeholder content/待开发/开发中/即将上线\`等等来敷衍地展示Tabs选项卡组件的每一个Tab Panel,必须每一个Tab Panel都有具体真实的内容展示实现。
|
|
80
83
|
5. 检查密码输入框右侧的密码显示与隐藏图标的\`nodeType\`要改为\`switch\`并添加一个 \`checkedClass\` 属性,然后给html中所有\`nodeType\` 是 \`switch\`、\`radio\`、\`checkBox\`节点的孩子 \`i\` 标签节点添加一个 \`checkedClass\` 属性,用于表示选中状态的 icon 图标样式类名,比如:
|
|
81
84
|
\`\`\`html
|
|
@@ -106,7 +109,7 @@ export const uiDesignGuidePromptTemplate = `
|
|
|
106
109
|
</div>
|
|
107
110
|
\`\`\`
|
|
108
111
|
|
|
109
|
-
### **步骤规则
|
|
112
|
+
### **步骤规则 8 - 给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`、\`dialogOverlay\`、\`toast\`、\`dropDownMenu\`、\`sideSlidePanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`**
|
|
110
113
|
|
|
111
114
|
- 给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法
|
|
112
115
|
- js 方法的命名规则:\`switchTo\` + 节点 id,比如:\`switchToAgeContainer\`、\`switchToPhoneContainer\`
|
|
@@ -123,9 +126,9 @@ function showDisplayNoneTitleMenu() {
|
|
|
123
126
|
}
|
|
124
127
|
\`\`\`
|
|
125
128
|
|
|
126
|
-
### **步骤规则
|
|
129
|
+
### **步骤规则 9 - 执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查,必须是执行\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`而不是\`npx eslint xxx\`,{pageNameEN}.html 就是你刚刚编写完的 UI 开发 html 页面,比如:loginPage.html,如果执行命令检测发现了错误,必须按照提示把所有错误修复完毕才行。**
|
|
127
130
|
|
|
128
|
-
### **步骤规则
|
|
131
|
+
### **步骤规则 10:强制更新'doc/UI设计进度.json'文件的\`currentVersion\`和\`designStatus\`,以及如果当前页面是首页主体页那就更新\`.bytefun/project.json\`文件的首页主体页的json对象的\`subPageList\`字段。**
|
|
129
132
|
|
|
130
133
|
- 第 1 点:先读取'doc/UI设计进度.json'文件当前页面的版本号的数值 currentVersion,然后更新当前页面的版本号 version 属性为:currentVersion+1
|
|
131
134
|
- 第 2 点:'doc/UI设计进度.json'文件里面标记当前页面的进度状态 designStatus 属性为 completed
|
|
@@ -142,18 +145,19 @@ function showDisplayNoneTitleMenu() {
|
|
|
142
145
|
}
|
|
143
146
|
\`\`\`
|
|
144
147
|
|
|
145
|
-
### **步骤规则
|
|
148
|
+
### **步骤规则 11:调用 todo_write 工具为下一个页面创建以下 11 个任务列表并马上执行,确保流程永续,如果还没有完成该功能模块的所有页面设计,不得停止结束任务,如果你直接编写下一个html页面代码,马上报错,视为严重违规。创建完成后必须确认:如果任务数量不是 11 个,立即报错并重新创建。如果你在该功能模块的所有页面还没有设计完毕的情况下停止了任务,马上报错,视为严重违规。**
|
|
146
149
|
|
|
147
150
|
1. 严格按照\`步骤规则1\`执行任务,阅读\`doc/UI设计进度.json\`,得出该功能模块现在需要设计哪一个页面\`pageNameEN\`,如果该功能模块都设计完成了,那就停止 AI 会话,停止任务
|
|
148
|
-
2. 严格按照\`步骤规则2
|
|
149
|
-
3. 严格按照\`步骤规则3
|
|
151
|
+
2. 严格按照\`步骤规则2\`执行任务,阅读\`.bytefun/xxx功能模块.md\` 文件,理解并输出三部分的内容。
|
|
152
|
+
3. 严格按照\`步骤规则3\`执行任务,阅读\`.bytefun/UI设计规范.md\`UI规范文件和\`.bytefun/ui-design-spec-demo.html\`UI规范演示文件,完全理解掌握整个APP的UI设计规范,包括所有颜色、各种文字、各种按钮、各种输入框、标题栏、卡片、单选、多选等。
|
|
150
153
|
4. 严格按照\`步骤规则4\`执行任务,必须理解并遵守以下禁止的多个UI设计代码写法
|
|
151
154
|
5. 严格按照\`步骤规则5\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`严格按照规则要求,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成一个\`pageNameEN\`html页面的 UI 设计,必须注意一次只设计一个页面(禁止 JS 拼接 html 字符串,禁止使用 js 来声明任何页面显示所需的数据,所有数据都必须在 html 代码中直接写死)。
|
|
152
|
-
6. 严格按照\`步骤规则6
|
|
153
|
-
7. 严格按照\`步骤规则7
|
|
154
|
-
8. 严格按照\`步骤规则8
|
|
155
|
-
9. 严格按照\`步骤规则9
|
|
156
|
-
10. 严格按照\`步骤规则10
|
|
155
|
+
6. 严格按照\`步骤规则6\`执行任务,指定\`nodeType\`的节点判断是否需要从后端api接口获取数据,如果是那就必须添加属性\`fromApiOrCacheData="true"\`
|
|
156
|
+
7. 严格按照\`步骤规则7\`执行任务,执行5个UI样式和属性正确性和完整性的检查。
|
|
157
|
+
8. 严格按照\`步骤规则8\`执行任务,给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`。
|
|
158
|
+
9. 严格按照\`步骤规则9\`执行任务,执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查和修复问题。
|
|
159
|
+
10. 严格按照\`步骤规则10\`执行任务,强制更新'doc/UI设计进度.json'文件的\`currentVersion\`和\`designStatus\`,以及如果当前页面是首页主体页那就更新\`.bytefun/project.json\`文件的首页主体页的json对象的\`subPageList\`字段。
|
|
160
|
+
11. 严格按照\`步骤规则11\`执行任务,判断该功能模块是否全部页面完成了UI设计,如果还没有完成,那就按照规则计划下一个页面的开发,如果该功能模块所有页面都完成了UI设计,那就结束 AI 会话,停止任务
|
|
157
161
|
|
|
158
162
|
## 🚫 绝对禁止
|
|
159
163
|
|
|
@@ -168,4 +172,4 @@ function showDisplayNoneTitleMenu() {
|
|
|
168
172
|
|
|
169
173
|
## **违反此规则 = 任务失败**
|
|
170
174
|
`;
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ25HdWlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91aURlc2lnbkd1aWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUsxQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHVpRGVzaWduR3VpZGVQcm9tcHRUZW1wbGF0ZSA9IGBcbiMg5L2g5pivIFVJIOiuvuiuoeW4iOS4k+WutuOAgeS7o+eggeW8gOWPkeS4k+Wutu+8jOS9oOW/hemhu+aMieeFp1xcYOaJp+ihjOatpemqpOadpVxcYOaJp+ihjOS7u+WKoeOAglxuXG4jIyAqKuaJp+ihjOiuvuiuoe+8muavj+S4gOS4qumhtemdouiuvuiuoemDveW/hemhu+iwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+WIm+W7uuS7peS4iyAxMCDkuKrku7vliqHliJfooajvvIzliJvlu7rlrozmiJDlkI7lv4Xpobvnoa7orqTvvJrlpoLmnpzku7vliqHmlbDph4/kuI3mmK8gMTAg5Liq77yM56uL5Y2z5oql6ZSZ5bm26YeN5paw5Yib5bu644CCKipcblxuMS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMVxcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYGRvYy9VSeiuvuiuoei/m+W6pi5qc29uXFxg77yM5b6X5Ye66K+l5Yqf6IO95qih5Z2X546w5Zyo6ZyA6KaB6K6+6K6h5ZOq5LiA5Liq6aG16Z2iXFxgcGFnZU5hbWVFTlxcYO+8jOWmguaenOivpeWKn+iDveaooeWdl+mDveiuvuiuoeWujOaIkOS6hu+8jOmCo+WwseWBnOatoiBBSSDkvJror53vvIzlgZzmraLku7vliqFcbjIuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTJcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGAuYnl0ZWZ1bi94eHjlip/og73mqKHlnZcubWRcXGAg5paH5Lu277yM55CG6Kej5bm26L6T5Ye65LiJ6YOo5YiG55qE5YaF5a6544CCXG4zLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkzXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxgLmJ5dGVmdW4vVUnorr7orqHop4TojIMubWRcXGBVSeinhOiMg+aWh+S7tuWSjFxcYC5ieXRlZnVuL3VpLWRlc2lnbi1zcGVjLWRlbW8uaHRtbFxcYFVJ6KeE6IyD5ryU56S65paH5Lu277yM5a6M5YWo55CG6Kej5o6M5o+h5pW05LiqQVBQ55qEVUnorr7orqHop4TojIPvvIzljIXmi6zmiYDmnInpopzoibLjgIHlkITnp43mloflrZfjgIHlkITnp43mjInpkq7jgIHlkITnp43ovpPlhaXmoYbjgIHmoIfpopjmoI/jgIHljaHniYfjgIHljZXpgInjgIHlpJrpgInnrYnjgIJcbjQuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTRcXGDmiafooYzku7vliqHvvIzlv4XpobvnkIbop6PlubbpgbXlrojku6XkuIvnpoHmraLnmoTlpJrkuKpVSeiuvuiuoeS7o+eggeWGmeazlVxuNS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNVxcYOaJp+ihjOS7u+WKoe+8jOS4uuWIt+aWsOiusOW/hue8k+WtmO+8jOS9oOW/hemhu+mHjeaWsOiwg+eUqE1DUOW3peWFt1xcYG9wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHRcXGDkuKXmoLzmjInnhafop4TliJnopoHmsYLvvIznhLblkI7kuKXmoLzpgbXlrohcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg6L+U5Zue55qE6KeE5YiZ6KaB5rGC5o+Q56S66K+N5a6M5oiQ5LiA5LiqXFxgcGFnZU5hbWVFTlxcYGh0bWzpobXpnaLnmoQgVUkg6K6+6K6h77yM5b+F6aG75rOo5oSP5LiA5qyh5Y+q6K6+6K6h5LiA5Liq6aG16Z2i77yI56aB5q2iIEpTIOaLvOaOpSBodG1sIOWtl+espuS4su+8jOemgeatouS9v+eUqCBqcyDmnaXlo7DmmI7ku7vkvZXpobXpnaLmmL7npLrmiYDpnIDnmoTmlbDmja7vvIzmiYDmnInmlbDmja7pg73lv4XpobvlnKggaHRtbCDku6PnoIHkuK3nm7TmjqXlhpnmrbvvvInjgIJcbjYuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTZcXGDmiafooYzku7vliqHvvIzmiafooYw25LiqVUnmoLflvI/lkozlsZ7mgKfmraPnoa7mgKflkozlrozmlbTmgKfnmoTmo4Dmn6XjgIJcbjcuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTdcXGDmiafooYzku7vliqHvvIznu5npnIDopoHliIfmjaLpmpDol4/lkozmmL7npLrnmoToioLngrnmt7vliqBcXGBzaG93RGlzcGxheU5vbmV7e+iKgueCuWlkfX1cXGDnmoRqc+aWueazle+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDnmoToioLngrnmt7vliqDmmL7npLrlkozpmpDol4/nmoTliIfmjaIganMg5pa55rOVOlxcYHN3aXRjaFRve3voioLngrlJRH19XFxg44CCXG44LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk4XFxg5omn6KGM5Lu75Yqh77yM5omn6KGM5ZG95LukXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDov5vooYzku6PnoIHmo4Dmn6Xlkozkv67lpI3pl67popjjgIJcbjkuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTlcXGDmiafooYzku7vliqHvvIzlvLrliLbmm7TmlrAnZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb24n5paH5Lu255qEXFxgY3VycmVudFZlcnNpb25cXGDlkoxcXGBkZXNpZ25TdGF0dXNcXGDvvIzku6Xlj4rlpoLmnpzlvZPliY3pobXpnaLmmK/pppbpobXkuLvkvZPpobXpgqPlsLHmm7TmlrBcXGAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cXGDmlofku7bnmoTpppbpobXkuLvkvZPpobXnmoRqc29u5a+56LGh55qEXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXjgIJcbjEwLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMFxcYOaJp+ihjOS7u+WKoe+8jOWIpOaWreivpeWKn+iDveaooeWdl+aYr+WQpuWFqOmDqOmhtemdouWujOaIkOS6hlVJ6K6+6K6h77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ77yM6YKj5bCx5oyJ54Wn6KeE5YiZ6K6h5YiS5LiL5LiA5Liq6aG16Z2i55qE5byA5Y+R77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5omA5pyJ6aG16Z2i6YO95a6M5oiQ5LqGVUnorr7orqHvvIzpgqPlsLHnu5PmnZ8gQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG5cbiMjIyAqKuatpemqpOinhOWImSAx77ya6ZiF6K+7XFxgZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb25cXGDmn6XnnIvor6Xlip/og73mqKHlnZfpobXpnaLorr7orqHov5vluqbmg4XlhrVcXGBkZXNpZ25TdGF0dXNcXGDlrZfmrrXvvIzkvp3mja7or6Xlip/og73mqKHlnZflkITkuKrpobXpnaLnmoRcXGBkZXNpZ25TdGF0dXNcXGDlrozmiJDmg4XlhrXmiafooYzku6XkuIvmk43kvZzvvJoqKlxuXG4tIOWmguaenOivpeWKn+iDveaooeWdl+aJgOaciemhtemdoumDveiuvuiuoeWujOaIkOS6hu+8jOmCo+WwseWBnOatoiBBSSDkvJror53vvIzlgZzmraLku7vliqFcbi0g5aaC5p6c6K+l5Yqf6IO95qih5Z2X6L+Y5pyJ5pyq6K6+6K6h5a6M5oiQ55qE6aG16Z2i77yM6YKj5bCx6I635Y+W5Yiw6K+l5Yqf6IO95qih5Z2X55qE56ys5LiA5Liq5pyq6K6+6K6h5a6M5oiQ55qE6aG16Z2iXFxgcGFnZU5hbWVFTlxcYO+8jOe7p+e7reaJp+ihjOS4i+S4gOatpVxuXG4jIyMgKirmraXpqqTop4TliJkgMu+8muagueaNrueUqOaIt+mcgOaxgu+8jOW5tuS9v+eUqFxcYHJlYWRfZmlsZVxcYOW3peWFt+ivu+WPluivpemhtemdouaJgOWcqOeahOWKn+iDveaooeWdl+iuvuiuoVxcYC5ieXRlZnVuL3vmlbDlrZfluo/lj7d9LXh4eOWKn+iDveaooeWdl+S4muWKoemAu+i+keiuvuiuoS5tZFxcYOaWh+S7tu+8jOW5tuS7lOe7huWIhuaekOivpeaWh+S7tueahFxcYDEuMeOAgemhtemdoue7hOaIkOmDqOWIhlxcYOOAgVxcYDEuMuOAgeaJgOmcgOeahOWvueivneahhuOAgXRvYXN044CB5LiL5ouJ6I+c5Y2V44CB5L6n5ruR6Z2i5p2/XFxg77yM5rOo5oSP6L+Z5Liq6aG16Z2i57uE5oiQ6YOo5YiG5piv5LuO5LiK5Yiw5LiL55qE77yM5Zug5q2k5b+F6aG76KaB5oyJ54Wn6L+Z5Liq6aG65bqP5p2l6K6+6K6h5a6e546w6aG16Z2i77yM5bm25b+F6aG75ZyoIHRob3VnaHQg5a2X5q616L6T5Ye677ya5Lul5LiK5LiJ6YOo5YiG55qE5YaF5a6544CCKipcblxuIyMjICoq5q2l6aqk6KeE5YiZIDPvvJrkvb/nlKhcXGByZWFkX2ZpbGVcXGDlt6Xlhbfor7vlj5ZcXGAuYnl0ZWZ1bi9VSeiuvuiuoeinhOiMgy5tZFxcYOaWh+S7tu+8jOWujOWFqOeQhuino+aOjOaPoeaVtOS4qkFQUOeahFVJ6K6+6K6h6KeE6IyD77yM5YyF5ous5omA5pyJ6aKc6Imy44CB5ZCE56eN5paH5a2X44CB5ZCE56eN5oyJ6ZKu44CB5ZCE56eN6L6T5YWl5qGG44CB5qCH6aKY5qCP44CB5Y2h54mH44CB5Y2V6YCJ44CB5aSa6YCJ562J44CCKipcblxuIyMjICoq5q2l6aqk6KeE5YiZIDTvvJrlv4XpobvnkIbop6PlubbpgbXlrojku6XkuIvnpoHmraLnmoTlpJrkuKpVSeiuvuiuoeS7o+eggeWGmeazlSoqXG4tIOemgeatouS9v+eUqOS7u+S9leWJjeerr+ahhuaetu+8jOWPquS9v+eUqCBodG1sK+exu+mAieaLqeWZqOagt+W8jytqcyDmnaXlrp7njrDjgIJcbi0g56aB5q2i5L2/55SoanPku6PnoIHmnaXmi7zmjqVodG1s5a2X56ym5Liy77yM5b+F6aG75ZyoYm9keeagh+etvumHjOmdouebtOaOpeWGmWh0bWzku6PnoIHjgIJcbi0g56aB5q2i5L2/55SoanPku6PnoIHmnaXlo7DmmI7ku7vkvZXpobXpnaLmmL7npLrmiYDpnIDnmoTmlbDmja7vvIzmiYDmnInmlbDmja7pg73lv4XpobvlnKhodG1s5Luj56CB5Lit55u05o6l5YaZ5q2744CCXG4tIOemgeatouS9v+eUqOaWh+acrOa4kOWPmOiJsu+8jOW/hemhu+S9v+eUqOe6r+iJsuaWh+acrO+8jOS5n+WwseaYr+emgeatouS9v+eUqFxcYC13ZWJraXQtdGV4dC1maWxsLWNvbG9yXFxg5bGe5oCn44CCXG4tIOemgeatoue7memhtemdoua3u+WKoFxcYOaJi+acuumhtumDqOeKtuaAgeagj1xcYOOAgVxcYOaJi+acuuW6lemDqOaMh+ekuuWZqOagj1xcYOS4pOS4qumdnumhtemdouWGheWuueeahOWFg+e0oOiKgueCue+8jOi/meaYr+aJi+acuuehrOS7tuiHquW4pueahOWFg+e0oO+8jOS4jeiDveWcqOmhtemdouS4rea3u+WKoOOAglxuLSDnpoHmraLkvb/nlKhcXGA6YmVmb3JlXFxg44CBXFxgOmFmdGVyXFxg5Lyq5YWD57Sg77yM5b+F6aG75L2/55So5YW25LuW5qCH562+5p2l5a6e546w44CCXG4tIOemgeatouS9v+eUqFxcYGJhY2tkcm9wLWZpbHRlclxcYOetieeOu+eSg+aViOaenO+8jOW/hemhu+WIoOmZpOaOieaJgOacieS9v+eUqOWIsOeOu+eSg+aViOaenOeahOS7o+eggeOAglxuLSDnpoHmraLkvb/nlKjlpJrkuKpw5qCH562+5oiW5aSa5Liq5YW25LuW5qCH562+5p2l5pi+56S65LiA5Liq5LuO572R57uc5oiW5YW25LuW5Zyw5pa55ouJ5Y+W5Zue5p2l55qE6ZW/5paH5pys77yM5b+F6aG75Y+q6IO95L2/55So5LiA5Liq5qCH562+5p2l5pi+56S677yM5q+U5aaC77yaZGl244CBc3Bhbuetie+8jOWboOS4uue9kee7nOaLieWPluWbnuadpeeahOmVv+aWh+acrOaYr+S4gOS4quaWh+acrO+8jOaXoOazleS9v+eUqOWkmuS4quagh+etvuadpeaYvuekuuS4gOS4quaWh+acrO+8jOW/hemhu+WPquiDveS9v+eUqOS4gOS4quagh+etvuadpeaYvuekuuOAglxuLSBsb2FkaW5n6IqC54K555qE5a6e546w56aB5q2i5L2/55SoZGl25qCH562+5LiO6L655qGG5bGe5oCn5a6e546w77yM5b+F6aG75L2/55So5Zu+5qCHaWNvbueahGnmoIfnrb7mnaXlrp7njrBsb2FkaW5n55qE6IqC54K5XG4tIOemgeatouS4umh0bWzmoIfnrb7oioLngrnmt7vliqDliqjnlLvmiJbov4fmuKHmlYjmnpzvvIzpobXpnaLorr7orqHkuI3pnIDopoHku7vkvZXliqjnlLvlkozov4fmuKHmlYjmnpzvvIzmr5TlpoLnpoHmraLvvJpAa2V5ZnJhbWVz44CBdHJhbnNpdGlvbuOAgWFuaW1hdGlvbiDnrYnjgIJcbi0g5oyJ6ZKu44CB5Y2h54mH44CBaXRlbemhueetieWFg+e0oOW/hemhu+imgeaciWhvdmVy5LiO54K55Ye75Y+N6aaI77yM54K55Ye75Y+N6aaI5b+F6aG75L2/55So5rWF6Imy55qE6IOM5pmv6ImyYmFja2dyb3VuZOadpeWPjemmiOWwseihjO+8jOS4peemgeS9v+eUqHRyYW5zZm9ybeaViOaenFxuICAgIC0g4p2MIOmUmeivr+eahOeUqOazle+8miBcbiAgICBcXGBcXGBcXGAgY3NzXG4gICAgLmhvdC1zYWxlcy1pdGVtOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC4uLnB4KTtcbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gICAgLSDinIUg5q2j56Gu55qE55So5rOV77yaXG4gICAgXFxgXFxgXFxgIGNzc1xuICAgIC5ob3Qtc2FsZXMtaXRlbTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IC4uLjtcbiAgICB9XG4gICAgXFxgXFxgXFxgXG4tIOemgeatouS9v+eUqGRpduagh+etvuadpeWunueOsGltYWdl5Zu+54mH77yM5b+F6aG76KaB5L2/55SoaW1n5qCH562+5p2l5a6e546w5Zu+54mH6IqC54K577yMaW1n5qCH562+55qEc3Jj5bGe5oCn5b+F6aG76K6+572u5Li677yaXFxgaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nMS5qcGdcXGDvvIzlhbbkuK3ph4zpnaLnmoRcXGBzaG93SW1nMVxcYOWPr+S7peaUueS4ujF+MzDnmoTku7vmhI/kuIDkuKrmlbDlrZfvvIzmr5TlpoLvvJpcXGBzaG93SW1nNVxcYOOAglxuICAtIOKdjOmUmeivr+eahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCBodG1sXG4gICAgPGRpdiBjbGFzcz1cImJlc3RzZWxsZXItY292ZXJcIiBpZD1cImJlc3RzZWxsZXJDb3ZlcjFcIiBuYW1lPVwi55WF6ZSA5Lmm57GN5bCB6Z2iMVwiIG5vZGVUeXBlPVwiaW1hZ2VcIj5cbiAgICA8L2Rpdj5cbiAgICBcXGBcXGBcXGBcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV77yaXG4gICAgXFxgXFxgXFxgIGh0bWxcbiAgICA8aW1nIGNsYXNzPVwiYmVzdHNlbGxlci1jb3ZlclwiIGlkPVwiYmVzdHNlbGxlckNvdmVyMVwiIG5hbWU9XCLnlYXplIDkuabnsY3lsIHpnaIxXCIgbm9kZVR5cGU9XCJpbWFnZVwiIHNyYz1cImh0dHBzOi8vb3NzLmJ5dGVmdW5nby5jb20vZjEvc2hvd0ltZzcuanBnXCI+ICBcbiAgICBcXGBcXGBcXGBcbi0g56aB5q2iIGlkIOWxnuaAp+S4jeinhOiMg++8jGlkIOW/hemhu+WUr+S4gO+8jOS4lOWPquiDveeUseWtl+avjeWSjOaVsOWtl+e7hOaIkO+8iOS4jeiDveS7peaVsOWtl+W8gOWktO+8ie+8jOW7uuiuruS9v+eUqOmpvOWzsOWRveWQjeOAglxuLSDnpoHmraLkvb/nlKjooYzlhoUgc3R5bGUg5bGe5oCn77yM5b+F6aG76YCa6L+HIGNsYXNzIOWSjCBDU1Mg5paH5Lu25p2l5a6a5LmJ5qC35byP44CCXG4tIOemgeatoiByYWRpYWwtZ3JhZGllbnQg5qC35byP5LiN6KeE6IyD77yM5b6E5ZCR5riQ5Y+Y5b+F6aG75pi+5byP5aOw5piO5Li6IGNpcmNsZe+8jOS4lOS4gOS4qiBET00g6IqC54K55Y+q6IO95YyF5ZCr5LiA5LiqIHJhZGlhbC1ncmFkaWVudOOAglxuXG4jIyMgKirmraXpqqTop4TliJkgNe+8muS4uuWIt+aWsOiusOW/hue8k+WtmO+8jOS9oOW/hemhu+mHjeaWsOiwg+eUqE1DUOW3peWFt1xcYG9wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHRcXGDojrflj5bliLBVSeiuvuiuoeeahOinhOWImeimgeaxguaPkOekuuivje+8jOeEtuWQjuS4peagvOmBteWuiFxcYG9wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHRcXGDov5Tlm57nmoTop4TliJnopoHmsYLmj5DnpLror43lrozmiJBcXGBkb2Mve2N1cnJlbnRNb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS97cGFnZU5hbWVFTn0uaHRtbFxcYOmhtemdoueahCBVSSDorr7orqEqKjpcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5LiA44CB5qC35byP6KeE5YiZXFxg55qE5omA5pyJ5YaF5a6577yM5b+F6aG75Lil5qC86YG15a6I44CCXG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOS6jOOAgeW/hemhu+e7meavj+S4gOS4quiKgueCuea3u+WKoGlk44CBbmFtZeOAgW5vZGVUeXBl5bGe5oCnXFxg44CCXG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOS4ieOAgei9ruaSreS4jlRhYnPnu4Tku7bnmoTop4TliJlcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5Zub44CB5YiX6KGo57uE5Lu26KeE5YiZXFxg55qE5omA5pyJ5YaF5a6577yM5b+F6aG75Lil5qC86YG15a6I77ya5aaC5p6c6K+l5YiX6KGo55qE5pWw5o2u5piv5LuO572R57uc5ouJ5Y+W55qE77yM6YKj5LmI5b+F6aG75L2/55So5aSa54q25oCB5a655ZmoXFxgbXVsdGlTdGF0ZUNvbnRhaW5lclxcYOWwhmxvYWRpbmfjgIHogZTnvZHlpLHotKXjgIHmsqHmnInmlbDmja7jgIHmnInmlbDmja7nmoTlm5vkuKrnirbmgIHkvb/nlKhcXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDljIXotbfmnaXlubblsZXnpLrlh7rmnaXvvIzlhbbkuK3mnInmlbDmja7nirbmgIHnmoRcXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDljIXlkKvnmoTlsLHmmK/or6XliJfooajnu4Tku7bjgILjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5LqU44CB5Zu+5qCH5LiO5Zu+54mH55qE6KeE5YiZXFxg55qE5omA5pyJ5YaF5a6577yM5b+F6aG75Lil5qC86YG15a6I44CCXG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOWFreOAgemmlumhteS4u+S9k+mhteS4juWtkOmhtemdoueahOinhOWImVxcYOeahOaJgOacieWGheWuue+8jOW/hemhu+S4peagvOmBteWuiOOAglxuLSDlv4XpobvnkIbop6Pmjozmj6Hop4TliJnopoHmsYLmj5DnpLror43nmoRcXGDkuIPjgIHlpoLmnpznlKjmiLfmsqHmnInmmI7noa7or7TmmI7or6XpobXpnaLorr7orqHpnIDmsYLvvIzpgqPlsLHmjInnhafpobXpnaLpu5jorqTop4TliJnorr7orqFcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojjgIJcblxuIyMjICoq5q2l6aqk6KeE5YiZIDbvvJrnu5nku6XkuIs154K555qEVUnmoLflvI/lkozlsZ7mgKfmraPnoa7mgKflkozlrozmlbTmgKfmo4Dmn6UqKlxuMS4g5qOA5p+laHRtbOmhtemdouaJgOacieaWh+acrOaMiemSruOAgeWbvuagh+aMiemSruOAgeWNoeeJh+OAgWl0ZW3pobnjgIHlj6/ku6Xngrnlh7vnmoTlhYPntKDnrYnnrYnmmK/lkKbpg73mnIlob3ZlcueahOiDjOaZr+iJsuWPjemmiOaViOaenO+8jOWmguaenOayoeaciemCo+Wwsea3u+WKoGhvdmVy55qE6IOM5pmv6Imy5Y+N6aaI5pWI5p6c44CCXG4yLiDmo4Dmn6V0YWLpgInpobnljaHmr4/kuIDkuKp0YWIgcGFuZWzmmK/lkKbpg73mnInlr7nlupTnmoRodG1s5Luj56CB5a6e546w5a6M5pW055qE5YaF5a655bGV56S6XG4zLiBcXGBub2RlVHlwZVxcYCDmmK9cXGB2ZXJ0aWNhbExpc3RWaWV3XFxg44CBXFxgaG9yaXpvbnRhbExpc3RWaWV3XFxg44CBXFxgdmlld1BhZ2VyXFxg44CBXFxgdGFiUGFuZWxGYXRoZXJcXGDjgIFcXGByYWRpb0dyb3VwXFxg44CBXFxgY2hlY2tCb3hHcm91cFxcYOexu+Wei+eahOiKgueCuea3u+WKoOaVsOaNruiOt+WPluaWueW8j+WxnuaAp1xcYGZyb21BcGlPckNhY2hlRGF0YVxcYO+8jFxcYGZyb21BcGlPckNhY2hlRGF0YT1cInRydWVcIlxcYOeahOaDheWGteW/hemhu+a7oei2s+S7peS4i+adoeS7tu+8mlxuICAtIOivpee7hOS7tueahOaVsOaNruaYr+S7jue9kee7nOaIluiAheacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluWbnuadpeeahO+8jOavlOWmgu+8mueDremXqOWVhuWTgeWIl+ihqOe7hOS7tlxcYHZlcnRpY2FsTGlzdFZpZXdcXGDvvIzor6Xnu4Tku7bnmoTmlbDmja7mmK/ku47nvZHnu5zmiJbogIXmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5blm57mnaXnmoRcbiAgLSDlpoLmnpzmmK/kuIDkupvkuI3pnIDopoHlkI7nq68gQVBJIOiBlOe9keaIluacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluiOt+WPlueahOmdmeaAgeWGmeatu+eahOaVsOaNru+8jOmCo+S5iOWwseS4jemcgOimgSBcXGBmcm9tQXBpT3JDYWNoZURhdGFcXGAg5bGe5oCn5LqG77yM5q+U5aaC77ya5Liq5Lq65Lit5b+D5YiX6KGo6aG544CB6K6+572u5YiX6KGo6aG544CB6I+c5Y2V5YiX6KGo6aG577yM6L+Z5Lqb5qC55pys5LiN6ZyA6KaB57uP6L+H5ZCO5Y+wIEFQSSDogZTnvZHmiJbmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5bojrflj5bnmoTvvIzpgqPkuYjlsLHkuI3opoEgXFxgZnJvbUFwaU9yQ2FjaGVEYXRhXFxgIOWxnuaAp1xuNOOAgeajgOafpXRhYumAiemhueWNoeavj+S4gOS4qnRhYiBwYW5lbOaYr+WQpumDveacieWvueW6lOeahGh0bWzku6PnoIHlrp7njrDlrozmlbTnmoTlhoXlrrnlsZXnpLrvvIznu53lr7nnpoHmraLmlbfooY3lnLDkvb/nlKhcXGBQbGFjZWhvbGRlciBjb250ZW50L+W+heW8gOWPkS/lvIDlj5HkuK0v5Y2z5bCG5LiK57q/XFxg562J562J5p2l5pW36KGN5Zyw5bGV56S6VGFic+mAiemhueWNoee7hOS7tueahOavj+S4gOS4qlRhYiBQYW5lbO+8jOW/hemhu+avj+S4gOS4qlRhYiBQYW5lbOmDveacieWFt+S9k+ecn+WunueahOWGheWuueWxleekuuWunueOsOOAglxuNS4g5qOA5p+l5a+G56CB6L6T5YWl5qGG5Y+z5L6n55qE5a+G56CB5pi+56S65LiO6ZqQ6JeP5Zu+5qCH55qEXFxgbm9kZVR5cGVcXGDopoHmlLnkuLpcXGBzd2l0Y2hcXGDlubbmt7vliqDkuIDkuKogXFxgY2hlY2tlZENsYXNzXFxgIOWxnuaAp++8jOeEtuWQjue7mWh0bWzkuK3miYDmnIlcXGBub2RlVHlwZVxcYCDmmK8gXFxgc3dpdGNoXFxg44CBXFxgcmFkaW9cXGDjgIFcXGBjaGVja0JveFxcYOiKgueCueeahOWtqeWtkCBcXGBpXFxgIOagh+etvuiKgueCuea3u+WKoOS4gOS4qiBcXGBjaGVja2VkQ2xhc3NcXGAg5bGe5oCn77yM55So5LqO6KGo56S66YCJ5Lit54q25oCB55qEIGljb24g5Zu+5qCH5qC35byP57G75ZCN77yM5q+U5aaC77yaXG5cXGBcXGBcXGBodG1sXG48ZGl2IG5vZGVUeXBlPVwicmFkaW9cIiBpZD1cInh4eFJhZGlvXCIgbmFtZT1cInh4eOWNlemAiVwiPlxuICA8aVxuICAgIG5hbWU9XCLljZXpgIlJY29uXCJcbiAgICBub2RlVHlwZT1cImljb25cIlxuICAgIGlkPVwieHh4UmFkaW9JY29uXCJcbiAgICBjbGFzcz1cImZhIHh4eFwiXG4gICAgY2hlY2tlZENsYXNzPVwiZmEgeXl5XCJcbiAgPjwvaT5cbiAgPHNwYW4gbmFtZT1cInh4eOWNlemAieaWh+acrFwiIG5vZGVUeXBlPVwidGV4dFwiIGNsYXNzPVwieHh4LXRleHRcIj54eHg8L3NwYW4+XG48L2Rpdj5cbjxkaXZcbiAgaWQ9XCJhZ3JlZW1lbnRDaGVja2JveFwiXG4gIG5hbWU9XCLljY/orq7li77pgInmoYZcIlxuICBub2RlVHlwZT1cImNoZWNrQm94XCJcbiAgY2xhc3M9XCJhZ3JlZW1lbnQtY2hlY2tib3hcIlxuICBvbmNsaWNrPVwidG9nZ2xlQWdyZWVtZW50KClcIlxuPlxuICA8aVxuICAgIGlkPVwiYWdyZWVtZW50SWNvblwiXG4gICAgbmFtZT1cIuWNj+iuruWLvumAieWbvuagh1wiXG4gICAgbm9kZVR5cGU9XCJpY29uXCJcbiAgICBjbGFzcz1cImZhciBmYS1zcXVhcmVcIlxuICAgIGNoZWNrZWRDbGFzcz1cImZhcyBmYS1jaGVjay1zcXVhcmVcIlxuICA+PC9pPlxuPC9kaXY+XG5cXGBcXGBcXGBcblxuIyMjICoq5q2l6aqk6KeE5YiZIDcgLSDnu5npnIDopoHliIfmjaLpmpDol4/lkozmmL7npLrnmoToioLngrnmt7vliqBcXGBzaG93RGlzcGxheU5vbmV7e+iKgueCuWlkfX1cXGDnmoRqc+aWueazle+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDjgIFcXGBkaWFsb2dPdmVybGF5XFxg44CBXFxgdG9hc3RcXGDjgIFcXGBkcm9wRG93bk1lbnVcXGDjgIFcXGBzaWRlU2xpZGVQYW5lbFxcYOeahOiKgueCuea3u+WKoOaYvuekuuWSjOmakOiXj+eahOWIh+aNoiBqcyDmlrnms5U6XFxgc3dpdGNoVG97e+iKgueCuUlEfX1cXGAqKlxuXG4tIOe7memcgOimgeWIh+aNoumakOiXj+WSjOaYvuekuueahOiKgueCuea3u+WKoFxcYHNob3dEaXNwbGF5Tm9uZXt76IqC54K5aWR9fVxcYOeahGpz5pa55rOVXG4tIGpzIOaWueazleeahOWRveWQjeinhOWIme+8mlxcYHN3aXRjaFRvXFxgICsg6IqC54K5IGlk77yM5q+U5aaC77yaXFxgc3dpdGNoVG9BZ2VDb250YWluZXJcXGDjgIFcXGBzd2l0Y2hUb1Bob25lQ29udGFpbmVyXFxgXG4tIOWIh+aNouaYvuekuuWSjOmakOiXj+eahCBqcyDmlrnms5XkuI3lvpfluKbmnInku7vkvZXlj4LmlbDvvIzmr5TlpoLvvJpcXGBzd2l0Y2hUb0FnZUNvbnRhaW5lcigpXFxg44CBXFxgc3dpdGNoVG9QaG9uZUNvbnRhaW5lcigpXFxgXG4tIOekuuS+i++8mlxuXG5cXGBcXGBcXGBqYXZhc2NyaXB0XG5mdW5jdGlvbiBzd2l0Y2hUb0FnZUNvbnRhaW5lcigpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZ2VDb250YWluZXJcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwaG9uZUNvbnRhaW5lclwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG59XG5mdW5jdGlvbiBzaG93RGlzcGxheU5vbmVUaXRsZU1lbnUoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGl0bGVNZW51XCIpLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbn1cblxcYFxcYFxcYFxuXG4jIyMgKirmraXpqqTop4TliJkgOCAtIOaJp+ihjOWRveS7pFxcYG5wbSBydW4gbGludC1odG1sIGRvYy97Y3VycmVudE1vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5odG1sXFxg6L+b6KGM5Luj56CB5qOA5p+l77yM5b+F6aG75piv5omn6KGMXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDogIzkuI3mmK9cXGBucHggZXNsaW50IHh4eFxcYO+8jHtwYWdlTmFtZUVOfS5odG1sIOWwseaYr+S9oOWImuWImue8luWGmeWujOeahCBVSSDlvIDlj5EgaHRtbCDpobXpnaLvvIzmr5TlpoI6bG9naW5QYWdlLmh0bWzvvIzlpoLmnpzmiafooYzlkb3ku6Tmo4DmtYvlj5HnjrDkuobplJnor6/vvIzlv4XpobvmjInnhafmj5DnpLrmiormiYDmnInplJnor6/kv67lpI3lrozmr5XmiY3ooYzjgIIqKlxuXG4jIyMgKirmraXpqqTop4TliJkgOe+8muW8uuWItuabtOaWsCdkb2MvVUnorr7orqHov5vluqYuanNvbifmlofku7bnmoRcXGBjdXJyZW50VmVyc2lvblxcYOWSjFxcYGRlc2lnblN0YXR1c1xcYO+8jOS7peWPiuWmguaenOW9k+WJjemhtemdouaYr+mmlumhteS4u+S9k+mhtemCo+WwseabtOaWsFxcYC5ieXRlZnVuL3Byb2plY3QuanNvblxcYOaWh+S7tueahOmmlumhteS4u+S9k+mhteeahGpzb27lr7nosaHnmoRcXGBzdWJQYWdlTGlzdFxcYOWtl+auteOAgioqXG5cbi0g56ysIDEg54K577ya5YWI6K+75Y+WJ2RvYy9VSeiuvuiuoei/m+W6pi5qc29uJ+aWh+S7tuW9k+WJjemhtemdoueahOeJiOacrOWPt+eahOaVsOWAvCBjdXJyZW50VmVyc2lvbu+8jOeEtuWQjuabtOaWsOW9k+WJjemhtemdoueahOeJiOacrOWPtyB2ZXJzaW9uIOWxnuaAp+S4uu+8mmN1cnJlbnRWZXJzaW9uKzFcbi0g56ysIDIg54K577yaJ2RvYy9VSeiuvuiuoei/m+W6pi5qc29uJ+aWh+S7tumHjOmdouagh+iusOW9k+WJjemhtemdoueahOi/m+W6pueKtuaAgSBkZXNpZ25TdGF0dXMg5bGe5oCn5Li6IGNvbXBsZXRlZFxuLSDnrKwgMyDngrnvvJrlpoLmnpzlvZPliY3pobXpnaLmmK/pppbpobXkuLvkvZPpobXvvIzpgqPkuYjlv4XpobvlnKhcXGAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cXGDmlofku7bnmoTpppbpobXkuLvkvZPpobXnmoRqc29u5a+56LGh55qEXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXmjInpobrluo/mt7vliqDlvZPliY3pobXpnaLnmoTmiYDmnInlrZDpobXpnaLnmoRlbk5hbWXvvIzlrZDpobXpnaLnmoTpobrluo/kvaDlv4XpobvpmIXor7tcXGAuYnl0ZWZ1bi94eHjlip/og73mqKHlnZcubWRcXGAg5paH5Lu26YeM6Z2i55qEXFxg6aaW6aG15Li75L2T6aG1XFxg55qEXFxgMS4x44CB6aG16Z2i57uE5oiQ6YOo5YiG77yI5LuO5LiK5Yiw5LiL77yJXFxg5p2l56Gu5a6a77yM5aaC5p6c5bey5a2Y5ZyoXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXvvIzpgqPlsLHov5vooYzlrZDpobXpnaLpobrluo/lkozplJnmvI/nmoTmo4Dmn6Xlkozkv67mraPvvIzmoLzlvI/kvovlrZDvvJpcblxcYFxcYFxcYGpzb25cbntcbiAgXCJlbk5hbWVcIjogXCJob21lTWFpblBhZ2VcIixcbiAgXCJzdWJQYWdlTGlzdFwiOiBbXG4gICAgXCJ4eHhQYWdlXCIsXG4gICAgXCJ5eXlQYWdlXCIsXG4gICAgXCJ6enpQYWdlXCIsXG4gICAgXCJhYWFQYWdlXCJcbiAgXVxufVxuXFxgXFxgXFxgXG5cbiMjIyAqKuatpemqpOinhOWImSAxMO+8muiwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+S4uuS4i+S4gOS4qumhtemdouWIm+W7uuS7peS4iyAxMCDkuKrku7vliqHliJfooajlubbpqazkuIrmiafooYzvvIznoa7kv53mtYHnqIvmsLjnu63vvIzlpoLmnpzov5jmsqHmnInlrozmiJDor6Xlip/og73mqKHlnZfnmoTmiYDmnInpobXpnaLorr7orqHvvIzkuI3lvpflgZzmraLnu5PmnZ/ku7vliqHvvIzlpoLmnpzkvaDnm7TmjqXnvJblhpnkuIvkuIDkuKpodG1s6aG16Z2i5Luj56CB77yM6ams5LiK5oql6ZSZ77yM6KeG5Li65Lil6YeN6L+d6KeE44CC5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDEwIOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAguWmguaenOS9oOWcqOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdoui/mOayoeacieiuvuiuoeWujOavleeahOaDheWGteS4i+WBnOatouS6huS7u+WKoe+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTFcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYO+8jOW+l+WHuuivpeWKn+iDveaooeWdl+eOsOWcqOmcgOimgeiuvuiuoeWTquS4gOS4qumhtemdolxcYHBhZ2VOYW1lRU5cXGDvvIzlpoLmnpzor6Xlip/og73mqKHlnZfpg73orr7orqHlrozmiJDkuobvvIzpgqPlsLHlgZzmraIgQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG4yLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkyXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxg5Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kXFxgIOaWh+S7tu+8jOeQhuino+W5tui+k+WHuuS4iemDqOWIhueahOWGheWuueOAglxuMy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZM1xcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYFVJ6K6+6K6h6KeE6IyDLm1kXFxg5paH5Lu277yM5a6M5YWo55CG6Kej5o6M5o+h5pW05LiqQVBQ55qEVUnorr7orqHop4TojIPvvIzljIXmi6zpopzoibLjgIHmoIfpopjmoI/jgIHljZXpgInjgIHlpJrpgInjgIJcbjQuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTRcXGDmiafooYzku7vliqHvvIzlv4XpobvnkIbop6PlubbpgbXlrojku6XkuIvnpoHmraLnmoTlpJrkuKpVSeiuvuiuoeS7o+eggeWGmeazlVxuNS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNVxcYOaJp+ihjOS7u+WKoe+8jOS4uuWIt+aWsOiusOW/hue8k+WtmO+8jOS9oOW/hemhu+mHjeaWsOiwg+eUqE1DUOW3peWFt1xcYG9wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHRcXGDkuKXmoLzmjInnhafop4TliJnopoHmsYLvvIznhLblkI7kuKXmoLzpgbXlrohcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg6L+U5Zue55qE6KeE5YiZ6KaB5rGC5o+Q56S66K+N5a6M5oiQ5LiA5LiqXFxgcGFnZU5hbWVFTlxcYGh0bWzpobXpnaLnmoQgVUkg6K6+6K6h77yM5b+F6aG75rOo5oSP5LiA5qyh5Y+q6K6+6K6h5LiA5Liq6aG16Z2i77yI56aB5q2iIEpTIOaLvOaOpSBodG1sIOWtl+espuS4su+8jOemgeatouS9v+eUqCBqcyDmnaXlo7DmmI7ku7vkvZXpobXpnaLmmL7npLrmiYDpnIDnmoTmlbDmja7vvIzmiYDmnInmlbDmja7pg73lv4XpobvlnKggaHRtbCDku6PnoIHkuK3nm7TmjqXlhpnmrbvvvInjgIJcbjYuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTZcXGDmiafooYzku7vliqHvvIzmiafooYw25LiqVUnmoLflvI/lkozlsZ7mgKfmraPnoa7mgKflkozlrozmlbTmgKfnmoTmo4Dmn6XjgIJcbjcuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTdcXGDmiafooYzku7vliqHvvIznu5npnIDopoHliIfmjaLpmpDol4/lkozmmL7npLrnmoToioLngrnmt7vliqBcXGBzaG93RGlzcGxheU5vbmV7e+iKgueCuWlkfX1cXGDnmoRqc+aWueazle+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDnmoToioLngrnmt7vliqDmmL7npLrlkozpmpDol4/nmoTliIfmjaIganMg5pa55rOVOlxcYHN3aXRjaFRve3voioLngrlJRH19XFxg44CCXG44LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk4XFxg5omn6KGM5Lu75Yqh77yM5omn6KGM5ZG95LukXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDov5vooYzku6PnoIHmo4Dmn6Xlkozkv67lpI3pl67popjjgIJcbjkuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTlcXGDmiafooYzku7vliqHvvIzlvLrliLbmm7TmlrAnZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb24n5paH5Lu255qEXFxgY3VycmVudFZlcnNpb25cXGDlkoxcXGBkZXNpZ25TdGF0dXNcXGDvvIzku6Xlj4rlpoLmnpzlvZPliY3pobXpnaLmmK/pppbpobXkuLvkvZPpobXpgqPlsLHmm7TmlrBcXGAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cXGDmlofku7bnmoTpppbpobXkuLvkvZPpobXnmoRqc29u5a+56LGh55qEXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXjgIJcbjEwLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMFxcYOaJp+ihjOS7u+WKoe+8jOWIpOaWreivpeWKn+iDveaooeWdl+aYr+WQpuWFqOmDqOmhtemdouWujOaIkOS6hlVJ6K6+6K6h77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ77yM6YKj5bCx5oyJ54Wn6KeE5YiZ6K6h5YiS5LiL5LiA5Liq6aG16Z2i55qE5byA5Y+R77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5omA5pyJ6aG16Z2i6YO95a6M5oiQ5LqGVUnorr7orqHvvIzpgqPlsLHnu5PmnZ8gQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG5cbiMjIPCfmqsg57ud5a+556aB5q2iXG5cbi0g4p2MIOivtFwi5Lu75Yqh5a6M5oiQXCLogIzkuI3mo4Dmn6Xlhbbku5bpobXpnaJcbi0g4p2MIOi3s+i/h+i/m+W6puaWh+S7tuajgOafpVxuLSDinYwg6K+i6Zeu55So5oi35piv5ZCm57un57utXG4tIOKdjCDorqTkuLrlrozmiJDkuIDkuKrpobXpnaLlsLHmmK/lrozmiJDmlbTkuKrku7vliqFcblxuIyMg8J+OryDmiJDlip/moIflh4Zcblxu5Y+q5pyJ5b2T5YmN5qih5Z2X5omA5pyJ6aG16Z2iZGVzaWduU3RhdHVz54q25oCB6YO95pivXCJjb21wbGV0ZWRcIuaXtu+8jOaJjeiDvee7k+adn+S8muivneOAglxuXG4jIyAqKui/neWPjeatpOinhOWImSA9IOS7u+WKoeWksei0pSoqXG5gIl19
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ25HdWlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91aURlc2lnbkd1aWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTZLMUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB1aURlc2lnbkd1aWRlUHJvbXB0VGVtcGxhdGUgPSBgXG4jIOS9oOaYryBVSSDorr7orqHluIjkuJPlrrbjgIHku6PnoIHlvIDlj5HkuJPlrrbvvIzkvaDlv4XpobvmjInnhadcXGDmiafooYzmraXpqqTmnaVcXGDmiafooYzku7vliqHjgIJcblxuIyMgKirmiafooYzorr7orqHvvJrmr4/kuIDkuKrpobXpnaLorr7orqHpg73lv4XpobvosIPnlKggdG9kb193cml0ZSDlt6XlhbfliJvlu7rku6XkuIsgMTEg5Liq5Lu75Yqh5YiX6KGo77yM5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDExIOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTFcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYO+8jOW+l+WHuuivpeWKn+iDveaooeWdl+eOsOWcqOmcgOimgeiuvuiuoeWTquS4gOS4qumhtemdolxcYHBhZ2VOYW1lRU5cXGDvvIzlpoLmnpzor6Xlip/og73mqKHlnZfpg73orr7orqHlrozmiJDkuobvvIzpgqPlsLHlgZzmraIgQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG4yLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkyXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxgLmJ5dGVmdW4veHh45Yqf6IO95qih5Z2XLm1kXFxgIOaWh+S7tu+8jOeQhuino+W5tui+k+WHuuS4iemDqOWIhueahOWGheWuueOAglxuMy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZM1xcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYC5ieXRlZnVuL1VJ6K6+6K6h6KeE6IyDLm1kXFxgVUnop4TojIPmlofku7blkoxcXGAuYnl0ZWZ1bi91aS1kZXNpZ24tc3BlYy1kZW1vLmh0bWxcXGBVSeinhOiMg+a8lOekuuaWh+S7tu+8jOWujOWFqOeQhuino+aOjOaPoeaVtOS4qkFQUOeahFVJ6K6+6K6h6KeE6IyD77yM5YyF5ous5omA5pyJ6aKc6Imy44CB5ZCE56eN5paH5a2X44CB5ZCE56eN5oyJ6ZKu44CB5ZCE56eN6L6T5YWl5qGG44CB5qCH6aKY5qCP44CB5Y2h54mH44CB5Y2V6YCJ44CB5aSa6YCJ562J44CCXG40LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk0XFxg5omn6KGM5Lu75Yqh77yM5b+F6aG755CG6Kej5bm26YG15a6I5Lul5LiL56aB5q2i55qE5aSa5LiqVUnorr7orqHku6PnoIHlhpnms5VcbjUuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTVcXGDmiafooYzku7vliqHvvIzkuLrliLfmlrDorrDlv4bnvJPlrZjvvIzkvaDlv4Xpobvph43mlrDosIPnlKhNQ1Dlt6XlhbdcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg5Lil5qC85oyJ54Wn6KeE5YiZ6KaB5rGC77yM54S25ZCO5Lil5qC86YG15a6IXFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOi/lOWbnueahOinhOWImeimgeaxguaPkOekuuivjeWujOaIkOS4gOS4qlxcYHBhZ2VOYW1lRU5cXGBodG1s6aG16Z2i55qEIFVJIOiuvuiuoe+8jOW/hemhu+azqOaEj+S4gOasoeWPquiuvuiuoeS4gOS4qumhtemdou+8iOemgeatoiBKUyDmi7zmjqUgaHRtbCDlrZfnrKbkuLLvvIznpoHmraLkvb/nlKgganMg5p2l5aOw5piO5Lu75L2V6aG16Z2i5pi+56S65omA6ZyA55qE5pWw5o2u77yM5omA5pyJ5pWw5o2u6YO95b+F6aG75ZyoIGh0bWwg5Luj56CB5Lit55u05o6l5YaZ5q2777yJ44CCXG42LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk2XFxg5omn6KGM5Lu75Yqh77yM5oyH5a6aXFxgbm9kZVR5cGVcXGDnmoToioLngrnliKTmlq3mmK/lkKbpnIDopoHku47lkI7nq69hcGnmjqXlj6Pojrflj5bmlbDmja7vvIzlpoLmnpzmmK/pgqPlsLHlv4Xpobvmt7vliqDlsZ7mgKdcXGBmcm9tQXBpT3JDYWNoZURhdGE9XCJ0cnVlXCJcXGBcbjcuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTdcXGDmiafooYzku7vliqHvvIzmiafooYw15LiqVUnmoLflvI/lkozlsZ7mgKfmraPnoa7mgKflkozlrozmlbTmgKfnmoTmo4Dmn6XjgIJcbjguIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImThcXGDmiafooYzku7vliqHvvIznu5npnIDopoHliIfmjaLpmpDol4/lkozmmL7npLrnmoToioLngrnmt7vliqBcXGBzaG93RGlzcGxheU5vbmV7e+iKgueCuWlkfX1cXGDnmoRqc+aWueazle+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDnmoToioLngrnmt7vliqDmmL7npLrlkozpmpDol4/nmoTliIfmjaIganMg5pa55rOVOlxcYHN3aXRjaFRve3voioLngrlJRH19XFxg44CCXG45LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk5XFxg5omn6KGM5Lu75Yqh77yM5omn6KGM5ZG95LukXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDov5vooYzku6PnoIHmo4Dmn6Xlkozkv67lpI3pl67popjjgIJcbjEwLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMFxcYOaJp+ihjOS7u+WKoe+8jOW8uuWItuabtOaWsCdkb2MvVUnorr7orqHov5vluqYuanNvbifmlofku7bnmoRcXGBjdXJyZW50VmVyc2lvblxcYOWSjFxcYGRlc2lnblN0YXR1c1xcYO+8jOS7peWPiuWmguaenOW9k+WJjemhtemdouaYr+mmlumhteS4u+S9k+mhtemCo+WwseabtOaWsFxcYC5ieXRlZnVuL3Byb2plY3QuanNvblxcYOaWh+S7tueahOmmlumhteS4u+S9k+mhteeahGpzb27lr7nosaHnmoRcXGBzdWJQYWdlTGlzdFxcYOWtl+auteOAglxuMTEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTExXFxg5omn6KGM5Lu75Yqh77yM5Yik5pat6K+l5Yqf6IO95qih5Z2X5piv5ZCm5YWo6YOo6aG16Z2i5a6M5oiQ5LqGVUnorr7orqHvvIzlpoLmnpzov5jmsqHmnInlrozmiJDvvIzpgqPlsLHmjInnhafop4TliJnorqHliJLkuIvkuIDkuKrpobXpnaLnmoTlvIDlj5HvvIzlpoLmnpzor6Xlip/og73mqKHlnZfmiYDmnInpobXpnaLpg73lrozmiJDkuoZVSeiuvuiuoe+8jOmCo+Wwsee7k+adnyBBSSDkvJror53vvIzlgZzmraLku7vliqFcblxuIyMjICoq5q2l6aqk6KeE5YiZIDHvvJrpmIXor7tcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYOafpeeci+ivpeWKn+iDveaooeWdl+mhtemdouiuvuiuoei/m+W6puaDheWGtVxcYGRlc2lnblN0YXR1c1xcYOWtl+aute+8jOS+neaNruivpeWKn+iDveaooeWdl+WQhOS4qumhtemdoueahFxcYGRlc2lnblN0YXR1c1xcYOWujOaIkOaDheWGteaJp+ihjOS7peS4i+aTjeS9nO+8mioqXG5cbi0g5aaC5p6c6K+l5Yqf6IO95qih5Z2X5omA5pyJ6aG16Z2i6YO96K6+6K6h5a6M5oiQ5LqG77yM6YKj5bCx5YGc5q2iIEFJIOS8muivne+8jOWBnOatouS7u+WKoVxuLSDlpoLmnpzor6Xlip/og73mqKHlnZfov5jmnInmnKrorr7orqHlrozmiJDnmoTpobXpnaLvvIzpgqPlsLHojrflj5bliLDor6Xlip/og73mqKHlnZfnmoTnrKzkuIDkuKrmnKrorr7orqHlrozmiJDnmoTpobXpnaJcXGBwYWdlTmFtZUVOXFxg77yM57un57ut5omn6KGM5LiL5LiA5q2lXG5cbiMjIyAqKuatpemqpOinhOWImSAy77ya5qC55o2u55So5oi36ZyA5rGC77yM5bm25L2/55SoXFxgcmVhZF9maWxlXFxg5bel5YW36K+75Y+W6K+l6aG16Z2i5omA5Zyo55qE5Yqf6IO95qih5Z2X6K6+6K6hXFxgLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kXFxg5paH5Lu277yM5bm25LuU57uG5YiG5p6Q6K+l5paH5Lu255qEXFxgMS4x44CB6aG16Z2i57uE5oiQ6YOo5YiGXFxg44CBXFxgMS4y44CB5omA6ZyA55qE5a+56K+d5qGG44CBdG9hc3TjgIHkuIvmi4noj5zljZXjgIHkvqfmu5HpnaLmnb9cXGDvvIzms6jmhI/ov5nkuKrpobXpnaLnu4TmiJDpg6jliIbmmK/ku47kuIrliLDkuIvnmoTvvIzlm6DmraTlv4XpobvopoHmjInnhafov5nkuKrpobrluo/mnaXorr7orqHlrp7njrDpobXpnaLvvIzlubblv4XpobvlnKggdGhvdWdodCDlrZfmrrXovpPlh7rvvJrku6XkuIrkuInpg6jliIbnmoTlhoXlrrnjgIIqKlxuXG4jIyMgKirmraXpqqTop4TliJkgM++8muS9v+eUqFxcYHJlYWRfZmlsZVxcYOW3peWFt+ivu+WPllxcYC5ieXRlZnVuL1VJ6K6+6K6h6KeE6IyDLm1kXFxg5paH5Lu277yM5a6M5YWo55CG6Kej5o6M5o+h5pW05LiqQVBQ55qEVUnorr7orqHop4TojIPvvIzljIXmi6zmiYDmnInpopzoibLjgIHlkITnp43mloflrZfjgIHlkITnp43mjInpkq7jgIHlkITnp43ovpPlhaXmoYbjgIHmoIfpopjmoI/jgIHljaHniYfjgIHljZXpgInjgIHlpJrpgInnrYnjgIIqKlxuXG4jIyMgKirmraXpqqTop4TliJkgNO+8muW/hemhu+eQhuino+W5tumBteWuiOS7peS4i+emgeatoueahOWkmuS4qlVJ6K6+6K6h5Luj56CB5YaZ5rOVKipcbi0g56aB5q2i5L2/55So5Lu75L2V5YmN56uv5qGG5p6277yM5Y+q5L2/55SoIGh0bWwr57G76YCJ5oup5Zmo5qC35byPK2pzIOadpeWunueOsOOAglxuLSDnpoHmraLkvb/nlKhqc+S7o+eggeadpeaLvOaOpWh0bWzlrZfnrKbkuLLvvIzlv4XpobvlnKhib2R55qCH562+6YeM6Z2i55u05o6l5YaZaHRtbOS7o+eggeOAglxuLSDnpoHmraLkvb/nlKhqc+S7o+eggeadpeWjsOaYjuS7u+S9lemhtemdouaYvuekuuaJgOmcgOeahOaVsOaNru+8jOaJgOacieaVsOaNrumDveW/hemhu+WcqGh0bWzku6PnoIHkuK3nm7TmjqXlhpnmrbvjgIJcbi0g56aB5q2i5L2/55So5paH5pys5riQ5Y+Y6Imy77yM5b+F6aG75L2/55So57qv6Imy5paH5pys77yM5Lmf5bCx5piv56aB5q2i5L2/55SoXFxgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3JcXGDlsZ7mgKfjgIJcbi0g56aB5q2i57uZ6aG16Z2i5re75YqgXFxg5omL5py66aG26YOo54q25oCB5qCPXFxg44CBXFxg5omL5py65bqV6YOo5oyH56S65Zmo5qCPXFxg5Lik5Liq6Z2e6aG16Z2i5YaF5a6555qE5YWD57Sg6IqC54K577yM6L+Z5piv5omL5py656Gs5Lu26Ieq5bim55qE5YWD57Sg77yM5LiN6IO95Zyo6aG16Z2i5Lit5re75Yqg44CCXG4tIOemgeatouS9v+eUqFxcYDpiZWZvcmVcXGDjgIFcXGA6YWZ0ZXJcXGDkvKrlhYPntKDvvIzlv4Xpobvkvb/nlKjlhbbku5bmoIfnrb7mnaXlrp7njrDjgIJcbi0g56aB5q2i5L2/55SoXFxgYmFja2Ryb3AtZmlsdGVyXFxg562J546755KD5pWI5p6c77yM5b+F6aG75Yig6Zmk5o6J5omA5pyJ5L2/55So5Yiw546755KD5pWI5p6c55qE5Luj56CB44CCXG4tIOemgeatouS9v+eUqOWkmuS4qnDmoIfnrb7miJblpJrkuKrlhbbku5bmoIfnrb7mnaXmmL7npLrkuIDkuKrku47nvZHnu5zmiJblhbbku5blnLDmlrnmi4nlj5blm57mnaXnmoTplb/mlofmnKzvvIzlv4Xpobvlj6rog73kvb/nlKjkuIDkuKrmoIfnrb7mnaXmmL7npLrvvIzmr5TlpoLvvJpkaXbjgIFzcGFu562J77yM5Zug5Li6572R57uc5ouJ5Y+W5Zue5p2l55qE6ZW/5paH5pys5piv5LiA5Liq5paH5pys77yM5peg5rOV5L2/55So5aSa5Liq5qCH562+5p2l5pi+56S65LiA5Liq5paH5pys77yM5b+F6aG75Y+q6IO95L2/55So5LiA5Liq5qCH562+5p2l5pi+56S644CCXG4tIGxvYWRpbmfoioLngrnnmoTlrp7njrDnpoHmraLkvb/nlKhkaXbmoIfnrb7kuI7ovrnmoYblsZ7mgKflrp7njrDvvIzlv4Xpobvkvb/nlKjlm77moIdpY29u55qEaeagh+etvuadpeWunueOsGxvYWRpbmfnmoToioLngrlcbi0g56aB5q2i5Li6aHRtbOagh+etvuiKgueCuea3u+WKoOWKqOeUu+aIlui/h+a4oeaViOaenO+8jOmhtemdouiuvuiuoeS4jemcgOimgeS7u+S9leWKqOeUu+WSjOi/h+a4oeaViOaenO+8jOavlOWmguemgeatou+8mkBrZXlmcmFtZXPjgIF0cmFuc2l0aW9u44CBYW5pbWF0aW9uIOetieOAglxuLSDmjInpkq7jgIHljaHniYfjgIFpdGVt6aG5562J5YWD57Sg5b+F6aG76KaB5pyJaG92ZXLkuI7ngrnlh7vlj43ppojvvIzngrnlh7vlj43ppojlv4Xpobvkvb/nlKjmtYXoibLnmoTog4zmma/oibJiYWNrZ3JvdW5k5p2l5Y+N6aaI5bCx6KGM77yM5Lil56aB5L2/55SodHJhbnNmb3Jt5pWI5p6cXG4gICAgLSDinYwg6ZSZ6K+v55qE55So5rOV77yaIFxuICAgIFxcYFxcYFxcYCBjc3NcbiAgICAuaG90LXNhbGVzLWl0ZW06aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLi4ucHgpO1xuICAgIH1cbiAgICBcXGBcXGBcXGBcbiAgICAtIOKchSDmraPnoa7nmoTnlKjms5XvvJpcbiAgICBcXGBcXGBcXGAgY3NzXG4gICAgLmhvdC1zYWxlcy1pdGVtOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogLi4uO1xuICAgIH1cbiAgICBcXGBcXGBcXGBcbi0g56aB5q2i5L2/55SoZGl25qCH562+5p2l5a6e546waW1hZ2Xlm77niYfvvIzlv4XpobvopoHkvb/nlKhpbWfmoIfnrb7mnaXlrp7njrDlm77niYfoioLngrnvvIxpbWfmoIfnrb7nmoRzcmPlsZ7mgKflv4Xpobvorr7nva7kuLrvvJpcXGBodHRwczovL29zcy5ieXRlZnVuZ28uY29tL2YxL3Nob3dJbWcxLmpwZ1xcYO+8jOWFtuS4remHjOmdoueahFxcYHNob3dJbWcxXFxg5Y+v5Lul5pS55Li6MX4zMOeahOS7u+aEj+S4gOS4quaVsOWtl++8jOavlOWmgu+8mlxcYHNob3dJbWc1XFxg44CCXG4gIC0g4p2M6ZSZ6K+v55qE5YaZ5rOV77yaXG4gICAgXFxgXFxgXFxgIGh0bWxcbiAgICA8ZGl2IGNsYXNzPVwiYmVzdHNlbGxlci1jb3ZlclwiIGlkPVwiYmVzdHNlbGxlckNvdmVyMVwiIG5hbWU9XCLnlYXplIDkuabnsY3lsIHpnaIxXCIgbm9kZVR5cGU9XCJpbWFnZVwiPlxuICAgIDwvZGl2PlxuICAgIFxcYFxcYFxcYFxuICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgaHRtbFxuICAgIDxpbWcgY2xhc3M9XCJiZXN0c2VsbGVyLWNvdmVyXCIgaWQ9XCJiZXN0c2VsbGVyQ292ZXIxXCIgbmFtZT1cIueVhemUgOS5puexjeWwgemdojFcIiBub2RlVHlwZT1cImltYWdlXCIgc3JjPVwiaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nNy5qcGdcIj4gIFxuICAgIFxcYFxcYFxcYFxuLSDnpoHmraIgaWQg5bGe5oCn5LiN6KeE6IyD77yMaWQg5b+F6aG75ZSv5LiA77yM5LiU5Y+q6IO955Sx5a2X5q+N5ZKM5pWw5a2X57uE5oiQ77yI5LiN6IO95Lul5pWw5a2X5byA5aS077yJ77yM5bu66K6u5L2/55So6am85bOw5ZG95ZCN44CCXG4tIOemgeatouS9v+eUqOihjOWGhSBzdHlsZSDlsZ7mgKfvvIzlv4XpobvpgJrov4cgY2xhc3Mg5ZKMIENTUyDmlofku7bmnaXlrprkuYnmoLflvI/jgIJcbi0g56aB5q2iIHJhZGlhbC1ncmFkaWVudCDmoLflvI/kuI3op4TojIPvvIzlvoTlkJHmuJDlj5jlv4XpobvmmL7lvI/lo7DmmI7kuLogY2lyY2xl77yM5LiU5LiA5LiqIERPTSDoioLngrnlj6rog73ljIXlkKvkuIDkuKogcmFkaWFsLWdyYWRpZW5044CCXG5cbiMjIyAqKuatpemqpOinhOWImSA177ya5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOiOt+WPluWIsFVJ6K6+6K6h55qE6KeE5YiZ6KaB5rGC5o+Q56S66K+N77yM54S25ZCO5Lil5qC86YG15a6IXFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOi/lOWbnueahOinhOWImeimgeaxguaPkOekuuivjeWujOaIkFxcYGRvYy97Y3VycmVudE1vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5odG1sXFxg6aG16Z2i55qEIFVJIOiuvuiuoSoqOlxuLSDlv4XpobvnkIbop6Pmjozmj6Hop4TliJnopoHmsYLmj5DnpLror43nmoRcXGDkuIDjgIHmoLflvI/op4TliJlcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5LqM44CB5b+F6aG757uZ5q+P5LiA5Liq6IqC54K55re75YqgaWTjgIFuYW1l44CBbm9kZVR5cGXlsZ7mgKdcXGDjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5LiJ44CB6L2u5pKt5LiOVGFic+e7hOS7tueahOinhOWImVxcYOeahOaJgOacieWGheWuue+8jOW/hemhu+S4peagvOmBteWuiOOAglxuLSDlv4XpobvnkIbop6Pmjozmj6Hop4TliJnopoHmsYLmj5DnpLror43nmoRcXGDlm5vjgIHliJfooajnu4Tku7bop4TliJlcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojvvJrlpoLmnpzor6XliJfooajnmoTmlbDmja7mmK/ku47nvZHnu5zmi4nlj5bnmoTvvIzpgqPkuYjlv4Xpobvkvb/nlKjlpJrnirbmgIHlrrnlmahcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxg5bCGbG9hZGluZ+OAgeiBlOe9keWksei0peOAgeayoeacieaVsOaNruOAgeacieaVsOaNrueahOWbm+S4queKtuaAgeS9v+eUqFxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYOWMhei1t+adpeW5tuWxleekuuWHuuadpe+8jOWFtuS4reacieaVsOaNrueKtuaAgeeahFxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYOWMheWQq+eahOWwseaYr+ivpeWIl+ihqOe7hOS7tuOAguOAglxuLSDlv4XpobvnkIbop6Pmjozmj6Hop4TliJnopoHmsYLmj5DnpLror43nmoRcXGDkupTjgIHlm77moIfkuI7lm77niYfnmoTop4TliJlcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5YWt44CB6aaW6aG15Li75L2T6aG15LiO5a2Q6aG16Z2i55qE6KeE5YiZXFxg55qE5omA5pyJ5YaF5a6577yM5b+F6aG75Lil5qC86YG15a6I44CCXG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOS4g+OAgeWmguaenOeUqOaIt+ayoeacieaYjuehruivtOaYjuivpemhtemdouiuvuiuoemcgOaxgu+8jOmCo+WwseaMieeFp+mhtemdoum7mOiupOinhOWImeiuvuiuoVxcYOeahOaJgOacieWGheWuue+8jOW/hemhu+S4peagvOmBteWuiOOAglxuXG4jIyMgKirmraXpqqTop4TliJkgNu+8muaMh+WumlxcYG5vZGVUeXBlXFxg55qE6IqC54K55Yik5pat5piv5ZCm6ZyA6KaB5LuO5ZCO56uvYXBp5o6l5Y+j6I635Y+W5pWw5o2u77yM5aaC5p6c5piv6YKj5bCx5b+F6aG75re75Yqg5bGe5oCnXFxgZnJvbUFwaU9yQ2FjaGVEYXRhPVwidHJ1ZVwiXFxgKipcbi0g5aaC5p6cXFxgbm9kZVR5cGVcXGAg5pivXFxgdmVydGljYWxMaXN0Vmlld1xcYOOAgVxcYGhvcml6b250YWxMaXN0Vmlld1xcYOOAgVxcYHZpZXdQYWdlclxcYOOAgVxcYHRhYlBhbmVsRmF0aGVyXFxg44CBXFxgcmFkaW9Hcm91cFxcYOOAgVxcYGNoZWNrQm94R3JvdXBcXGDjgIFcXGBncmlkQ29udGFpbmVyXFxg44CBXFxgaW5saW5lQmxvY2tBbmRXcmFwXFxg57G75Z6L55qE6IqC54K55re75Yqg5pWw5o2u6I635Y+W5pa55byP5bGe5oCnXFxgZnJvbUFwaU9yQ2FjaGVEYXRhXFxg77yMXFxgZnJvbUFwaU9yQ2FjaGVEYXRhPVwidHJ1ZVwiXFxg55qE5oOF5Ya15b+F6aG75ruh6Laz5Lul5LiL5p2h5Lu277yaXG4gIC0g6K+l57uE5Lu255qE5pWw5o2u5piv5LuO572R57uc5oiW6ICF5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W5Zue5p2l55qE77yM5q+U5aaC77ya54Ot6Zeo5ZWG5ZOB5YiX6KGo57uE5Lu2XFxgdmVydGljYWxMaXN0Vmlld1xcYO+8jOivpee7hOS7tueahOaVsOaNruaYr+S7jue9kee7nOaIluiAheacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluWbnuadpeeahFxuICAtIOWmguaenOaYr+S4gOS6m+S4jemcgOimgeWQjuerryBBUEkg6IGU572R5oiW5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W6I635Y+W55qE6Z2Z5oCB5YaZ5q2755qE5pWw5o2u77yM6YKj5LmI5bCx5LiN6ZyA6KaBIFxcYGZyb21BcGlPckNhY2hlRGF0YVxcYCDlsZ7mgKfkuobvvIzmr5TlpoLvvJrkuKrkurrkuK3lv4PliJfooajpobnjgIHorr7nva7liJfooajpobnjgIHoj5zljZXliJfooajpobnvvIzov5nkupvmoLnmnKzkuI3pnIDopoHnu4/ov4flkI7lj7AgQVBJIOiBlOe9keaIluacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluiOt+WPlueahO+8jOmCo+S5iOWwseS4jeimgSBcXGBmcm9tQXBpT3JDYWNoZURhdGFcXGAg5bGe5oCnXG5cbiMjIyAqKuatpemqpOinhOWImSA377ya57uZ5Lul5LiLNOeCueeahFVJ5qC35byP5ZKM5bGe5oCn5q2j56Gu5oCn5ZKM5a6M5pW05oCn5qOA5p+lKipcbjEuIOajgOafpWh0bWzpobXpnaLmiYDmnInmlofmnKzmjInpkq7jgIHlm77moIfmjInpkq7jgIHljaHniYfjgIFpdGVt6aG544CB5Y+v5Lul54K55Ye755qE5YWD57Sg562J562J5piv5ZCm6YO95pyJaG92ZXLnmoTog4zmma/oibLlj43ppojmlYjmnpzvvIzlpoLmnpzmsqHmnInpgqPlsLHmt7vliqBob3ZlcueahOiDjOaZr+iJsuWPjemmiOaViOaenOOAglxuMi4g5qOA5p+ldGFi6YCJ6aG55Y2h5q+P5LiA5LiqdGFiIHBhbmVs5piv5ZCm6YO95pyJ5a+55bqU55qEaHRtbOS7o+eggeWunueOsOWujOaVtOeahOWGheWuueWxleekulxuNOOAgeajgOafpXRhYumAiemhueWNoeavj+S4gOS4qnRhYiBwYW5lbOaYr+WQpumDveacieWvueW6lOeahGh0bWzku6PnoIHlrp7njrDlrozmlbTnmoTlhoXlrrnlsZXnpLrvvIznu53lr7nnpoHmraLmlbfooY3lnLDkvb/nlKhcXGBQbGFjZWhvbGRlciBjb250ZW50L+W+heW8gOWPkS/lvIDlj5HkuK0v5Y2z5bCG5LiK57q/XFxg562J562J5p2l5pW36KGN5Zyw5bGV56S6VGFic+mAiemhueWNoee7hOS7tueahOavj+S4gOS4qlRhYiBQYW5lbO+8jOW/hemhu+avj+S4gOS4qlRhYiBQYW5lbOmDveacieWFt+S9k+ecn+WunueahOWGheWuueWxleekuuWunueOsOOAglxuNS4g5qOA5p+l5a+G56CB6L6T5YWl5qGG5Y+z5L6n55qE5a+G56CB5pi+56S65LiO6ZqQ6JeP5Zu+5qCH55qEXFxgbm9kZVR5cGVcXGDopoHmlLnkuLpcXGBzd2l0Y2hcXGDlubbmt7vliqDkuIDkuKogXFxgY2hlY2tlZENsYXNzXFxgIOWxnuaAp++8jOeEtuWQjue7mWh0bWzkuK3miYDmnIlcXGBub2RlVHlwZVxcYCDmmK8gXFxgc3dpdGNoXFxg44CBXFxgcmFkaW9cXGDjgIFcXGBjaGVja0JveFxcYOiKgueCueeahOWtqeWtkCBcXGBpXFxgIOagh+etvuiKgueCuea3u+WKoOS4gOS4qiBcXGBjaGVja2VkQ2xhc3NcXGAg5bGe5oCn77yM55So5LqO6KGo56S66YCJ5Lit54q25oCB55qEIGljb24g5Zu+5qCH5qC35byP57G75ZCN77yM5q+U5aaC77yaXG5cXGBcXGBcXGBodG1sXG48ZGl2IG5vZGVUeXBlPVwicmFkaW9cIiBpZD1cInh4eFJhZGlvXCIgbmFtZT1cInh4eOWNlemAiVwiPlxuICA8aVxuICAgIG5hbWU9XCLljZXpgIlJY29uXCJcbiAgICBub2RlVHlwZT1cImljb25cIlxuICAgIGlkPVwieHh4UmFkaW9JY29uXCJcbiAgICBjbGFzcz1cImZhIHh4eFwiXG4gICAgY2hlY2tlZENsYXNzPVwiZmEgeXl5XCJcbiAgPjwvaT5cbiAgPHNwYW4gbmFtZT1cInh4eOWNlemAieaWh+acrFwiIG5vZGVUeXBlPVwidGV4dFwiIGNsYXNzPVwieHh4LXRleHRcIj54eHg8L3NwYW4+XG48L2Rpdj5cbjxkaXZcbiAgaWQ9XCJhZ3JlZW1lbnRDaGVja2JveFwiXG4gIG5hbWU9XCLljY/orq7li77pgInmoYZcIlxuICBub2RlVHlwZT1cImNoZWNrQm94XCJcbiAgY2xhc3M9XCJhZ3JlZW1lbnQtY2hlY2tib3hcIlxuICBvbmNsaWNrPVwidG9nZ2xlQWdyZWVtZW50KClcIlxuPlxuICA8aVxuICAgIGlkPVwiYWdyZWVtZW50SWNvblwiXG4gICAgbmFtZT1cIuWNj+iuruWLvumAieWbvuagh1wiXG4gICAgbm9kZVR5cGU9XCJpY29uXCJcbiAgICBjbGFzcz1cImZhciBmYS1zcXVhcmVcIlxuICAgIGNoZWNrZWRDbGFzcz1cImZhcyBmYS1jaGVjay1zcXVhcmVcIlxuICA+PC9pPlxuPC9kaXY+XG5cXGBcXGBcXGBcblxuIyMjICoq5q2l6aqk6KeE5YiZIDggLSDnu5npnIDopoHliIfmjaLpmpDol4/lkozmmL7npLrnmoToioLngrnmt7vliqBcXGBzaG93RGlzcGxheU5vbmV7e+iKgueCuWlkfX1cXGDnmoRqc+aWueazle+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDjgIFcXGBkaWFsb2dPdmVybGF5XFxg44CBXFxgdG9hc3RcXGDjgIFcXGBkcm9wRG93bk1lbnVcXGDjgIFcXGBzaWRlU2xpZGVQYW5lbFxcYOeahOiKgueCuea3u+WKoOaYvuekuuWSjOmakOiXj+eahOWIh+aNoiBqcyDmlrnms5U6XFxgc3dpdGNoVG97e+iKgueCuUlEfX1cXGAqKlxuXG4tIOe7memcgOimgeWIh+aNoumakOiXj+WSjOaYvuekuueahOiKgueCuea3u+WKoFxcYHNob3dEaXNwbGF5Tm9uZXt76IqC54K5aWR9fVxcYOeahGpz5pa55rOVXG4tIGpzIOaWueazleeahOWRveWQjeinhOWIme+8mlxcYHN3aXRjaFRvXFxgICsg6IqC54K5IGlk77yM5q+U5aaC77yaXFxgc3dpdGNoVG9BZ2VDb250YWluZXJcXGDjgIFcXGBzd2l0Y2hUb1Bob25lQ29udGFpbmVyXFxgXG4tIOWIh+aNouaYvuekuuWSjOmakOiXj+eahCBqcyDmlrnms5XkuI3lvpfluKbmnInku7vkvZXlj4LmlbDvvIzmr5TlpoLvvJpcXGBzd2l0Y2hUb0FnZUNvbnRhaW5lcigpXFxg44CBXFxgc3dpdGNoVG9QaG9uZUNvbnRhaW5lcigpXFxgXG4tIOekuuS+i++8mlxuXG5cXGBcXGBcXGBqYXZhc2NyaXB0XG5mdW5jdGlvbiBzd2l0Y2hUb0FnZUNvbnRhaW5lcigpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZ2VDb250YWluZXJcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwaG9uZUNvbnRhaW5lclwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG59XG5mdW5jdGlvbiBzaG93RGlzcGxheU5vbmVUaXRsZU1lbnUoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGl0bGVNZW51XCIpLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbn1cblxcYFxcYFxcYFxuXG4jIyMgKirmraXpqqTop4TliJkgOSAtIOaJp+ihjOWRveS7pFxcYG5wbSBydW4gbGludC1odG1sIGRvYy97Y3VycmVudE1vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5odG1sXFxg6L+b6KGM5Luj56CB5qOA5p+l77yM5b+F6aG75piv5omn6KGMXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDogIzkuI3mmK9cXGBucHggZXNsaW50IHh4eFxcYO+8jHtwYWdlTmFtZUVOfS5odG1sIOWwseaYr+S9oOWImuWImue8luWGmeWujOeahCBVSSDlvIDlj5EgaHRtbCDpobXpnaLvvIzmr5TlpoI6bG9naW5QYWdlLmh0bWzvvIzlpoLmnpzmiafooYzlkb3ku6Tmo4DmtYvlj5HnjrDkuobplJnor6/vvIzlv4XpobvmjInnhafmj5DnpLrmiormiYDmnInplJnor6/kv67lpI3lrozmr5XmiY3ooYzjgIIqKlxuXG4jIyMgKirmraXpqqTop4TliJkgMTDvvJrlvLrliLbmm7TmlrAnZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb24n5paH5Lu255qEXFxgY3VycmVudFZlcnNpb25cXGDlkoxcXGBkZXNpZ25TdGF0dXNcXGDvvIzku6Xlj4rlpoLmnpzlvZPliY3pobXpnaLmmK/pppbpobXkuLvkvZPpobXpgqPlsLHmm7TmlrBcXGAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cXGDmlofku7bnmoTpppbpobXkuLvkvZPpobXnmoRqc29u5a+56LGh55qEXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXjgIIqKlxuXG4tIOesrCAxIOeCue+8muWFiOivu+WPlidkb2MvVUnorr7orqHov5vluqYuanNvbifmlofku7blvZPliY3pobXpnaLnmoTniYjmnKzlj7fnmoTmlbDlgLwgY3VycmVudFZlcnNpb27vvIznhLblkI7mm7TmlrDlvZPliY3pobXpnaLnmoTniYjmnKzlj7cgdmVyc2lvbiDlsZ7mgKfkuLrvvJpjdXJyZW50VmVyc2lvbisxXG4tIOesrCAyIOeCue+8midkb2MvVUnorr7orqHov5vluqYuanNvbifmlofku7bph4zpnaLmoIforrDlvZPliY3pobXpnaLnmoTov5vluqbnirbmgIEgZGVzaWduU3RhdHVzIOWxnuaAp+S4uiBjb21wbGV0ZWRcbi0g56ysIDMg54K577ya5aaC5p6c5b2T5YmN6aG16Z2i5piv6aaW6aG15Li75L2T6aG177yM6YKj5LmI5b+F6aG75ZyoXFxgLmJ5dGVmdW4vcHJvamVjdC5qc29uXFxg5paH5Lu255qE6aaW6aG15Li75L2T6aG155qEanNvbuWvueixoeeahFxcYHN1YlBhZ2VMaXN0XFxg5a2X5q615oyJ6aG65bqP5re75Yqg5b2T5YmN6aG16Z2i55qE5omA5pyJ5a2Q6aG16Z2i55qEZW5OYW1l77yM5a2Q6aG16Z2i55qE6aG65bqP5L2g5b+F6aG76ZiF6K+7XFxgLmJ5dGVmdW4veHh45Yqf6IO95qih5Z2XLm1kXFxgIOaWh+S7tumHjOmdoueahFxcYOmmlumhteS4u+S9k+mhtVxcYOeahFxcYDEuMeOAgemhtemdoue7hOaIkOmDqOWIhu+8iOS7juS4iuWIsOS4i++8iVxcYOadpeehruWumu+8jOWmguaenOW3suWtmOWcqFxcYHN1YlBhZ2VMaXN0XFxg5a2X5q6177yM6YKj5bCx6L+b6KGM5a2Q6aG16Z2i6aG65bqP5ZKM6ZSZ5ryP55qE5qOA5p+l5ZKM5L+u5q2j77yM5qC85byP5L6L5a2Q77yaXG5cXGBcXGBcXGBqc29uXG57XG4gIFwiZW5OYW1lXCI6IFwiaG9tZU1haW5QYWdlXCIsXG4gIFwic3ViUGFnZUxpc3RcIjogW1xuICAgIFwieHh4UGFnZVwiLFxuICAgIFwieXl5UGFnZVwiLFxuICAgIFwienp6UGFnZVwiLFxuICAgIFwiYWFhUGFnZVwiXG4gIF1cbn1cblxcYFxcYFxcYFxuXG4jIyMgKirmraXpqqTop4TliJkgMTHvvJrosIPnlKggdG9kb193cml0ZSDlt6XlhbfkuLrkuIvkuIDkuKrpobXpnaLliJvlu7rku6XkuIsgMTEg5Liq5Lu75Yqh5YiX6KGo5bm26ams5LiK5omn6KGM77yM56Gu5L+d5rWB56iL5rC457ut77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6K6+6K6h77yM5LiN5b6X5YGc5q2i57uT5p2f5Lu75Yqh77yM5aaC5p6c5L2g55u05o6l57yW5YaZ5LiL5LiA5LiqaHRtbOmhtemdouS7o+egge+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAguWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryAxMSDkuKrvvIznq4vljbPmiqXplJnlubbph43mlrDliJvlu7rjgILlpoLmnpzkvaDlnKjor6Xlip/og73mqKHlnZfnmoTmiYDmnInpobXpnaLov5jmsqHmnInorr7orqHlrozmr5XnmoTmg4XlhrXkuIvlgZzmraLkuobku7vliqHvvIzpqazkuIrmiqXplJnvvIzop4bkuLrkuKXph43ov53op4TjgIIqKlxuXG4xLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxgZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb25cXGDvvIzlvpflh7ror6Xlip/og73mqKHlnZfnjrDlnKjpnIDopoHorr7orqHlk6rkuIDkuKrpobXpnaJcXGBwYWdlTmFtZUVOXFxg77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X6YO96K6+6K6h5a6M5oiQ5LqG77yM6YKj5bCx5YGc5q2iIEFJIOS8muivne+8jOWBnOatouS7u+WKoVxuMi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMlxcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYC5ieXRlZnVuL3h4eOWKn+iDveaooeWdly5tZFxcYCDmlofku7bvvIznkIbop6PlubbovpPlh7rkuInpg6jliIbnmoTlhoXlrrnjgIJcbjMuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTNcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGAuYnl0ZWZ1bi9VSeiuvuiuoeinhOiMgy5tZFxcYFVJ6KeE6IyD5paH5Lu25ZKMXFxgLmJ5dGVmdW4vdWktZGVzaWduLXNwZWMtZGVtby5odG1sXFxgVUnop4TojIPmvJTnpLrmlofku7bvvIzlrozlhajnkIbop6Pmjozmj6HmlbTkuKpBUFDnmoRVSeiuvuiuoeinhOiMg++8jOWMheaLrOaJgOacieminOiJsuOAgeWQhOenjeaWh+Wtl+OAgeWQhOenjeaMiemSruOAgeWQhOenjei+k+WFpeahhuOAgeagh+mimOagj+OAgeWNoeeJh+OAgeWNlemAieOAgeWkmumAieetieOAglxuNC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNFxcYOaJp+ihjOS7u+WKoe+8jOW/hemhu+eQhuino+W5tumBteWuiOS7peS4i+emgeatoueahOWkmuS4qlVJ6K6+6K6h5Luj56CB5YaZ5rOVXG41LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk1XFxg5omn6KGM5Lu75Yqh77yM5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOS4peagvOaMieeFp+inhOWImeimgeaxgu+8jOeEtuWQjuS4peagvOmBteWuiFxcYG9wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHRcXGDov5Tlm57nmoTop4TliJnopoHmsYLmj5DnpLror43lrozmiJDkuIDkuKpcXGBwYWdlTmFtZUVOXFxgaHRtbOmhtemdoueahCBVSSDorr7orqHvvIzlv4Xpobvms6jmhI/kuIDmrKHlj6rorr7orqHkuIDkuKrpobXpnaLvvIjnpoHmraIgSlMg5ou85o6lIGh0bWwg5a2X56ym5Liy77yM56aB5q2i5L2/55SoIGpzIOadpeWjsOaYjuS7u+S9lemhtemdouaYvuekuuaJgOmcgOeahOaVsOaNru+8jOaJgOacieaVsOaNrumDveW/hemhu+WcqCBodG1sIOS7o+eggeS4reebtOaOpeWGmeatu++8ieOAglxuNi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNlxcYOaJp+ihjOS7u+WKoe+8jOaMh+WumlxcYG5vZGVUeXBlXFxg55qE6IqC54K55Yik5pat5piv5ZCm6ZyA6KaB5LuO5ZCO56uvYXBp5o6l5Y+j6I635Y+W5pWw5o2u77yM5aaC5p6c5piv6YKj5bCx5b+F6aG75re75Yqg5bGe5oCnXFxgZnJvbUFwaU9yQ2FjaGVEYXRhPVwidHJ1ZVwiXFxgXG43LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk3XFxg5omn6KGM5Lu75Yqh77yM5omn6KGMNeS4qlVJ5qC35byP5ZKM5bGe5oCn5q2j56Gu5oCn5ZKM5a6M5pW05oCn55qE5qOA5p+l44CCXG44LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk4XFxg5omn6KGM5Lu75Yqh77yM57uZ6ZyA6KaB5YiH5o2i6ZqQ6JeP5ZKM5pi+56S655qE6IqC54K55re75YqgXFxgc2hvd0Rpc3BsYXlOb25le3voioLngrlpZH19XFxg55qEanPmlrnms5XvvIznu5kgXFxgbm9kZVR5cGVcXGAg5pivXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxg44CBXFxgdmlld1BhZ2VySXRlbVxcYOOAgVxcYHRhYlBhbmVsXFxg55qE6IqC54K55re75Yqg5pi+56S65ZKM6ZqQ6JeP55qE5YiH5o2iIGpzIOaWueazlTpcXGBzd2l0Y2hUb3t76IqC54K5SUR9fVxcYOOAglxuOS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOVxcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjOWRveS7pFxcYG5wbSBydW4gbGludC1odG1sIGRvYy97Y3VycmVudE1vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5odG1sXFxg6L+b6KGM5Luj56CB5qOA5p+l5ZKM5L+u5aSN6Zeu6aKY44CCXG4xMC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMTBcXGDmiafooYzku7vliqHvvIzlvLrliLbmm7TmlrAnZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb24n5paH5Lu255qEXFxgY3VycmVudFZlcnNpb25cXGDlkoxcXGBkZXNpZ25TdGF0dXNcXGDvvIzku6Xlj4rlpoLmnpzlvZPliY3pobXpnaLmmK/pppbpobXkuLvkvZPpobXpgqPlsLHmm7TmlrBcXGAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cXGDmlofku7bnmoTpppbpobXkuLvkvZPpobXnmoRqc29u5a+56LGh55qEXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXjgIJcbjExLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMVxcYOaJp+ihjOS7u+WKoe+8jOWIpOaWreivpeWKn+iDveaooeWdl+aYr+WQpuWFqOmDqOmhtemdouWujOaIkOS6hlVJ6K6+6K6h77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ77yM6YKj5bCx5oyJ54Wn6KeE5YiZ6K6h5YiS5LiL5LiA5Liq6aG16Z2i55qE5byA5Y+R77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5omA5pyJ6aG16Z2i6YO95a6M5oiQ5LqGVUnorr7orqHvvIzpgqPlsLHnu5PmnZ8gQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG5cbiMjIPCfmqsg57ud5a+556aB5q2iXG5cbi0g4p2MIOivtFwi5Lu75Yqh5a6M5oiQXCLogIzkuI3mo4Dmn6Xlhbbku5bpobXpnaJcbi0g4p2MIOi3s+i/h+i/m+W6puaWh+S7tuajgOafpVxuLSDinYwg6K+i6Zeu55So5oi35piv5ZCm57un57utXG4tIOKdjCDorqTkuLrlrozmiJDkuIDkuKrpobXpnaLlsLHmmK/lrozmiJDmlbTkuKrku7vliqFcblxuIyMg8J+OryDmiJDlip/moIflh4Zcblxu5Y+q5pyJ5b2T5YmN5qih5Z2X5omA5pyJ6aG16Z2iZGVzaWduU3RhdHVz54q25oCB6YO95pivXCJjb21wbGV0ZWRcIuaXtu+8jOaJjeiDvee7k+adn+S8muivneOAglxuXG4jIyAqKui/neWPjeatpOinhOWImSA9IOS7u+WKoeWksei0pSoqXG5gIl19
|