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)