diff --git a/.gitignore b/.gitignore
index 10e2d9ee..0d71973c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,5 +26,4 @@ yarn-error.log*
*.local
.cache
-!.gitkeep
-
+!.gitkeep
\ No newline at end of file
diff --git a/extensions/PortFromTurboWarp/mybearworld/xml.js b/extensions/PortFromTurboWarp/mybearworld/xml.js
new file mode 100644
index 00000000..3252b44a
--- /dev/null
+++ b/extensions/PortFromTurboWarp/mybearworld/xml.js
@@ -0,0 +1,668 @@
+// Name: XML
+// ID: mbwxml
+// Description: Create and extract values from XML.
+// By: mybearworld
+// License: MIT
+/*
+ Adapted and submitted to Gandi-IDE by 多bug的啸天犬 @ CCW
+ Authorized by the original author
+ Proof of authorized behavior by the original author:
+ https://fastly.jsdelivr.net/gh/MoreBugOfDog/PicGo-cdn-files/20240620-204009.jpg
+*/
+
+/*
+ 由 多bug的啸天犬 @ CCW 改编后提交到Gandi-IDE
+ 已获得原作者授权
+ 原作者授权行为证明:
+ https://fastly.jsdelivr.net/gh/MoreBugOfDog/PicGo-cdn-files/20240620-204009.jpg
+*/
+
+// 多bug的啸天犬 @ CCW 优化了中文翻译,并添加了官方拓展市场的相关配置(window.tempExt)以及绘制Icon和封面。
+/* generated l10n code */
+// 英语I10n写在默认text里,所以只标注一个作者的I10n
+// "original"的意思是 原 这里指“原作者”,这样写询问了原作者的意见,取得了同意。
+Scratch.translate.setup({
+ en:{
+ '_skydogName':'[rearrange]多bug的啸天犬 @ CCW',
+ '_mybearworldName':'[original]mybearworld @ TurboWarp',
+ },
+ 'zh-cn': {
+ '_add child [CHILD] to [XML]': '[XML]添加子元素[CHILD]',
+ '_attribute [ATTR] of [XML]': '[XML]中属性[ATTR]的值',
+ '_attributes of [XML]': '[XML]的所有属性',
+ '_child #[NO] of [XML]': '[XML]第[NO]个子元素',
+ '_children amount of [XML]': '[XML]的子元素数量',
+ '_does [XML] have attribute [ATTR]?': '[XML]有属性[ATTR]吗?',
+ '_does [XML] have children?': '[XML]有子元素吗?',
+ '_error message of [MAYBE_XML]': '[MAYBE_XML]的错误信息',
+ '_is [MAYBE_XML] valid XML?': '[MAYBE_XML]是合法 XML?',
+ '_query [QUERY] on [XML]': '[XML]中第一个匹配[QUERY]的元素',
+ '_query [QUERY] on [XML] matches?': '[XML]能匹配[QUERY]吗?',
+ '_query all [QUERY] on [XML]': '[XML]中所有匹配[QUERY]的元素',
+ '_remove attribute [ATTR] of [XML]': '删除[XML]的属性[ATTR]',
+ '_remove child #[NO] of [XML]': '删除[XML]第[NO]个子元素',
+ '_replace child #[NO] of [XML] with [CHILD]':
+ '将[XML]第[NO]子元素替换为[CHILD]',
+ '_set attribute [ATTR] of [XML] to [VALUE]':
+ '设置[XML]的属性[ATTR]为[VALUE]',
+ '_tag name of [XML]': '[XML]的标签名称',
+ '_text of [XML]': '[XML]的文本',
+ '_set text of [XML] to [VALUE]': '设置[XML]的内部文本为[VALUE]',
+ '_skydogName':'[改编]多bug的啸天犬 @ CCW',
+ '_mybearworldName':'[原作者]mybearworld @ TurboWarp',
+ }
+})
+/* end generated l10n code */ ;(function (Scratch) {
+ 'use strict'
+ const xmlIcon = 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMDkiIGhlaWdodD0iMzA5IiB2aWV3Qm94PSIwLDAsMzA5LDMwOSI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE2NS41LC0yNS41KSI+PGcgZGF0YS1wYXBlci1kYXRhPSJ7JnF1b3Q7aXNQYWludGluZ0xheWVyJnF1b3Q7OnRydWV9IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iIiBzdHJva2UtZGFzaG9mZnNldD0iMCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOiBub3JtYWwiPjxwYXRoIGQ9Ik0yMDcuNSwzMDN2LTI0MmgyNDZ2MjQyeiIgZmlsbD0iI2JiNTdhNyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE4NS41LDI2My41MDQ3NGMwLC01OC4xMzkwOCAwLC0xNDkuMDM4ODkgMCwtMTc4LjQ4MzQxYzAsLTE4LjYyMDIzIDIyLjQ2NTM5LC0zOS41MjEzMyA0Mi4wNzEwOSwtMzkuNTIxMzNjMzEuMzI1ODMsMCAxMjYuOTU0MzQsMCAxODMuNTgyOTQsMGMyNS42ODQ0NCwwIDQzLjM0NTk3LDI4LjA4MDk1IDQzLjM0NTk3LDUwLjk5NTI2YzAsMjkuOTE2MTcgMCwxMDguOTczNTUgMCwxNjMuMTg0ODNjMCwzMS42NDIzNSAtMjAuNjQxNTcsNTQuODE5OTEgLTQ5LjcyMDM4LDU0LjgxOTkxYy01Ni43NDY0LDAgLTE0NS42MjM3NiwwIC0xNzUuOTMzNjQsMGMtMjAuMDkxNTYsMCAtNDMuMzQ1OTgsLTIwLjU0MDQxIC00My4zNDU5OCwtNTAuOTk1Mjd6IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iNDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE4NS41LDI2My41MDQ3NGMwLC01OC4xMzkwOCAwLC0xNDkuMDM4ODkgMCwtMTc4LjQ4MzQxYzAsLTE4LjYyMDIzIDIyLjQ2NTM5LC0zOS41MjEzMyA0Mi4wNzEwOSwtMzkuNTIxMzNjMzEuMzI1ODMsMCAxMjYuOTU0MzQsMCAxODMuNTgyOTQsMGMyNS42ODQ0NCwwIDQzLjM0NTk3LDI4LjA4MDk1IDQzLjM0NTk3LDUwLjk5NTI2YzAsMjkuOTE2MTcgMCwxMDguOTczNTUgMCwxNjMuMTg0ODNjMCwzMS42NDIzNSAtMjAuNjQxNTcsNTQuODE5OTEgLTQ5LjcyMDM4LDU0LjgxOTkxYy01Ni43NDY0LDAgLTE0NS42MjM3NiwwIC0xNzUuOTMzNjQsMGMtMjAuMDkxNTYsMCAtNDMuMzQ1OTgsLTIwLjU0MDQxIC00My4zNDU5OCwtNTAuOTk1Mjd6IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iNDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTM3OC4yNSwyMzguMjVsLTExNi41LC0xMTYuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjQwIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48cGF0aCBkPSJNMzc4LjI1LDIzOC4yNWwtMTE2LjUsLTExNi41IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iNDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjxwYXRoIGQ9Ik0zNzguMjUsMTIxLjc1bC0xMTYuNSwxMTYuNSIgZGF0YS1wYXBlci1kYXRhPSJ7JnF1b3Q7aW5kZXgmcXVvdDs6bnVsbH0iIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI0MCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PC9nPjwvZz48L3N2Zz4='
+ const xmlPicture = 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI2ODYuMjIwOCIgaGVpZ2h0PSIzODUuOTk5MiIgdmlld0JveD0iMCwwLDY4Ni4yMjA4LDM4NS45OTkyIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMy4xMTA0LDEyLjk5OTYpIj48ZyBkYXRhLXBhcGVyLWRhdGE9InsmcXVvdDtpc1BhaW50aW5nTGF5ZXImcXVvdDs6dHJ1ZX0iIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtZGFzaGFycmF5PSIiIHN0cm9rZS1kYXNob2Zmc2V0PSIwIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6IG5vcm1hbCI+PGltYWdlIHg9Ii00My4xMDc1NyIgeT0iLTI0LjI0ODAxIiB0cmFuc2Zvcm09InNjYWxlKDAuNTM2MTEsMC41MzYxMSkiIHdpZHRoPSIxMjgwIiBoZWlnaHQ9IjcyMCIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUJRQUFBQUxRQ0FZQUFBRFBmZDFXQUFBQUFYTlNSMElBcnM0YzZRQUFJQUJKUkVGVWVGN3QyRUVOQUNBUUEwRlFpVVJFSUE0U1pHem1ISFI2cjg2ejloMk9BQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBSUdrd0RRQUpuc1ZpZ0FCQWdRSUVDQkFnQUFCQWdRSUVDQkFnTUFYTUFCNkJBSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSmhBUU5ndUZ6UkNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCZ0EvUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUNCc0lBQk1GeXVhQVFJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FNZ0g2QUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQVFGakFBQmd1VnpRQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JrQS9RSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdRQ0FzWUFBTWx5c2FBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUU9nSHlCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNBUUZqQUFoc3NWalFBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0lBQjBBOFFJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FDQXNZQU1QbGlrYUFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFREFBT2dIQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0lRRkRJRGhja1VqUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnWUFEMEF3UUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnVENBZ2JBY0xtaUVTQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVEQUErZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDWVFFRFlMaGMwUWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdZQVAwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQWdiQ0FBVEJjcm1nRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRURJQitnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnRUJZd0FBWUxsYzBBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1pBUDBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVBZ0xHQUFESmNyR2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFRG9COGdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdFQll3QUliTEZZMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQ0FBZEFQRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUFnTEdBREQ1WXBHZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBd0FEb0J3Z1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBaUVCUXlBNFhKRkkwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlHQUE5QU1FQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFd2dJR3dIQzVvaEVnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkF3QVBvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFtRUJBMkM0WE5FSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUdBRDlBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBSUd3Z0FFd1hLNW9CQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQXlBZm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlCQVdNQUFHQzVYTkFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJR1FEOUFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFJQ3hnQUF5WEt4b0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBNkFmSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUJBV01BQ0d5eFdOQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBZ0FIUUR4QWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQUlDeGdBdytXS1JvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FNQUE2QWNJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJaEFVTWdPRnlSU05BZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JnQVBRREJBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JNSUNCc0J3dWFJUklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUU1BRDZBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUpoQVFOZ3VGelJDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQmdBL1FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FDQnNJQUJNRnl1YUFRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRTWdINkFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FRRmpBQUJndVZ6UUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCa0EvUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUNBc1lBQU1seXNhQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFPZ0h5QkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQVFGakFBaHNzVmpRQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdJQUIwQThRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRQ0FzWUFNUGxpa2FBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRURBQU9nSENCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNJUUZESURoY2tValFJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1lBRDBBd1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1RDQWdiQWNMbWlFU0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFREFBK2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ1lRRURZTGhjMFFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnWUFQMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFnYkNBQVRCY3JtZ0VDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVESUIrZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0VCWXdBQVlMbGMwQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdaQVAwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQWdMR0FBREpjckdnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRURvQjhnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnRUJZd0FJYkxGWTBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUNBQWRBUEVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVBZ0xHQURENVlwR2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQXdBRG9Cd2dRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWlFQlF5QTRYSkZJMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJR0FBOUFNRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRXdnSUd3SEM1b2hFZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBd0FQb0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBbUVCQTJDNFhORUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlHQUQ5QUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUlHd2dBRXdYSzVvQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkF5QWZvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQkFXTUFBR0M1WE5BSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUdRRDlBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBSUN4Z0FBeVhLeG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQTZBZklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlCQVdNQUNHeXhXTkFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQWdBSFFEeEFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFJQ3hnQXcrV0tSb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRTUFBNkFjSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSWhBVU1nT0Z5UlNOQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCZ0FQUURCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCTUlDQnNCd3VhSVJJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FNQUQ2QVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFKaEFRTmd1RnpSQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JnQS9RQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQ0JzSUFCTUZ5dWFBUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUU1nSDZBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBUUZqQUFCZ3VWelFDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQmtBL1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FDQXNZQUFNbHlzYUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRT2dIeUJBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0FRRmpBQWhzc1ZqUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnSUFCMEE4UUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUNBc1lBTVBsaWthQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVEQUFPZ0hDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDSVFGRElEaGNrVWpRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdZQUQwQXdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdUQ0FnYkFjTG1pRVNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRURBQStnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNZUUVEWUxoYzBRZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1lBUDBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBZ2JDQUFUQmNybWdFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFRElCK2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdFQll3QUFZTGxjMEFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnWkFQMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUFnTEdBQURKY3JHZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVEb0I4Z1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ0VCWXdBSWJMRlkwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlDQUFkQVBFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQWdMR0FERDVZcEdnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkF3QURvQndnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFpRUJReUE0WEpGSTBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUdBQTlBTUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUV3Z0lHd0hDNW9oRWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQXdBUG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQW1FQkEyQzRYTkVJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJR0FEOUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFJR3dnQUV3WEs1b0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBeUFmb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUJBV01BQUdDNVhOQUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlHUUQ5QWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQUlDeGdBQXlYS3hvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkE2QWZJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJQkFXTUFDR3l4V05BQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FnQUhRRHhBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBSUN4Z0F3K1dLUm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUU1BQTZBY0lFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUloQVVNZ09GeVJTTkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQmdBUFFEQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQk1JQ0JzQnd1YUlSSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRTUFENkFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSmhBUU5ndUZ6UkNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCZ0EvUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUNCc0lBQk1GeXVhQVFJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FNZ0g2QUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQVFGakFBQmd1VnpRQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JrQS9RSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdRQ0FzWUFBTWx5c2FBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUU9nSHlCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNBUUZqQUFoc3NWalFBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0lBQjBBOFFJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FDQXNZQU1QbGlrYUFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFREFBT2dIQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0lRRkRJRGhja1VqUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnWUFEMEF3UUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnVENBZ2JBY0xtaUVTQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVEQUErZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDWVFFRFlMaGMwUWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdZQVAwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQWdiQ0FBVEJjcm1nRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRURJQitnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnRUJZd0FBWUxsYzBBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1pBUDBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVBZ0xHQUFESmNyR2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFRG9COGdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdFQll3QUliTEZZMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQ0FBZEFQRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUFnTEdBREQ1WXBHZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBd0FEb0J3Z1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBaUVCUXlBNFhKRkkwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlHQUE5QU1FQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFd2dJR3dIQzVvaEVnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkF3QVBvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFtRUJBMkM0WE5FSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUdBRDlBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBSUd3Z0FFd1hLNW9CQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQXlBZm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlCQVdNQUFHQzVYTkFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJR1FEOUFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFJQ3hnQUF5WEt4b0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBNkFmSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUJBV01BQ0d5eFdOQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBZ0FIUUR4QWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQUlDeGdBdytXS1JvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FNQUE2QWNJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJaEFVTWdPRnlSU05BZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JnQVBRREJBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JNSUNCc0J3dWFJUklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUU1BRDZBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUpoQVFOZ3VGelJDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQmdBL1FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FDQnNJQUJNRnl1YUFRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRTWdINkFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FRRmpBQUJndVZ6UUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCa0EvUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUNBc1lBQU1seXNhQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFPZ0h5QkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQVFGakFBaHNzVmpRQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdJQUIwQThRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRQ0FzWUFNUGxpa2FBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRURBQU9nSENCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNJUUZESURoY2tValFJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1lBRDBBd1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1RDQWdiQWNMbWlFU0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFREFBK2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ1lRRURZTGhjMFFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnWUFQMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFnYkNBQVRCY3JtZ0VDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVESUIrZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0VCWXdBQVlMbGMwQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdaQVAwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQWdMR0FBREpjckdnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRURvQjhnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnRUJZd0FJYkxGWTBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUNBQWRBUEVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVBZ0xHQURENVlwR2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQXdBRG9Cd2dRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWlFQlF5QTRYSkZJMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJR0FBOUFNRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRXdnSUd3SEM1b2hFZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBd0FQb0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBbUVCQTJDNFhORUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlHQUQ5QUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUlHd2dBRXdYSzVvQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkF5QWZvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQkFXTUFBR0M1WE5BSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUdRRDlBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBSUN4Z0FBeVhLeG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQTZBZklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlCQVdNQUNHeXhXTkFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQWdBSFFEeEFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFJQ3hnQXcrV0tSb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRTUFBNkFjSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSWhBVU1nT0Z5UlNOQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCZ0FQUURCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCTUlDQnNCd3VhSVJJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FNQUQ2QVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFKaEFRTmd1RnpSQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JnQS9RQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQ0JzSUFCTUZ5dWFBUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUU1nSDZBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBUUZqQUFCZ3VWelFDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQmtBL1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FDQXNZQUFNbHlzYUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRT2dIeUJBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0FRRmpBQWhzc1ZqUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnSUFCMEE4UUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUNBc1lBTVBsaWthQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVEQUFPZ0hDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDSVFGRElEaGNrVWpRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdZQUQwQXdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdUQ0FnYkFjTG1pRVNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRURBQStnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNZUUVEWUxoYzBRZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1lBUDBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBZ2JDQUFUQmNybWdFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFRElCK2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdFQll3QUFZTGxjMEFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnWkFQMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUFnTEdBQURKY3JHZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVEb0I4Z1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ0VCWXdBSWJMRlkwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlDQUFkQVBFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQWdMR0FERDVZcEdnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkF3QURvQndnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFpRUJReUE0WEpGSTBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUdBQTlBTUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUV3Z0lHd0hDNW9oRWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQXdBUG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQW1FQkEyQzRYTkVJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJR0FEOUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFJR3dnQUV3WEs1b0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBeUFmb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUJBV01BQUdDNVhOQUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlHUUQ5QWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQUlDeGdBQXlYS3hvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkE2QWZJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJQkFXTUFDR3l4V05BQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FnQUhRRHhBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBSUN4Z0F3K1dLUm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUU1BQTZBY0lFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUloQVVNZ09GeVJTTkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQmdBUFFEQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQk1JQ0JzQnd1YUlSSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRTUFENkFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSmhBUU5ndUZ6UkNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCZ0EvUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUNCc0lBQk1GeXVhQVFJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FNZ0g2QUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQVFGakFBQmd1VnpRQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JrQS9RSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdRQ0FzWUFBTWx5c2FBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUU9nSHlCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNBUUZqQUFoc3NWalFBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0lBQjBBOFFJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FDQXNZQU1QbGlrYUFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFREFBT2dIQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0lRRkRJRGhja1VqUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnWUFEMEF3UUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnVENBZ2JBY0xtaUVTQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVEQUErZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDWVFFRFlMaGMwUWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdZQVAwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQWdiQ0FBVEJjcm1nRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRURJQitnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnRUJZd0FBWUxsYzBBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1pBUDBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVBZ0xHQUFESmNyR2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFRG9COGdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdFQll3QUliTEZZMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQ0FBZEFQRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUFnTEdBREQ1WXBHZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBd0FEb0J3Z1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBaUVCUXlBNFhKRkkwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlHQUE5QU1FQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFd2dJR3dIQzVvaEVnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkF3QVBvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFtRUJBMkM0WE5FSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUdBRDlBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBSUd3Z0FFd1hLNW9CQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQXlBZm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlCQVdNQUFHQzVYTkFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJR1FEOUFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFJQ3hnQUF5WEt4b0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBNkFmSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUJBV01BQ0d5eFdOQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBZ0FIUUR4QWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQUlDeGdBdytXS1JvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FNRDVyNFRkQUFBZ0FFbEVRVlFBNkFjSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSWhBVU1nT0Z5UlNOQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCZ0FQUURCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCTUlDQnNCd3VhSVJJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FNQUQ2QVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFKaEFRTmd1RnpSQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JnQS9RQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQ0JzSUFCTUZ5dWFBUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUU1nSDZBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBUUZqQUFCZ3VWelFDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQmtBL1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FDQXNZQUFNbHlzYUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRT2dIeUJBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0FRRmpBQWhzc1ZqUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnSUFCMEE4UUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUNBc1lBTVBsaWthQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVEQUFPZ0hDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDSVFGRElEaGNrVWpRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdZQUQwQXdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdUQ0FnYkFjTG1pRVNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRURBQStnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNZUUVEWUxoYzBRZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1lBUDBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBZ2JDQUFUQmNybWdFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFRElCK2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdFQll3QUFZTGxjMEFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnWkFQMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUFnTEdBQURKY3JHZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVEb0I4Z1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ0VCWXdBSWJMRlkwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlDQUFkQVBFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQWdMR0FERDVZcEdnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkF3QURvQndnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFpRUJReUE0WEpGSTBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUdBQTlBTUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUV3Z0lHd0hDNW9oRWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQXdBUG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQW1FQkEyQzRYTkVJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJR0FEOUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFJR3dnQUV3WEs1b0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBeUFmb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUJBV01BQUdDNVhOQUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlHUUQ5QWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQUlDeGdBQXlYS3hvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkE2QWZJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJQkFXTUFDR3l4V05BQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FnQUhRRHhBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBSUN4Z0F3K1dLUm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUU1BQTZBY0lFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUloQVVNZ09GeVJTTkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQmdBUFFEQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQk1JQ0JzQnd1YUlSSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRTUFENkFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSmhBUU5ndUZ6UkNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCZ0EvUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUNCc0lBQk1GeXVhQVFJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FNZ0g2QUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQVFGakFBQmd1VnpRQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JrQS9RSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdRQ0FzWUFBTWx5c2FBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUU9nSHlCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNBUUZqQUFoc3NWalFBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0lBQjBBOFFJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FDQXNZQU1QbGlrYUFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFREFBT2dIQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0lRRkRJRGhja1VqUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnWUFEMEF3UUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnVENBZ2JBY0xtaUVTQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVEQUErZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDWVFFRFlMaGMwUWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdZQVAwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQWdiQ0FBVEJjcm1nRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRURJQitnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnRUJZd0FBWUxsYzBBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1pBUDBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVBZ0xHQUFESmNyR2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFRG9COGdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdFQll3QUliTEZZMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQ0FBZEFQRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUFnTEdBREQ1WXBHZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBd0FEb0J3Z1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBaUVCUXlBNFhKRkkwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlHQUE5QU1FQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFd2dJR3dIQzVvaEVnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkF3QVBvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFtRUJBMkM0WE5FSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUdBRDlBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBSUd3Z0FFd1hLNW9CQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQXlBZm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlCQVdNQUFHQzVYTkFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJR1FEOUFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFJQ3hnQUF5WEt4b0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBNkFmSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUJBV01BQ0d5eFdOQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBZ0FIUUR4QWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQUlDeGdBdytXS1JvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FNQUE2QWNJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJaEFVTWdPRnlSU05BZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JnQVBRREJBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JNSUNCc0J3dWFJUklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUU1BRDZBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUpoQVFOZ3VGelJDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQmdBL1FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FDQnNJQUJNRnl1YUFRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRTWdINkFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FRRmpBQUJndVZ6UUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCa0EvUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUNBc1lBQU1seXNhQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFPZ0h5QkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQVFGakFBaHNzVmpRQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdJQUIwQThRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRQ0FzWUFNUGxpa2FBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRURBQU9nSENCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNJUUZESURoY2tValFJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1lBRDBBd1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1RDQWdiQWNMbWlFU0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFREFBK2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ1lRRURZTGhjMFFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnWUFQMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFnYkNBQVRCY3JtZ0VDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVESUIrZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0VCWXdBQVlMbGMwQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdaQVAwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQWdMR0FBREpjckdnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRURvQjhnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnRUJZd0FJYkxGWTBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUNBQWRBUEVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVBZ0xHQURENVlwR2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQXdBRG9Cd2dRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWlFQlF5QTRYSkZJMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJR0FBOUFNRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRXdnSUd3SEM1b2hFZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBd0FQb0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBbUVCQTJDNFhORUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlHQUQ5QUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUlHd2dBRXdYSzVvQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkF5QWZvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQkFXTUFBR0M1WE5BSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUdRRDlBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBSUN4Z0FBeVhLeG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQTZBZklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlCQVdNQUNHeXhXTkFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQWdBSFFEeEFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFJQ3hnQXcrV0tSb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRTUFBNkFjSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSWhBVU1nT0Z5UlNOQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCZ0FQUURCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCTUlDQnNCd3VhSVJJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FNQUQ2QVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFKaEFRTmd1RnpSQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JnQS9RQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQ0JzSUFCTUZ5dWFBUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUU1nSDZBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBUUZqQUFCZ3VWelFDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQmtBL1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FDQXNZQUFNbHlzYUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRT2dIeUJBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0FRRmpBQWhzc1ZqUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnSUFCMEE4UUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUNBc1lBTVBsaWthQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVEQUFPZ0hDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDSVFGRElEaGNrVWpRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdZQUQwQXdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdUQ0FnYkFjTG1pRVNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRURBQStnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNZUUVEWUxoYzBRZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1lBUDBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBZ2JDQUFUQmNybWdFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFRElCK2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdFQll3QUFZTGxjMEFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnWkFQMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUFnTEdBQURKY3JHZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVEb0I4Z1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ0VCWXdBSWJMRlkwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlDQUFkQVBFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQWdMR0FERDVZcEdnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkF3QURvQndnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFpRUJReUE0WEpGSTBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUdBQTlBTUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUV3Z0lHd0hDNW9oRWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQXdBUG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQW1FQkEyQzRYTkVJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJR0FEOUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFJR3dnQUV3WEs1b0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBeUFmb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUJBV01BQUdDNVhOQUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlHUUQ5QWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQUlDeGdBQXlYS3hvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkE2QWZJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJQkFXTUFDR3l4V05BQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FnQUhRRHhBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBSUN4Z0F3K1dLUm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUU1BQTZBY0lFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUloQVVNZ09GeVJTTkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQmdBUFFEQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQk1JQ0JzQnd1YUlSSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRTUFENkFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSmhBUU5ndUZ6UkNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCZ0EvUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUNCc0lBQk1GeXVhQVFJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FNZ0g2QUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQVFGakFBQmd1VnpRQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JrQS9RSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdRQ0FzWUFBTWx5c2FBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUU9nSHlCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNBUUZqQUFoc3NWalFBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0lBQjBBOFFJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FDQXNZQU1QbGlrYUFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFREFBT2dIQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0lRRkRJRGhja1VqUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnWUFEMEF3UUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnVENBZ2JBY0xtaUVTQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVEQUErZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDWVFFRFlMaGMwUWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdZQVAwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQWdiQ0FBVEJjcm1nRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRURJQitnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnRUJZd0FBWUxsYzBBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1pBUDBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVBZ0xHQUFESmNyR2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFRG9COGdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdFQll3QUliTEZZMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQ0FBZEFQRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUFnTEdBREQ1WXBHZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBd0FEb0J3Z1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBaUVCUXlBNFhKRkkwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlHQUE5QU1FQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFd2dJR3dIQzVvaEVnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkF3QVBvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFtRUJBMkM0WE5FSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUdBRDlBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBSUd3Z0FFd1hLNW9CQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQXlBZm9BQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlCQVdNQUFHQzVYTkFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJR1FEOUFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFJQ3hnQUF5WEt4b0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBNkFmSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUJBV01BQ0d5eFdOQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBZ0FIUUR4QWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQUlDeGdBdytXS1JvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FNQUE2QWNJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJaEFVTWdPRnlSU05BZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JnQVBRREJBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JNSUNCc0J3dWFJUklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUU1BRDZBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUpoQVFOZ3VGelJDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQmdBL1FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FDQnNJQUJNRnl1YUFRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRTWdINkFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FRRmpBQUJndVZ6UUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCa0EvUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUNBc1lBQU1seXNhQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFPZ0h5QkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQVFGakFBaHNzVmpRQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdJQUIwQThRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRQ0FzWUFNUGxpa2FBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRURBQU9nSENCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNJUUZESURoY2tValFJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1lBRDBBd1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1RDQWdiQWNMbWlFU0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFREFBK2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ1lRRURZTGhjMFFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnWUFQMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFnYkNBQVRCY3JtZ0VDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVESUIrZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0VCWXdBQVlMbGMwQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdaQVAwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQWdMR0FBREpjckdnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRURvQjhnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnRUJZd0FJYkxGWTBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUNBQWRBUEVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVBZ0xHQURENVlwR2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQXdBRG9Cd2dRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWlFQlF5QTRYSkZJMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJR0FBOUFNRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRXdnSUd3SEM1b2hFZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBd0FQb0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBbUVCQTJDNFhORUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlHQUQ5QUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUlHd2dBRXdYSzVvQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkF5QWZvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQkFXTUFBR0M1WE5BSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUdRRDlBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBSUN4Z0FBeVhLeG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQTZBZklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlCQVdNQUNHeXhXTkFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQWdBSFFEeEFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFJQ3hnQXcrV0tSb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRTUFBNkFjSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSWhBVU1nT0Z5UlNOQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCZ0FQUURCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCTUlDQnNCd3VhSVJJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FNQUQ2QVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFKaEFRTmd1RnpSQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JnQS9RQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQ0JzSUFCTUZ5dWFBUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUU1nSDZBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBUUZqQUFCZ3VWelFDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQmtBL1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FDQXNZQUFNbHlzYUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRT2dIeUJBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0FRRmpBQWhzc1ZqUUFCQWdRSUVDQkFnQUFCQWdRSUVDQkFnSUFCMEE4UUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUNBc1lBTVBsaWthQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVEQUFPZ0hDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDSVFGRElEaGNrVWpRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQWdZQUQwQXdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdUQ0FnYkFjTG1pRVNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRURBQStnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNZUUVEWUxoYzBRZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1lBUDBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBZ2JDQUFUQmNybWdFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFRElCK2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdFQll3QUFZTGxjMEFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnWkFQMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUFnTEdBQURKY3JHZ0VDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVEb0I4Z1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ0VCWXdBSWJMRlkwQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUlDQUFkQVBFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQWdMR0FERDVZcEdnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQkF3QURvQndnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFpRUJReUE0WEpGSTBDQUFBRUNCQWdRSUVDQUFBRUNCQWdRSUdBQTlBTUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUV3Z0lHd0hDNW9oRWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNCQXdBUG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQW1FQkEyQzRYTkVJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJR0FEOUFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFJR3dnQUV3WEs1b0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBeUFmb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUJBV01BQUdDNVhOQUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlHUUQ5QWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQUlDeGdBQXlYS3hvQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkE2QWZJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJQkFXTUFDR3l4V05BQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FnQUhRRHhBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBSUN4Z0F3K1dLUm1QNnN3QUFBQVRlU1VSQlZJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FNQUE2QWNJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJaEFVTWdPRnlSU05BZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JnQVBRREJBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ0JNSUNCc0J3dWFJUklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUU1BRDZBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFBUUpoQVFOZ3VGelJDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQmdBL1FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FDQnNJQUJNRnl1YUFRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRTWdINkFBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQ0FRRmpBQUJndVZ6UUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRUNCa0EvUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnUUNBc1lBQU1seXNhQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFPZ0h5QkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVDQVFGakFBaHNzVmpRQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdJQUIwQThRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWdRQ0FzWUFNUGxpa2FBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRURBQU9nSENCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRUNJUUZESURoY2tValFJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1lBRDBBd1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBZ1RDQWdiQWNMbWlFU0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFREFBK2dFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUFFQ1lRRURZTGhjMFFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnWUFQMEFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQUFnYkNBQVRCY3JtZ0VDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUVESUIrZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBZ0VCWXdBQVlMbGMwQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdaQVAwQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlFQWdMR0FBREpjckdnRUNCQWdRSUVDQUFBRUNCQWdRSUVDQUFBRURvQjhnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFnRUJZd0FJYkxGWTBBQVFJRUNCQWdRSUFBQVFJRUNCQWdRSUNBQWRBUEVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSUVBZ0xHQURENVlwR2dBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNCQXdBRG9Cd2dRSUVDQUFBRUNCQWdRSUVDQUFBRUNCQWlFQlF5QTRYSkZJMENBQUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJR0FBOUFNRUNCQWdRSUFBQVFJRUNCQWdRSUFBQVFJRXdnSUd3SEM1b2hFZ1FJQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBd0FQb0JBZ1FJRUNCQWdBQUJBZ1FJRUNCQWdBQUJBbUVCQTJDNFhORUlFQ0JBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlHQUQ5QUFFQ0JBZ1FJRUNBQUFFQ0JBZ1FJRUNBQUlHd2dBRXdYSzVvQkFnUUlFQ0FBQUVDQkFnUUlFQ0FBQUVDQkF5QWZvQUFBUUlFQ0JBZ1FJQUFBUUlFQ0JBZ1FJQkFXTUFBR0M1WE5BSUVDQkFnUUlBQUFRSUVDQkFnUUlBQUFRSUdRRDlBZ0FBQkFnUUlFQ0JBZ0FBQkFnUUlFQ0JBSUN4Z0FBeVhLeG9CQWdRSUVDQkFnQUFCQWdRSUVDQkFnQUFCQTZBZklFQ0FBQUVDQkFnUUlFQ0FBQUVDQkFnUUlCQVdNQUNHeXhXTkFBRUNCQWdRSUVDQUFBRUNCQWdRSUVDQWdBSFFEeEFnUUlBQUFRSUVDQkFnUUlBQUFRSUVDQkFJQ3hnQXcrV0tSb0FBQVFJRUNCQWdRSUFBQVFJRUNCQWdRTUFBNkFjSUVDQkFnQUFCQWdRSUVDQkFnQUFCQWdRSWhBVU1nT0Z5UlNOQWdBQUJBZ1FJRUNCQWdBQUJBZ1FJRUNEd0FKYzdxTHJ0ZUlZZEFBQUFBRWxGVGtTdVFtQ0MiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE4NS41LDI2My41MDQ3NGMwLC01OC4xMzkwOCAwLC0xNDkuMDM4ODkgMCwtMTc4LjQ4MzQxYzAsLTE4LjYyMDIzIDIyLjQ2NTM5LC0zOS41MjEzMyA0Mi4wNzEwOSwtMzkuNTIxMzNjMzEuMzI1ODMsMCAxMjYuOTU0MzQsMCAxODMuNTgyOTQsMGMyNS42ODQ0NCwwIDQzLjM0NTk3LDI4LjA4MDk1IDQzLjM0NTk3LDUwLjk5NTI2YzAsMjkuOTE2MTcgMCwxMDguOTczNTUgMCwxNjMuMTg0ODNjMCwzMS42NDIzNSAtMjAuNjQxNTcsNTQuODE5OTEgLTQ5LjcyMDM4LDU0LjgxOTkxYy01Ni43NDY0LDAgLTE0NS42MjM3NiwwIC0xNzUuOTMzNjQsMGMtMjAuMDkxNTYsMCAtNDMuMzQ1OTgsLTIwLjU0MDQxIC00My4zNDU5OCwtNTAuOTk1Mjd6IiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iNDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTM3OC4yNSwyMzguMjVsLTExNi41LC0xMTYuNSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjQwIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48cGF0aCBkPSJNMzc4LjI1LDEyMS43NWwtMTE2LjUsMTE2LjUiIGRhdGEtcGFwZXItZGF0YT0ieyZxdW90O2luZGV4JnF1b3Q7Om51bGx9IiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iNDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvZz48L2c+PC9zdmc+'
+ class XML {
+ constructor() {
+ this.domParser = new DOMParser()
+ }
+ /**
+ * @param {string} string
+ * @returns {{xml: null; error: string} | {xml: HTMLElement; error: null}}
+ */
+ stringToXml(string) {
+ const doc = this.domParser.parseFromString(string, 'application/xml')
+ const error = doc.querySelector('parsererror')
+ if (error) {
+ console.error(error.textContent)
+ return { xml: null, error: error.textContent }
+ }
+ return { xml: doc.documentElement, error: null }
+ }
+ /** @param {Element} element */
+ xmlToString(element) {
+ return element.outerHTML
+ }
+
+ /** @returns {Scratch.Info} */
+ getInfo() {
+ return {
+ id: 'mbwxml',
+ name: 'XML',
+ color1: '#ba48a3',
+ color2:'#ba48a3',
+ color2:'#ba48a3',
+ menuIconURI:xmlIcon,
+ blockIconURI:xmlIcon,
+ blocks: [
+ // For translations:
+ // - Block text should be translated
+ // - Default XML and attributes should NOT be translated because we can't expect translators
+ // to know how to write valid XML in their language.
+ {
+ opcode: 'isValid',
+ blockType: Scratch.BlockType.BOOLEAN,
+ text: Scratch.translate('is [MAYBE_XML] valid XML?'),
+ arguments: {
+ MAYBE_XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'errorMessage',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('error message of [MAYBE_XML]'),
+ arguments: {
+ MAYBE_XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ '---',
+ {
+ opcode: 'tagName',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('tag name of [XML]'),
+ arguments: {
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'textContent',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('text of [XML]'),
+ arguments: {
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'world'
+ }
+ }
+ },
+ {
+ opcode: 'setTextContent',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('set text of [XML] to [VALUE]'),
+ arguments: {
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'world'
+ },
+ VALUE: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'world!'
+ }
+ }
+ },
+ '---',
+ {
+ opcode: 'attributes',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('attributes of [XML]'),
+ arguments: {
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'hasAttribute',
+ blockType: Scratch.BlockType.BOOLEAN,
+ text: Scratch.translate('does [XML] have attribute [ATTR]?'),
+ arguments: {
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ },
+ ATTR: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'foo'
+ }
+ }
+ },
+ {
+ opcode: 'setAttribute',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('set attribute [ATTR] of [XML] to [VALUE]'),
+ arguments: {
+ ATTR: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'apple'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ },
+ VALUE: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'foo'
+ }
+ }
+ },
+ {
+ opcode: 'getAttribute',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('attribute [ATTR] of [XML]'),
+ arguments: {
+ ATTR: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'apple'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'removeAttribute',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('remove attribute [ATTR] of [XML]'),
+ arguments: {
+ ATTR: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: 'apple'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ '---',
+ {
+ opcode: 'hasChildren',
+ blockType: Scratch.BlockType.BOOLEAN,
+ text: Scratch.translate('does [XML] have children?'),
+ arguments: {
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'childrenAmount',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('children amount of [XML]'),
+ arguments: {
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'addChild',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('add child [CHILD] to [XML]'),
+ arguments: {
+ CHILD: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'replaceChild',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate(
+ 'replace child #[NO] of [XML] with [CHILD]'
+ ),
+ arguments: {
+ NO: {
+ type: Scratch.ArgumentType.NUMBER,
+ defaultValue: '2'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ },
+ CHILD: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'getChild',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('child #[NO] of [XML]'),
+ arguments: {
+ NO: {
+ type: Scratch.ArgumentType.NUMBER,
+ defaultValue: '2'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'removeChild',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('remove child #[NO] of [XML]'),
+ arguments: {
+ NO: {
+ type: Scratch.ArgumentType.NUMBER,
+ defaultValue: '2'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ '---',
+ {
+ opcode: 'querySuccessful',
+ blockType: Scratch.BlockType.BOOLEAN,
+ text: Scratch.translate('query [QUERY] on [XML] matches?'),
+ arguments: {
+ QUERY: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: '.foo'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'querySelector',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('query [QUERY] on [XML]'),
+ arguments: {
+ QUERY: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: '.foo'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ },
+ {
+ opcode: 'querySelectorAll',
+ blockType: Scratch.BlockType.REPORTER,
+ text: Scratch.translate('query all [QUERY] on [XML]'),
+ arguments: {
+ QUERY: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: '.foo'
+ },
+ XML: {
+ type: Scratch.ArgumentType.STRING,
+ defaultValue: ''
+ }
+ }
+ }
+ ]
+ }
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.MAYBE_XML
+ */
+ isValid({ MAYBE_XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(MAYBE_XML))
+ return xml !== null
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.MAYBE_XML
+ */
+ errorMessage({ MAYBE_XML }) {
+ const { xml, error } = this.stringToXml(Scratch.Cast.toString(MAYBE_XML))
+ return xml === null ? error : ''
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.XML
+ */
+ tagName({ XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ return xml.tagName
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.XML
+ */
+ textContent({ XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ return xml.textContent
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.XML
+ * @param {unknown} args.VALUE
+ */
+ setTextContent({ XML, VALUE }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ xml.textContent = VALUE
+ return this.xmlToString(xml)
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.XML
+ */
+ attributes({ XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ return JSON.stringify([...xml.attributes].map(attr => attr.name))
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.XML
+ * @param {unknown} args.ATTR
+ */
+ hasAttribute({ XML, ATTR }) {
+ return this.getAttribute({ XML, ATTR }) !== ''
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.ATTR
+ * @param {unknown} args.XML
+ * @param {unknown} args.VALUE
+ */
+ setAttribute({ ATTR, XML, VALUE }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ xml.setAttribute(
+ Scratch.Cast.toString(ATTR),
+ Scratch.Cast.toString(VALUE)
+ )
+ return this.xmlToString(xml)
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.ATTR
+ * @param {unknown} args.XML
+ */
+ getAttribute({ ATTR, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ return xml.getAttribute(Scratch.Cast.toString(ATTR)) ?? ''
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.ATTR
+ * @param {unknown} args.XML
+ */
+ removeAttribute({ ATTR, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ xml.removeAttribute(Scratch.Cast.toString(ATTR))
+ return this.xmlToString(xml)
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.XML
+ */
+ hasChildren({ XML }) {
+ return this.childrenAmount({ XML }) !== 0
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.XML
+ */
+ childrenAmount({ XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return 0
+ }
+ return xml.childElementCount
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.CHILD
+ * @param {unknown} args.XML
+ */
+ addChild({ CHILD, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ const { xml: childXML } = this.stringToXml(Scratch.Cast.toString(CHILD))
+ if (childXML === null) {
+ return this.xmlToString(xml)
+ }
+ xml.append(childXML)
+ return this.xmlToString(xml)
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.NO
+ * @param {unknown} args.XML
+ * @param {unknown} args.CHILD
+ */
+ replaceChild({ NO, XML, CHILD }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ const { xml: childXML } = this.stringToXml(Scratch.Cast.toString(CHILD))
+ if (childXML === null) {
+ return this.xmlToString(xml)
+ }
+ const originalChild =
+ xml.children[Math.floor(Scratch.Cast.toNumber(NO)) - 1]
+ if (originalChild === undefined) {
+ return this.xmlToString(xml)
+ }
+ xml.replaceChild(childXML, originalChild)
+ return this.xmlToString(xml)
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.NO
+ * @param {unknown} args.XML
+ */
+ getChild({ NO, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ const child = xml.children[Math.floor(Scratch.Cast.toNumber(NO)) - 1]
+ if (child === undefined) {
+ return ''
+ }
+ return this.xmlToString(child)
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.NO
+ * @param {unknown} args.XML
+ */
+ removeChild({ NO, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ const child = xml.children[Math.floor(Scratch.Cast.toNumber(NO)) - 1]
+ if (child === undefined) {
+ return this.xmlToString(xml)
+ }
+ xml.removeChild(child)
+ return this.xmlToString(xml)
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.QUERY
+ * @param {unknown} args.XML
+ */
+ querySuccessful({ QUERY, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ const child = xml.querySelector(Scratch.Cast.toString(QUERY))
+ return child !== null
+ }
+
+ /**
+ * @param {object} args
+ * @param {unknown} args.QUERY
+ * @param {unknown} args.XML
+ */
+ querySelector({ QUERY, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ const child = xml.querySelector(Scratch.Cast.toString(QUERY))
+ if (child === null) {
+ return ''
+ }
+ return this.xmlToString(child)
+ }
+ /**
+ * @param {object} args
+ * @param {unknown} args.QUERY
+ * @param {unknown} args.XML
+ */
+ querySelectorAll({ QUERY, XML }) {
+ const { xml } = this.stringToXml(Scratch.Cast.toString(XML))
+ if (xml === null) {
+ return ''
+ }
+ const child = xml.querySelectorAll(Scratch.Cast.toString(QUERY))
+ if (child.length === 0) {
+ return ''
+ }
+ return JSON.stringify([...child].map(this.xmlToString))
+ }
+ }
+
+ window.tempExt = {
+ Extension: XML,
+ info: {
+ name: "xml.name",
+ description: "xml.descp",
+ extensionId: "mbwxml",
+ iconURL: xmlPicture,
+ insetIconURL: xmlIcon,
+ disabled: false,
+ collaboratorList: [{
+ collaborator:Scratch.translate({ id:'_mybearworldName', default: '_mybearworldName', description: '_mybearworldName' }),
+ collaboratorURL: 'https://github.com/Procybit'
+ },
+ {
+ collaborator: Scratch.translate({ id:'_skydogName', default: '_skydogName', description: '__skydogName' }),
+ collaboratorURL: 'https://www.ccw.site/student/6200811f05660557606c8b15'
+ }
+ ],
+ },
+ l10n: {
+ "zh-cn": {
+ "xml.name": 'XML',
+ "xml.descp": "在 XML 中创建或修改值!"
+ },
+ en: {
+ "xml.name": "XML",
+ "xml.descp": "Create and extract values from XML."
+ }
+ }
+ };
+})(Scratch)