From 5fcb9de8e885827c91bd2e5d6a72607cb214b401 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Tue, 12 Apr 2011 11:21:34 +0200 Subject: [PATCH 01/43] Feature #564: Added noVNC and most of the client-side code to support a VNC session from sunstone. --- src/sunstone/public/images/vnc_off.png | Bin 0 -> 849 bytes src/sunstone/public/images/vnc_on.png | Bin 0 -> 1149 bytes src/sunstone/public/js/plugins/vms-tab.js | 130 +- src/sunstone/public/vendor/noVNC/.gitignore | 5 + src/sunstone/public/vendor/noVNC/LICENSE.txt | 14 + src/sunstone/public/vendor/noVNC/README.md | 110 + .../public/vendor/noVNC/docs/LICENSE.GPL-3 | 621 ++++++ .../public/vendor/noVNC/docs/LICENSE.LGPL-3 | 165 ++ src/sunstone/public/vendor/noVNC/docs/TODO | 53 + .../public/vendor/noVNC/docs/flash_policy.txt | 4 + src/sunstone/public/vendor/noVNC/docs/links | 76 + src/sunstone/public/vendor/noVNC/docs/notes | 17 + .../public/vendor/noVNC/docs/rfb_notes | 147 ++ .../public/vendor/noVNC/docs/rfbproto-3.3.pdf | Bin 0 -> 110778 bytes .../public/vendor/noVNC/docs/rfbproto-3.7.pdf | Bin 0 -> 165552 bytes .../public/vendor/noVNC/docs/rfbproto-3.8.pdf | Bin 0 -> 143840 bytes src/sunstone/public/vendor/noVNC/favicon.ico | 1 + .../public/vendor/noVNC/images/Logo.svg | 687 ++++++ .../public/vendor/noVNC/images/favicon.ico | Bin 0 -> 1150 bytes .../public/vendor/noVNC/images/favicon.png | Bin 0 -> 453 bytes .../vendor/noVNC/images/full_512x512.png | Bin 0 -> 23962 bytes .../vendor/noVNC/images/screen_640x435.png | Bin 0 -> 20648 bytes .../public/vendor/noVNC/include/base64.js | 146 ++ .../public/vendor/noVNC/include/black.css | 124 ++ .../public/vendor/noVNC/include/canvas.js | 568 +++++ .../public/vendor/noVNC/include/des.js | 273 +++ .../public/vendor/noVNC/include/input.js | 1861 +++++++++++++++++ .../public/vendor/noVNC/include/logo.js | 1 + .../public/vendor/noVNC/include/plain.css | 97 + .../public/vendor/noVNC/include/playback.js | 90 + .../public/vendor/noVNC/include/rfb.js | 1511 +++++++++++++ .../public/vendor/noVNC/include/ui.js | 423 ++++ .../public/vendor/noVNC/include/util.js | 237 +++ .../public/vendor/noVNC/include/vnc.js | 44 + .../noVNC/include/web-socket-js/README.txt | 109 + .../include/web-socket-js/WebSocketMain.swf | Bin 0 -> 175746 bytes .../noVNC/include/web-socket-js/swfobject.js | 4 + .../noVNC/include/web-socket-js/web_socket.js | 341 +++ .../public/vendor/noVNC/include/websock.js | 323 +++ .../public/vendor/noVNC/include/webutil.js | 148 ++ .../public/vendor/noVNC/tests/arrays.html | 39 + .../public/vendor/noVNC/tests/arrays.js | 375 ++++ .../public/vendor/noVNC/tests/base64.html | 91 + .../public/vendor/noVNC/tests/base64.js | 12 + .../public/vendor/noVNC/tests/canvas.html | 148 ++ .../public/vendor/noVNC/tests/cursor.html | 135 ++ .../public/vendor/noVNC/tests/face.png | Bin 0 -> 2303 bytes .../public/vendor/noVNC/tests/face.png.js | 1 + .../public/vendor/noVNC/tests/input.html | 77 + .../public/vendor/noVNC/tests/json2graph.py | 206 ++ .../public/vendor/noVNC/tests/stats.js | 53 + .../public/vendor/noVNC/tests/vnc_perf.html | 201 ++ .../vendor/noVNC/tests/vnc_playback.html | 132 ++ .../public/vendor/noVNC/utils/Makefile | 11 + .../public/vendor/noVNC/utils/README.md | 11 + .../public/vendor/noVNC/utils/img2js.py | 40 + .../public/vendor/noVNC/utils/launch.sh | 108 + src/sunstone/public/vendor/noVNC/utils/rebind | 18 + .../public/vendor/noVNC/utils/rebind.c | 94 + src/sunstone/public/vendor/noVNC/utils/u2x11 | 28 + src/sunstone/public/vendor/noVNC/utils/web.py | 55 + .../public/vendor/noVNC/utils/websocket.py | 445 ++++ .../public/vendor/noVNC/utils/websockify | 311 +++ .../public/vendor/noVNC/utils/wsproxy.py | 1 + src/sunstone/public/vendor/noVNC/vnc.html | 31 + .../public/vendor/noVNC/vnc_auto.html | 117 ++ src/sunstone/templates/index.html | 5 +- 67 files changed, 11067 insertions(+), 8 deletions(-) create mode 100644 src/sunstone/public/images/vnc_off.png create mode 100644 src/sunstone/public/images/vnc_on.png create mode 100644 src/sunstone/public/vendor/noVNC/.gitignore create mode 100644 src/sunstone/public/vendor/noVNC/LICENSE.txt create mode 100644 src/sunstone/public/vendor/noVNC/README.md create mode 100644 src/sunstone/public/vendor/noVNC/docs/LICENSE.GPL-3 create mode 100644 src/sunstone/public/vendor/noVNC/docs/LICENSE.LGPL-3 create mode 100644 src/sunstone/public/vendor/noVNC/docs/TODO create mode 100644 src/sunstone/public/vendor/noVNC/docs/flash_policy.txt create mode 100644 src/sunstone/public/vendor/noVNC/docs/links create mode 100644 src/sunstone/public/vendor/noVNC/docs/notes create mode 100644 src/sunstone/public/vendor/noVNC/docs/rfb_notes create mode 100644 src/sunstone/public/vendor/noVNC/docs/rfbproto-3.3.pdf create mode 100644 src/sunstone/public/vendor/noVNC/docs/rfbproto-3.7.pdf create mode 100644 src/sunstone/public/vendor/noVNC/docs/rfbproto-3.8.pdf create mode 120000 src/sunstone/public/vendor/noVNC/favicon.ico create mode 100644 src/sunstone/public/vendor/noVNC/images/Logo.svg create mode 100644 src/sunstone/public/vendor/noVNC/images/favicon.ico create mode 100644 src/sunstone/public/vendor/noVNC/images/favicon.png create mode 100644 src/sunstone/public/vendor/noVNC/images/full_512x512.png create mode 100644 src/sunstone/public/vendor/noVNC/images/screen_640x435.png create mode 100644 src/sunstone/public/vendor/noVNC/include/base64.js create mode 100644 src/sunstone/public/vendor/noVNC/include/black.css create mode 100644 src/sunstone/public/vendor/noVNC/include/canvas.js create mode 100644 src/sunstone/public/vendor/noVNC/include/des.js create mode 100644 src/sunstone/public/vendor/noVNC/include/input.js create mode 100644 src/sunstone/public/vendor/noVNC/include/logo.js create mode 100644 src/sunstone/public/vendor/noVNC/include/plain.css create mode 100644 src/sunstone/public/vendor/noVNC/include/playback.js create mode 100644 src/sunstone/public/vendor/noVNC/include/rfb.js create mode 100644 src/sunstone/public/vendor/noVNC/include/ui.js create mode 100644 src/sunstone/public/vendor/noVNC/include/util.js create mode 100644 src/sunstone/public/vendor/noVNC/include/vnc.js create mode 100644 src/sunstone/public/vendor/noVNC/include/web-socket-js/README.txt create mode 100644 src/sunstone/public/vendor/noVNC/include/web-socket-js/WebSocketMain.swf create mode 100644 src/sunstone/public/vendor/noVNC/include/web-socket-js/swfobject.js create mode 100755 src/sunstone/public/vendor/noVNC/include/web-socket-js/web_socket.js create mode 100644 src/sunstone/public/vendor/noVNC/include/websock.js create mode 100644 src/sunstone/public/vendor/noVNC/include/webutil.js create mode 100644 src/sunstone/public/vendor/noVNC/tests/arrays.html create mode 100644 src/sunstone/public/vendor/noVNC/tests/arrays.js create mode 100644 src/sunstone/public/vendor/noVNC/tests/base64.html create mode 100644 src/sunstone/public/vendor/noVNC/tests/base64.js create mode 100644 src/sunstone/public/vendor/noVNC/tests/canvas.html create mode 100644 src/sunstone/public/vendor/noVNC/tests/cursor.html create mode 100644 src/sunstone/public/vendor/noVNC/tests/face.png create mode 100644 src/sunstone/public/vendor/noVNC/tests/face.png.js create mode 100644 src/sunstone/public/vendor/noVNC/tests/input.html create mode 100755 src/sunstone/public/vendor/noVNC/tests/json2graph.py create mode 100644 src/sunstone/public/vendor/noVNC/tests/stats.js create mode 100644 src/sunstone/public/vendor/noVNC/tests/vnc_perf.html create mode 100644 src/sunstone/public/vendor/noVNC/tests/vnc_playback.html create mode 100644 src/sunstone/public/vendor/noVNC/utils/Makefile create mode 100644 src/sunstone/public/vendor/noVNC/utils/README.md create mode 100755 src/sunstone/public/vendor/noVNC/utils/img2js.py create mode 100755 src/sunstone/public/vendor/noVNC/utils/launch.sh create mode 100755 src/sunstone/public/vendor/noVNC/utils/rebind create mode 100644 src/sunstone/public/vendor/noVNC/utils/rebind.c create mode 100755 src/sunstone/public/vendor/noVNC/utils/u2x11 create mode 100755 src/sunstone/public/vendor/noVNC/utils/web.py create mode 100755 src/sunstone/public/vendor/noVNC/utils/websocket.py create mode 100755 src/sunstone/public/vendor/noVNC/utils/websockify create mode 120000 src/sunstone/public/vendor/noVNC/utils/wsproxy.py create mode 100644 src/sunstone/public/vendor/noVNC/vnc.html create mode 100644 src/sunstone/public/vendor/noVNC/vnc_auto.html diff --git a/src/sunstone/public/images/vnc_off.png b/src/sunstone/public/images/vnc_off.png new file mode 100644 index 0000000000000000000000000000000000000000..1ef79716a021bde5ee9f525e75fd0ce9b7da5e05 GIT binary patch literal 849 zcmV-X1FrmuP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L011Qu011Qvs^VjL00007bV*G`2ipV- z3?LJZjQf=U00PlTL_t(I%e7U_Y8*!p{;I2c|6)cGf{-{MOs+WyWFvwRlFz#BJr9s4 z$TNhzLyjTGJ<3Pf(m@y^EHL*-b_EthSN$K%QcP`GZdflJNZkhNF`u{8WoUVkl_46DxLt~tHHcsu(jU&wyn3;frk&Opy2@^ znW69j(h~M<*;)rKKeq3Cy&k^o%@6@NGXnt#B48qz8UC3M8eZ0c8YSg;!W#fng%^Q|fQXRiIYJ2N_xo;lch>-5G#b(7=H}1Nxu446^!s=`{$V&A zww4aPc=^)UImFov53&pfKvWRt5eEkcbb5OFEi?ZJ;Cld1Q%YR&XhihNIrmCcf8E>L zyJ!F(zc`+I_F*~l%nTv|QHgOLA7)whClRf+)$X#9%xqp1#pC_`{Wn#EJUe*SDT?B^ z$z+17t1DbzU!y3BUnb*8cRHQ^7h@cylxA&>RL*P>k>}It^lIe=IXXI86V*pawd=hf z6VbcF!^3IGZSdZIGZ+k>gb==S&aDvbXL~00000NkvXXu0mjfMyQL& literal 0 HcmV?d00001 diff --git a/src/sunstone/public/images/vnc_on.png b/src/sunstone/public/images/vnc_on.png new file mode 100644 index 0000000000000000000000000000000000000000..3386dcc01c21249b62c5ae3dda5108d9c774617b GIT binary patch literal 1149 zcmV-@1cLjCP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L011Qu011Qvs^VjL00007bV*G`2ipV- z3N>e>8meEAsjLWnI@N48uUzb#z^)SJpHQ04XI> zN=l^?<#L&A+qMynMiD|FgvcA41e=(ip2oIqR##W4)oKVK2!%pKA`u1#2KtPP#UhnT zh3(t7lTN1z27??wetg1EN*Mq?pU(qOO3`Yy2u64C>xBy_r2wec>ntrT0k9<;A)Xqe zS*uW~Q~;<{DnwGdz_w9JVa$E~l^q|68?&>s?Ay1GMx#Ny-R9!CZy#E}^=5NT<`>Hcdw2agoC) z%;)2kA6`HRf#Em~2tmkc6VQAJAqWHl01SnOfm)yQQ10)nJ$tS1U$t5VKnQ{6I4+*& zA*Dnqg%E<}<>hX+t9Kt+7U{VU=q?>8;CUXJ>$cUA%sBoFhNR* zrfI|yW9Qfn|6-a)I?Len%1DJ4So zQ_L_7CU!o~-t10H(^tj~>*L88~by7EfrG4WDhTqROXU;IbdlzrM z{)U!FB-92?Po6yaaX1`)x7ln`tyaIBo}NAe$jy)qyKS?!bqmGOCy=9~Bn^W@ZyhFo zIPt};Teqyf4l=oaf5AnH)WM z@ZhuKMemory\ Hostname\ Start Time\ + VNC Access\ \ \ \ @@ -496,6 +497,7 @@ var create_vm_tmpl = var vmachine_list_json = {}; var dataTable_vMachines; +var rfb; var vm_actions = { "VM.create" : { @@ -720,10 +722,12 @@ var vm_actions = { var colored_log = ''; for (line in log_lines){ line = log_lines[line]; - if (line.match(/\[E\]/)){ - line = ''+line+'' + if (typeof line == "string") { + if (line.match(/\[E\]/)){ + line = ''+line+'' + } + colored_log += line + "\n"; } - colored_log += line + "\n"; } var log_tab = { title: "VM log", @@ -902,6 +906,8 @@ function vMachineElementArray(vm_json){ if (state == "ACTIVE") { state = OpenNebula.Helper.resource_state("vm_lcm",vm.LCM_STATE); } + + return [ '', vm.ID, @@ -911,7 +917,8 @@ function vMachineElementArray(vm_json){ vm.CPU, humanize_size(vm.MEMORY), vm.HISTORY ? vm.HISTORY.HOSTNAME : "--", - str_start_time(vm) + str_start_time(vm), + vncIcon(vm) ] } @@ -920,7 +927,7 @@ function vMachineElementArray(vm_json){ function vMachineInfoListener(){ $('#tbodyvmachines tr').live("click", function(e){ - if ($(e.target).is('input')) {return true;} + if ($(e.target).is('input') || $(e.target).is('a img')) {return true;} popDialogLoading(); var aData = dataTable_vMachines.fnGetData(this); var id = $(aData[0]).val(); @@ -1019,6 +1026,10 @@ function updateVMInfo(request,vm){ Used CPU\ '+vm_info.CPU+'\ \ + \ + VNC Session\ + '+vncIcon(vm_info)+'\ + \ ' } @@ -1936,6 +1947,110 @@ function setVMAutorefresh(){ },INTERVAL+someTime()); //so that not all refreshing is done at the same time } +//setups VNC application +function setupVNC(){ + + var updateVNCState = function updateState(rfb, state, oldstate, msg) { + var s, sb, cad, klass; + s = $D('VNC_status'); + sb = $D('VNC_status_bar'); + cad = $D('sendCtrlAltDelButton'); + switch (state) { + case 'failed': + case 'fatal': + klass = "VNC_status_error"; + break; + case 'normal': + klass = "VNC_status_normal"; + break; + case 'disconnected': + case 'loaded': + klass = "VNC_status_normal"; + break; + case 'password': + klass = "VNC_status_warn"; + break; + default: + klass = "VNC_status_warn"; + } + + if (state === "normal") { cad.disabled = false; } + else { cad.disabled = true; } + + if (typeof(msg) !== 'undefined') { + sb.setAttribute("class", klass); + s.innerHTML = msg; + } + } + + //Append to DOM + $('div#dialogs').append('
'); + + $('#vnc_dialog').html('\ +
\ + \ + \ + \ +
Loading
\ + \ +
\ +
\ + \ + Canvas not supported.\ + \ + '); + + $('#sendCtrlAltDelButton').click(function(){ + rfb.sendCtrlAltDel(); + return false; + }); + + $('#vnc_dialog').dialog({ + autoOpen:false, + width:700, + modal:true, + height:500, + resizable:true, + }); + + $('.vnc').live("click",function(){ + rfb = new RFB({'target': $D('VNC_canvas'), + 'encrypt': false, + 'true_color': true, + 'local_cursor': true, + 'shared': true, + 'updateState': updateVNCState}); + //fetch things from clicked element host - port - password + var port=$(this).attr("vnc_port"); + var pw=$(this).attr("vnc_pw"); + rfb.connect(host, port, pw); + + $('#vnc_dialog').dialog('open'); + + + }); + +} + +function vncIcon(vm){ + var graphics = vm.TEMPLATE.GRAPHICS; + var state = OpenNebula.Helper.resource_state("vm",vm.STATE); + var gr_icon, host, port, password; + if (graphics && graphics.TYPE == "vnc" && state == "ACTIVE" && vm.HISTORY.HOSTNAME){ + host = vm.HISTORY.HOSTNAME; + port = graphics.PORT ? graphics.PORT : ""; + password = graphics.PASSWD ? graphics.PASSWD : ""; + gr_icon = ''; + gr_icon += 'Open VNC Session'; + } + else { + gr_icon = 'VNC Disabled'; + } + return gr_icon; + +} + // At this point the DOM is ready and the sunstone.js ready() has been run. $(document).ready(function(){ @@ -1947,7 +2062,7 @@ $(document).ready(function(){ "aoColumnDefs": [ { "bSortable": false, "aTargets": ["check"] }, { "sWidth": "60px", "aTargets": [0] }, - { "sWidth": "35px", "aTargets": [1] }, + { "sWidth": "35px", "aTargets": [1,9] }, { "sWidth": "100px", "aTargets": [2] } ] }); @@ -1955,12 +2070,13 @@ $(document).ready(function(){ dataTable_vMachines.fnClearTable(); addElement([ spinner, - '','','','','','','',''],dataTable_vMachines); + '','','','','','','','',''],dataTable_vMachines); Sunstone.runAction("VM.list"); setupCreateVMDialog(); setupSaveasDialog(); setVMAutorefresh(); + setupVNC(); initCheckAllBoxes(dataTable_vMachines); tableCheckboxesListener(dataTable_vMachines); diff --git a/src/sunstone/public/vendor/noVNC/.gitignore b/src/sunstone/public/vendor/noVNC/.gitignore new file mode 100644 index 0000000000..ed07c1ab02 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/.gitignore @@ -0,0 +1,5 @@ +*.pyc +*.o +wsproxy +tests/data_*.js +utils/rebind.so diff --git a/src/sunstone/public/vendor/noVNC/LICENSE.txt b/src/sunstone/public/vendor/noVNC/LICENSE.txt new file mode 100644 index 0000000000..62213ec7dc --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/LICENSE.txt @@ -0,0 +1,14 @@ +noVNC is licensed under the LGPL version 3 (see docs/LICENSE.GPL-3 and +docs/LICENSE.LGPL-3) with the following exceptions: + + include/base64.js : Dual GPL-2 or LGPL-2.1 + + incluee/des.js : Various BSD style licenses + + include/web-socket-js/ : New BSD license. Source code at + http://github.com/gimite/web-socket-js + + images/ : Creative Commons Attribution-ShareAlike + http://creativecommons.org/licenses/by-sa/3.0/ + Uses of the work must be attributed + to the noVNC project. diff --git a/src/sunstone/public/vendor/noVNC/README.md b/src/sunstone/public/vendor/noVNC/README.md new file mode 100644 index 0000000000..ce7a9f92df --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/README.md @@ -0,0 +1,110 @@ +## noVNC: HTML5 VNC Client + + +### Description + +noVNC is a VNC client implemented using HTML5 technologies, +specifically Canvas and WebSockets (supports 'wss://' encryption). +noVNC is licensed under the +[LGPLv3](http://www.gnu.org/licenses/lgpl.html). + +Special thanks to [Sentry Data Systems](http://www.sentryds.com) for +sponsoring ongoing development of this project (and for employing me). + +Notable commits, announcements and news are posted to +@noVNC + + +### Screenshots + +Running in Chrome before and after connecting: + +  + +See more screenshots here. + + +### Projects/Companies using noVNC + +* [Sentry Data Systems](http://www.sentryds.com): uses noVNC in the + [Datanex Cloud Computing Platform](http://www.sentryds.com/products/datanex/). + +* [Ganeti Web Manager](http://code.osuosl.org/projects/ganeti-webmgr): + Feature [#1935](http://code.osuosl.org/issues/1935). + +* [Archipel](http://archipelproject.org): + [Video demo](http://antoinemercadal.fr/archipelblog/wp-content/themes/ArchipelWPTemplate/video_youtube.php?title=VNC%20Demonstration&id=te_bzW574Zo) + +* [openQRM](http://www.openqrm.com/): VNC plugin available + by request. Probably included in [version + 4.8](http://www.openqrm.com/?q=node/15). [Video + demo](http://www.openqrm-enterprise.com/news/details/article/remote-vm-console-plugin-available.html). + +* [OpenNode](http://www.opennodecloud.com/): uses noVNC in + [OpenNode Management Console](http://opennode.activesys.org/about/software-included-in-opennode/). + [OMC Screencast](http://opennode.activesys.org/about/opennode-management-console-screencast/). + +### Browser Requirements + +* HTML5 Canvas: Except for Internet Explorer, most + browsers have had Canvas support for quite some time. Internet + Explorer 9 will have Canvas support (finally). + +* HTML5 WebSockets: For browsers that do not have builtin + WebSockets support, the project includes + web-socket-js, + a WebSockets emulator using Adobe Flash. + +* Fast Javascript Engine: noVNC avoids using new Javascript + functionality so it will run on older browsers, but decode and + rendering happen in Javascript, so a slow Javascript engine will + mean noVNC is painfully slow. + +* I maintain a more detailed list of browser compatibility here. + + +### Server Requirements + +Unless you are using a VNC server with support for WebSockets +connections (only my [fork of libvncserver](http://github.com/kanaka/libvncserver) +currently), you need to use a WebSockets to TCP socket proxy. There is +a python proxy included ('websockify'). One advantage of using the +proxy is that it has builtin support for SSL/TLS encryption (i.e. +"wss://"). + +There a few reasons why a proxy is required: + + 1. WebSockets is not a pure socket protocol. There is an initial HTTP + like handshake to allow easy hand-off by web servers and allow + some origin policy exchange. Also, each WebSockets frame begins + with 0 ('\x00') and ends with 255 ('\xff'). + + 2. Javascript itself does not have the ability to handle pure byte + arrays. The python proxy encodes the data as base64 so that the + Javascript client can decode the data as an integer array. + + +### Quick Start + +* Use the launch script to start a mini-webserver and the WebSockets + proxy (websockify). The `--vnc` option is used to specify the location of + a running VNC server: + + `./utils/launch.sh --vnc localhost:5901` + +* Point your browser to the cut-and-paste URL that is output by the + launch script. Enter a password if the VNC server has one + configured. Hit the Connect button and enjoy! + + +### Other Pages + +* [Advanced Usage](wiki/Advanced-usage). Generating an SSL + certificate, starting a VNC server, advanced websockify usage, etc. + +* [Integrating noVNC](wiki/Integration) into existing projects. + +* [Troubleshooting noVNC](wiki/Troubleshooting) problems. + + diff --git a/src/sunstone/public/vendor/noVNC/docs/LICENSE.GPL-3 b/src/sunstone/public/vendor/noVNC/docs/LICENSE.GPL-3 new file mode 100644 index 0000000000..94a0453222 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/docs/LICENSE.GPL-3 @@ -0,0 +1,621 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS diff --git a/src/sunstone/public/vendor/noVNC/docs/LICENSE.LGPL-3 b/src/sunstone/public/vendor/noVNC/docs/LICENSE.LGPL-3 new file mode 100644 index 0000000000..65c5ca88a6 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/docs/LICENSE.LGPL-3 @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/src/sunstone/public/vendor/noVNC/docs/TODO b/src/sunstone/public/vendor/noVNC/docs/TODO new file mode 100644 index 0000000000..9cb51be166 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/docs/TODO @@ -0,0 +1,53 @@ +Short Term: + +- Test normal arrays vs TypedArrays vs imageData arrays. + - Blog post about it. + +- VNC performance and regression playback suite. + - WebSockets + - expand latency test + - add absolute timers (every 500 packets) + - try 1 ms delay + - stop at 4000 packets + - small and large packets test + + - JavaScript + - just base64 decode + - everything except Canvas + + - Full test + - Without WebSockets + - With replay from python tester + - add higher-resolution multi test + + - websockify test with echo and playback functionality + - choosen by client test page on connect + + +- Keyboard layout/internationalization support + - convert keyCode into proper charCode + +- IE 9 improvements. + - https://github.com/gimite/web-socket-js/issues#issue/41 + - try window.atob instead of decode for better performance + +- Status bar menu/buttons: + - Explanatory hover text over buttons + + - Configuration menu: + - Tunable: speed vs. bandwidth selection + - Tunable: CPU use versus latency. + - Scaling + + - Keyboard menu: + - Ctrl Lock, Alt Lock, SysRq Lock + - Highlight menu icon when keys are locked + + - Clipboard button -> popup: + - text, clear and send buttons + +Medium Term: + +- Viewport support + +- Touchscreen testing/support. diff --git a/src/sunstone/public/vendor/noVNC/docs/flash_policy.txt b/src/sunstone/public/vendor/noVNC/docs/flash_policy.txt new file mode 100644 index 0000000000..df325c0ddf --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/docs/flash_policy.txt @@ -0,0 +1,4 @@ +Manual setup: + +DATA="echo \'\'" +/usr/bin/socat -T 1 TCP-L:843,reuseaddr,fork,crlf SYSTEM:"$DATA" diff --git a/src/sunstone/public/vendor/noVNC/docs/links b/src/sunstone/public/vendor/noVNC/docs/links new file mode 100644 index 0000000000..31544ce0e1 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/docs/links @@ -0,0 +1,76 @@ +New tight PNG protocol: + http://wiki.qemu.org/VNC_Tight_PNG + http://xf.iksaif.net/blog/index.php?post/2010/06/14/QEMU:-Tight-PNG-and-some-profiling + +RFB protocol and extensions: + http://tigervnc.org/cgi-bin/rfbproto + +Canvas Browser Compatibility: + http://philip.html5.org/tests/canvas/suite/tests/results.html + +WebSockets API standard: + http://www.whatwg.org/specs/web-apps/current-work/complete.html#websocket + http://dev.w3.org/html5/websockets/ + http://www.ietf.org/id/draft-ietf-hybi-thewebsocketprotocol-00.txt + +Browser Keyboard Events detailed: + http://unixpapa.com/js/key.html + +ActionScript (Flash) WebSocket implementation: + http://github.com/gimite/web-socket-js + +ActionScript (Flash) crypto/TLS library: + http://code.google.com/p/as3crypto + http://github.com/lyokato/as3crypto_patched + +TLS Protocol: + http://en.wikipedia.org/wiki/Transport_Layer_Security + +Generate self-signed certificate: + http://docs.python.org/dev/library/ssl.html#certificates + +Cursor appearance/style (for Cursor pseudo-encoding): + http://en.wikipedia.org/wiki/ICO_(file_format) + http://www.daubnet.com/en/file-format-cur + https://developer.mozilla.org/en/Using_URL_values_for_the_cursor_property + http://www.fileformat.info/format/bmp/egff.htm + +Icon/Cursor file format: + http://msdn.microsoft.com/en-us/library/ms997538 + http://msdn.microsoft.com/en-us/library/aa921550.aspx + http://msdn.microsoft.com/en-us/library/aa930622.aspx + + +RDP Protocol specification: + http://msdn.microsoft.com/en-us/library/cc240445(v=PROT.10).aspx + + +Related projects: + + guacamole: http://guacamole.sourceforge.net/ + + - Web client, but Java servlet does pre-processing + + jsvnc: http://code.google.com/p/jsvnc/ + + - No releases + + webvnc: http://code.google.com/p/webvnc/ + + - Jetty web server gateway, no updates since April 2008. + + RealVNC Java applet: http://www.realvnc.com/support/javavncviewer.html + + - Java applet + + Flashlight-VNC: http://www.wizhelp.com/flashlight-vnc/ + + - Adobe Flash implementation + + FVNC: http://osflash.org/fvnc + + - Adbove Flash implementation + + CanVNC: http://canvnc.sourceforge.net/ + + - HTML client with REST to VNC python proxy. Mostly vapor. diff --git a/src/sunstone/public/vendor/noVNC/docs/notes b/src/sunstone/public/vendor/noVNC/docs/notes new file mode 100644 index 0000000000..b3cc0cfb17 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/docs/notes @@ -0,0 +1,17 @@ +Some implementation notes: + +There is an included flash object (web-socket-js) that is used to +emulate websocket support on browsers without websocket support +(currently only Chrome has WebSocket support). + +Javascript doesn't have a bytearray type, so what you get out of +a WebSocket object is just Javascript strings. Javascript has UTF-16 +unicode strings and anything sent through the WebSocket gets converted +to UTF-8 and vice-versa. So, one additional (and necessary) function +of wsproxy is base64 encoding/decoding what is sent to/from the +browser. + +Building web-socket-js emulator: + +cd include/web-socket-js/flash-src +mxmlc -static-link-runtime-shared-libraries WebSocketMain.as diff --git a/src/sunstone/public/vendor/noVNC/docs/rfb_notes b/src/sunstone/public/vendor/noVNC/docs/rfb_notes new file mode 100644 index 0000000000..643e16c01e --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/docs/rfb_notes @@ -0,0 +1,147 @@ +5.1.1 ProtocolVersion: 12, 12 bytes + + - Sent by server, max supported + 12 ascii - "RFB 003.008\n" + - Response by client, version to use + 12 ascii - "RFB 003.003\n" + +5.1.2 Authentication: >=4, [16, 4] bytes + + - Sent by server + CARD32 - authentication-scheme + 0 - connection failed + CARD32 - length + length - reason + 1 - no authentication + + 2 - VNC authentication + 16 CARD8 - challenge (random bytes) + + - Response by client (if VNC authentication) + 16 CARD8 - client encrypts the challenge with DES, using user + password as key, sends resulting 16 byte response + + - Response by server (if VNC authentication) + CARD32 - 0 - OK + 1 - failed + 2 - too-many + +5.1.3 ClientInitialisation: 1 byte + - Sent by client + CARD8 - shared-flag, 0 exclusive, non-zero shared + +5.1.4 ServerInitialisation: >=24 bytes + - Sent by server + CARD16 - framebuffer-width + CARD16 - framebuffer-height + 16 byte PIXEL_FORMAT - server-pixel-format + CARD8 - bits-per-pixel + CARD8 - depth + CARD8 - big-endian-flag, non-zero is big endian + CARD8 - true-color-flag, non-zero then next 6 apply + CARD16 - red-max + CARD16 - green-max + CARD16 - blue-max + CARD8 - red-shift + CARD8 - green-shift + CARD8 - blue-shift + 3 bytes - padding + CARD32 - name-length + + CARD8[length] - name-string + + + +Client to Server Messages: + +5.2.1 SetPixelFormat: 20 bytes + CARD8: 0 - message-type + ... + +5.2.2 FixColourMapEntries: >=6 bytes + CARD8: 1 - message-type + ... + +5.2.3 SetEncodings: >=8 bytes + CARD8: 2 - message-type + CARD8 - padding + CARD16 - numer-of-encodings + + CARD32 - encoding-type in preference order + 0 - raw + 1 - copy-rectangle + 2 - RRE + 4 - CoRRE + 5 - hextile + +5.2.4 FramebufferUpdateRequest (10 bytes) + CARD8: 3 - message-type + CARD8 - incremental (0 for full-update, non-zero for incremental) + CARD16 - x-position + CARD16 - y-position + CARD16 - width + CARD16 - height + + +5.2.5 KeyEvent: 8 bytes + CARD8: 4 - message-type + CARD8 - down-flag + 2 bytes - padding + CARD32 - key (X-Windows keysym values) + +5.2.6 PointerEvent: 6 bytes + CARD8: 5 - message-type + CARD8 - button-mask + CARD16 - x-position + CARD16 - y-position + +5.2.7 ClientCutText: >=9 bytes + CARD8: 6 - message-type + ... + + +Server to Client Messages: + +5.3.1 FramebufferUpdate + CARD8: 0 - message-type + 1 byte - padding + CARD16 - number-of-rectangles + + CARD16 - x-position + CARD16 - y-position + CARD16 - width + CARD16 - height + CARD16 - encoding-type: + 0 - raw + 1 - copy rectangle + 2 - RRE + 4 - CoRRE + 5 - hextile + + raw: + - width x height pixel values + + copy rectangle: + CARD16 - src-x-position + CARD16 - src-y-position + + RRE: + CARD32 - N number-of-subrectangles + Nxd bytes - background-pixel-value (d bits-per-pixel) + + ... + +5.3.2 SetColourMapEntries (no support) + CARD8: 1 - message-type + ... + +5.3.3 Bell + CARD8: 2 - message-type + +5.3.4 ServerCutText + CARD8: 3 - message-type + + + + + diff --git a/src/sunstone/public/vendor/noVNC/docs/rfbproto-3.3.pdf b/src/sunstone/public/vendor/noVNC/docs/rfbproto-3.3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..56b876436a9b18e3fbc0001efa9c3dba498e3558 GIT binary patch literal 110778 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
  • soRRg(4fNFaOUHNL^!mU2PjY+6DhGfn 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 UdT@3HIk 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 literal 0 HcmV?d00001 diff --git a/src/sunstone/public/vendor/noVNC/docs/rfbproto-3.8.pdf b/src/sunstone/public/vendor/noVNC/docs/rfbproto-3.8.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8f0730fb7f947147e53d2a3eadd453408ab0ff05 GIT binary patch literal 143840 zcma&NQ;=xOvIW|7&WqD z&YYz3!lJZ{bSzM$BbPDxP^<(D1h$42P&_>J(k3=$PQMA*es&b;Ma`|8OdJU4MXd~+ zOoUC0Y>iELd7&Jg983(Xq1-aBG$kC3Sz&nXF7)nX6Y)j(XeKhE8LWT@(Axh1+d)V` z=s2Op<0bpXbUJC(ygQpJ_9BEYE-G*O)YF_L7`wj~EdV=leOCC&(V5=h1Ydu+6nDhD ze7|0%U>XNhe{r^*Zfh|pToS;5WnQ51O^@rJMur8#Hb3}(YhI$EH`p%a=P-Nz)sK2B zTj3d1x;?MV!Il!@uZTtphJ)h~el&P9pos^3)XmESIG399c1&6mCMj7?>kxn`tj2mq zwyC!h)_tmmVvG&BLC-;<)h9S1utWsI?>sv`1*@WTiCCcFT?d>~cTT|IH1m?5m|W0j zIcI||t^%Csx9W&_P{x~$ZLchkR}eEi3?q>E1Gq?If_pYPNKnFKjp8s~vFzPuO?K2< zD?#k!$iG~B>fl6HocK_gt~}FLhWmS@*NbjljtWiuTqB#WU7SRP7k4Tra^i5?EhCaU zhQ-fW{jg3RKtz~_1(c7C+(bTeAv#a!*=s;FUzsk;-* zWs3=c-ya}sF64vKcQ?(rgym1AeHfwnH;sLmIZ&J_@Af&Ca#zWPw$kk@|1E6))v%U< zZ7VWulrUnfF}2YLA?6M1xW0PYY?iC&3@o5@rb*jJNR$NUphm6clPXH-4;?+Qd^lyV zFs>PM03%uUVJ6<++&G=l864iku=ZA3PRMn?LQwqJKwAtp^dEaptO%z#DFEk*3WRm| zWeVhx^SHy?4LyRZY{l&lfa9O2qVo->pUBV+;egF(Q8|r;$69g7Q{qL`d(o}SFP2d- z1@9>k$Dhi%lDE$p2}MoTIkW-;m6{?yD^S4scO`}S$BpOpA>RX3hr5}$u}SNZaHMI9 z7ZPOF$A|%NR}%rH1r!%@37s7Aku^l_B{YN(0!|WhlnfXkSL^u!mRQN9gu6{AyyG_t z*~qc;**JxYDLdl!diRrxwRkdUx8GC+_{a?}f0dSmg)FV#r8}jW*kff?O~NW1j<%f< zGEH_LvRjYk27-vZ-w8%fRisAEts-U=;n0#x5fNtuSDrj_Y=B~$KlMzVa8>~6W(b<3 z6Wx?>MzN-=wQ1!oHlbKKZ?@pGP9de%OBUE~>npGwg~in?##Hzysz`L7-&7JOuIQO0tRJxH-TX z;UIU*T1#{Z0c3;Sts(6N!iodbgW#P9O}3=Vpn2&;{H#&G_77_SjDPZP?EK|L8UNBk zxYk`*Zq?Hoe@FRR=>{8>&G-5OQ3-&CsU8iDP#nNG`jAp$vY>j^gH?KTI8h;j|NFL3 zL1MDzUE=t4bP#6li=5F-e_y&SsLd$P#dMyy82x-kOM#uPhP3)2bTnhLM`BNm!L@gD zZSltB8qviN)@QpGnSqxQTP{+yE5j2Pi!c1Hsd8jSbI5D0yyQ`F(J0?o@5ZK|r_KNU zdk5h9x>+wfw~q9*gy>*gX4at#<&Pfia|`E@lNBXCFz_1Z4twq00_e7blPFQNLU#Dp?5aNpPZxGSaLX<*vKf^8&Q4aI*h^PGorJ1J z&yzm*JR9En9-b_M6&7BH79SsjCohA2@hrvY{BxP={^rvOy(`z zfomsm&TPXR-Qb(ItHliQ4F`%*L+psycj|3Smd+D+#F`rO#I8%v6u;I6AOak(3wq`` zEsW1bUAnjTEhc2@G%QL$#62#gAAY0+&LqM-=ch>b?h>#TAgm3XJ+aXdV@xA(0NKWr zeJI!Ic~y?_N7hPS=JGQ4xRcJ<5MWWpX2T}zS@U=Ea%5k*?OW-BCv4&lXo$0WO&`9v zB1%q^EVo{nJzyIZ1BiO03RvMo&pBH*7I%)K^t{}M8_)0UQX=ZvWlsS6au}L&@AxL-N*UlUtT^yyk|`Y2&zi*D50I@1hQu z$CbjNkB`06bK=pHHKx8m0Ju$!CN{?ZZQ(yp|Fr#on*Bd3BPTmM)PMIF+5gv_fRW?> zbSX&RvE5)p7}@z$JB_0vi01k7xk|TLZLgZzOo8(}oo8b(rI$Id(fNMEBOT(JkG}*F zwQLDM42qXS8JgL;n@FgE?lU3WFZuNS!Q1sZd?F)_!l$=qV(n3S8BFB;#!!VPvmlPX z@US0>;@H+S0NgeySw>Ek8#8>0lagg6m^mBzD&p1R3H-eqMLRe*%b>?VDFAG5wMNHL zSM@jGaDbtij23oYh_p|PbsjJU@ptC;A`Cn@K|thyWws33I%RdE%m|Q)gLzS}Jr50) zNoxyO&JC*O+H|-*E_|fC=z%{CH6#&S5w7U_&;^Hb6nxq08zm;bmKR0QF)xOkb#lx_ zL%)`b$n_(gE+nBFPmhO0I}Npwl^4|T1k}u3uC^5xPIvoVPNHAhw0cz4DFzUOib6=mqRv@)u;A_|nAt!)2W8hO{W4-tl(4tdhKnToPx`+QDmFHQ zvHPxp>y7}}Sdthw1d$C2#*Bs_@@9-LI1K6>eUSoeT%}Y->_n7tkdI^c^99zx^1EevS#4MVaP1JEth|G*FQ+jV zpz7BRH@LaR@8)-H)!sCF=2#P&$JV8fwA$CPPFn3O?ql%2?aF*ft`UuTMt;4q>y+ef zQPJMkE$%ffkL^EmlV}Qh=5%3b0Gwu9O2AXtjX$JdwZ$pGBHJZeQv+5m%vMuA^4fex zyG;;HVf)S5ezd@GT~=)&9U416)e=i7K0AcTouGn)lk-}Nv1Mw73OhY7$%FmX08+S# z-l#+EV*U+m72*SJquvWj-L^S@hP2c3ZA9Pn%zDuUDT$L5SJh^lj+I!t*r!elURK(E*n~0P*fB*9C z)Q2+s*?>h$9h~?j2z8l#55ajvC$UF-w`9$P(J~Ix3e{9_#r3 z{#WAXQz2zBc~Whlhh7yx82i?13UU%Gn%SXa-rIe2-Nly6KDclrUw*_FSwH1u&sfrh z@~W%#n-q2P%j(?@#2>rGZ6bg07mG~7jlQfYvzglmNW$!U_Wz}P|4Q1w(#Ocb^gq(a z#Pq+UkBRyJBz@i+(Z(b8xrCQWzuuss)SRt>NIU#Wtt&JM^{4YI<49DIs$zyTYbEX&l4Nn#;i5Z}#(isL##DBy`mxjnvZn95_D@ zoZ+8TaPfFxG|X5eNi@!Yr>7e-Hqe|p&S4jh^%dTn*Q5isp`&!@Yf+Q{B>F4V(}v&y z9a%fIuxaf`p>%hjkI?BIjxwdH(cliI2=ItFZjFbYwvY{oe@n}jqsJgm1=_n(c*UGZ z3~b6aBff!+6P8JKv>5rja+7Ixd+;+yvd6a@V$$A}y+cibMHl1Bg~8S(qy~cg zorM8`G&;HbEqB+O-<%}GKYv&b2L$()({aYWOvTol6?mK&*c~e0!2mPJ?Lv^2c5O}gEv88P?hQC15qX_ zRk_%2ncw?~dQ8PFSU8KM$XZ1~(2iZ63R1+D)F!WMpsUeI3E@oluv~p^6sVI=`-+&* zHb9Y7*c%HPFd(+VcbRC5HNU2*`{NQ1g#1?wi*7pWV$Ky6xz32U&sy$Bb_sk_mC>w>2eHEnvFK z6?Bdj+1fM-XqL}R%v4-1Gl|fArZ6m_*4=D%iC&`$4Rw(C6wD~J zA3b9^X_UDlJ@%#%X(+(80hR<#<7F&NALH_$03^OQ?65l;8C>PGa6+!VCCgab>W0$e zchReuw2|_#1*QdOTYdoO^d~R#LMFXaxg+(=H?bv>gh)@~BfX|;7#7Ikzaq_uB?%Hc z;i%aBJh?*oYav7aC6Ng;Z9c5>UW0IhQVFZ>fDDi2{EUQJt>(vxk6RGy>Xw+2yQBgD zBb>1~_09lGCnq+t?;O8=m3?}iFso^?Ma~I;etsGcp~)dScIjG$Tc{8$PGEci6%;ha z8astx|3We%QyEU06i@ZC?dLgQjHH?%x?#MaC{y2L&WEHyDk)Vq;;xhkHn6iT3QV8L z^+|t>YCqPs1P#Xr&S0Dq^qO{Q4WDMhs1>!2(iShMRt~#XzG4>krAY1_?OtI#a<6($ zJ*G)K3ju{)w~V==_X`>JL}yncsjN2%4cFpd~r4m>%j z4HR-N+ndnr5)7IhvK^R-Ae773IB80P6W6i5nF;o}6@BevIu3J^%3gG@wpn)Z;czMg zISq&kq-{0EM>_`tx@c01RV6%)4X`a0towWlwT4y`OK%ydTHhZSb0NNbk*DYtVj$=wCbuhnM4P3o;>y76>~e7p3D$Uk3p4&C zA)W9N0i=$ARuZUdK;IF#akQqrW&lAORj`pv(N&}^2(1AW{XXZgHg#}D1tPKZe9Cn>}t9 zW>ziUuFm^L;CbIpjodzlcD}9xzag_NA9o8<-d94CdOl=cp7p-& z^}cV%^gj0zc6NPzBEMfN_&&J5PL$xk?%)V_JZ?+A{bS+1GHktTsCSNQejUzqPu1`o z=7oG@gk;8i(J%99eqJU#(koPSq41~t8Dl@=-$I#{DAB*;=a$+OGA??MK*jKHSORz< z?h~I@0Qk7^l>~k1;d_g4PM=dy^l;kjl9nK?_mqfrb);9Yb~u^6rw@wt3jk^E)9nW>-+f$b9qy0-nX5yQ-ssn6m;=B82 zv7Y?qEoJo8YOq%^`nqVp%dwp7DaYok#QxUWdI{P4V%P*6Anmiw)N^y9`n5>e4#guT zDwp2b7-60^n@-O!NPe@_yM}R78jRN00c{=V8WWr51N-P7+G&Z;)SSq{qK9Mp-cQa) zI!Pv~wR{1<0CA>$pDIM827UegMHVwK=&|mlm?J$p2ttO;WC$f83!bNGtG>8Y`6#OD z!mv=2$BUrAkb`J6ajfKPpL$gh@J*#OU$>n)gHiZ!d{F$n>?IoZSonI#8!Ydn85|n{ z?FXl5-c@FW&ahTiANb!;USTk`7<0}e2DJ4i3iZYkDbLhxr_3Pct#}nt9~hs4URPV1 z@iL-DGNx=hMZdYvnJDgCwgq`_o9&OP_Gh;7@I0hat#!>m2qZEWUpC1R>l1GO2t!D8 z0OW;Rh-8pyAPeiFG+nL8Ew zf-H9Yhp%I;f7iTo#_qF!L&%tkt@}w!MsW6V zhgw4W z>moQ2)G@Q6)oWta*FM9B+K7gf(tN{qW^$wem*;%?--BN)IR=KmOn8gr$VgOhj}H%v zLB)$6o9lIY2i0+e=H80+guDrea9&e?!mxK1WLQYKBO^T3__yTl4+=Nde=*6H6OI$! zNd&DdkZ{J79ed*ll`qmNtg{ne>ERr`_d4Eg z+swLHa|p#xro?)Bw7`F`bU2Y|vtacG2#reA--F#BAwnZeAqd0P(;G$>s>|+F&IBFR z9!d7kEB*M|$VE(cXnM;Su)0x3HMu4Agg1Y+y;vI7&nj~UCwEZAc+*{Mk4acKgJMxB zqAEnomJe^TVUCr|QtDGvJ<*m{U2MBrWnw^4DHXzI?l;7IWDjZEZri1tks0x|#5AgH z9%9*Ml1<8Aa~}X0`u6=+{;r`orErm3ajT=kr-vZ%*|SfV0UqDpR}O2$O3 zI_GMJfe}Ha>Kcx$UG!Mm!7=qLc`IaMr~S6BTfwMwtmam0-U46wB`sS*JD{4uA}-NF z$fuGu#b3%*B3Y3?tvY;gTRE-sZ;AmXk(dT$kVe+(S!Y?2G54EJA1xvVMzzzL!(~jP zHwh*%KgluCYb0F|llG;bCPIyy5+reDj5EL&8dj7#Zq%9RQXr3+?fTu0s&Z5x*GW5WhnU0^17}us+`RRuYdz#^;d*hP^10Op`#1Ua zV0^dHM6bMZo}$GhgjAi_=afM+yKTS4jIY)eBiKcyNv4|ROIK~Ay#trd*I-6$PQ^1s zk@{~|V8Zjv3+qs>5~{@fY3qOMAc(k_iikE*+QT{d~kttvI^;og^A3%oFr3)9KOn%^aN>T#;ZwkK$Gite3xR)9Z+s4o6tn(nqZSFipp!h^MRpq3n{U z%yH#kIP@`pyqsefFI!IiMXOplf3bze`H7eC)hX1@7rC{-%GwTft8O1( zjcrVmm0yw{i5K76ca@}FZg`(1b9Y??k#_MP-j`wi0Lv-=53pJ1JjRZ!DyBWOI2Zv= zHaVhO1slX6VP}`va}aq>*6M_blCB;QOGnymicXx%LkK!H-2V_=Wh=sE1kr`P0MX0) zMp-Amq}arF&$O|FFpHKY;dzV(?8igK^p6Kzb+Sb0KmU55PjKekN>X-e`%e_kJ8QUN zt6OfWw^M&*i%88axSr5$csj7>H5$ZKOrQH`ME{9mk|K|7Xmm;NSK+*gk_Ks;N93u) ze+Yh#*T5ZJ+c6fod*N}?9?!yx`wq>Xwgr2poh4YktHBiETB?LGbhXwJg(~Wln2Nkm6MRlub@*0$`Fb6%p2Hon8*Lxf3^SEZ}c#A zw{4e&im z%-eiW`X4k~D=dGGdzt({$GydhM|H$Ui;@N8EK{R!qx3ph?y!OoM z0iyOw@^**pi&Zr~SYef|D(4?UwpgNiF?T5qNoS`ge+F+fUH@^Krnx`T{12V}8aQ&f z$?&13>+O#7p=v$_k8`$IF>&c}C;&_RLS$xJl!Pn^?0$~LTEeIvzgCbrWEg_Ic)arMO@jW9rEppT||axZ`{#1vE}T7ve9*Y5WL z!FlcDPnx5f#r*R{46kBZ*gPlVU);o>rP2s}SvPfKsfrmej67Ss$g^KN*+V;Y{jTB#p&&U3hWC(|Zd{TYg28_2mBcpIo# z3Jf6-tb7mTQ$qk1ieOcLcLAD|yrW(DdADWpaC-p15|h2{_4)UB|NOhs#|6~jTiJv^ z^S8NIdvs47jItnqm7z^_r#P(%gijk~JIYb)YWugH(6);_jd|L>JUHOfP1#y=@q?Q@K4J?4HJausqlMIV7q$^C5G<3x!}(>T&FF z%V7+0RZzyElX9L@tESYQ@fB+?IA{kd8DJq~l43Y#cTzM@NYeTvl|UgVJ)$nl7{aV8 z^$KKBW53yGn5joM-Oawps1KT9=16jFp?8}wDIYj*^~1EzzOx*GJqw~4mK6yWeobGZ z-0CF!z8ALra`ztiT36F$G`*4GqOx|;%Lc!EVL~86BBA0#FK9}C$jiqh@(Cgl?18;1 z5kEJe{g2p4T6-lY1iE^4)0vnc*5?HC+W?9t5v-AlQoVB4+Gly2?mNj57|=kPU|ABS zX9v3D>(qS`%(W!`w%+3lz0nzTb;2g=nvCxE?L-t84GFM^#c)*^#}K8ny}ZfxVhCU z*8_IP%0~hCOb@ZZ9~1z0@#NqW;sPWeffO-RYPb8+eMd|cphE>v5HV5IGz#Dd?Gyhw z1?>YOb*vr`idO|#eo#9YrI19XQp$6qNs4>N=@=rAKd}}(pA3m3GwQvs?$BmbR}ZWR%Eo0~b7BxY_4-E$hOHzs zG?Q*X{50bfM8aC#tfg&$q%?mzt%cL??%F$PQ32jD{QwzXj*{Rs(bZJq_jv`?tJ ziBmj*AO^%S78sDn{^C@Af!k-%R@>#`JWD@#i%h#Ynr`-$W3X#}s+yX-(P;IJ$@Uqm zH%VAjnfVoTq=uS7(heN2)FuCBe$lOF(Wgr1B%3p3S&z~+>lX)&9veS_?fjNxJ ztYHS4@Dd(H*=K$Vr8z{a?%Tz}n#oW3<+1O?7b2Va)q%?ZQ9F?a{3qtAqlDh(0Wc6E z`C$r5^$+29z0#;|uykOmAO@rff%YIYol?iV!q9{l(_pD`wBqn>^rtsyIFs|rq@j&^ zs_ZDlnd_CWQ%!^n*H$|M5--`jNyi!Z00;V=>j;yvVx!V1`Mk!)TvRUOp)7q!23-he zC1k%_Z~7aAnFjAQXEsq3p;D3ftuqy*EX4s!EZ`00Vg?F2qaEUbZygPF2N@j&X6G9AhP0*eFCrz#X0#_ z?m4FTl^0!NW3GUPsv(kO^DFcm$=^A`49uK4bxXP^L4n)ql0HC)aB2qGnboD2^90 zAoi@n$Jo9IvPou$D!ZTnmMO@bd&LeMVZ4O9-B~^bH^JWJp)>cc02cWCE?&B z$YbLLhzxS(0O<}!8^Rf>g({t2&{t(oPzi7_-h(zUPIcNuulMyi9UvIw@SG77^_fnS z{LL~^5JKQ*e0-TN)Yq?#U!>rNk8WruWBn7C{VFs4&35t97#Qf#hR0bD76bshz9?s5 z_RNxuv=G=qWMYHmw<|F#i#j;BD_M$qrvlmKww+| zT2Z1gJ|RmVgA!`=xo)31L93e=hOv?0%U5rKUlm}}AD;-Em3&@KT7 z=bp$qVPcKWCtD=JAp-RcL(ON$;@9jx42!K$K z#sWmey|O!B{m4~(qN^UUVFY+%eJn#5{IS6)@J$hW8e@N%U!uad(suV1j5bKx5DG-r zo#J6+OI!A^ht1qt$ z#(wyzpNg34-dcRG0lKQG-E`JEHDU*@GBGdcuhH*DqHBTjJN+t%3g#Gc{@%E#ii!gc z1PBVgKbD~YEdo`TLM4vL%5B&Thsw=RR1-pta5TmrNRn9)g|2eBt!JM#_$3mB2)-@2 z3UT#Me}TS-&(6v)H7_*CF%-xo%C++TGzNUdFVvmeuo-@|kL~2Nd7^|UjQa)|k9dM~ ziNP$!-+KYTvF0;VpgYNJqqN%VA>kP3_S!j{Mu0tN%@D1Tk7u+X4UlMTutY&}c~+49 z&;!XwX<;b2h6c!ZcfvT3KyZjc%7c*Rb}$Zg_msQ^PWu(X|8y|F8nGfdbzv_7Mn%dQ zCUfr~65VGIB+&%B;yJSNGfo-^BQ|&+UMmV&wpM*KMO=2;ODvoleixW}-Huq8y^YY; zekyJx_laHQ1tm|gTvvr^umw;$Mmgy3Uq&;#ZZ|)hlS4&88T+2hm`Ghrj;%e$$X___ z1H_Z1fqU)uT~TWDMb~GXNVj=hf~`Bm(-2;%6d?V?NTD!=H^?Jpp1%Sf*kG;?T5meF z{1CGRnuAcau{a_&KwIVP!m9f6>E}v>z8oHnn_h>eCN@%5=%0(^?V}P?!U7lr^Q5Cy zSYu-oMw@QI9l<1gn%&(1m5y*gLZ?R1Q;7sh%!>G(6KB2g>&s2F%d~^zGEwMM)8<$%~9I8I2@aV2-YSG_2I& z6#FW`N@Vf5nCY&oF^cl5Yj>BQi540DUt@_3JwvO%2&T9FG zcF@m}eS8f^5vSQ0rnm8vM`Z)f9K+@Y5ddcWEYRk`A!pU(nQE z>pxv9p*JMC^BIyspSf*{_Ds^`-sF;sD+`u5Aw%Z~{keGVA{O4Qy&bP6`0|*LJgifC-on&#AStzRi$aYVYE#8 zH@kA1RvGZTk`>vRR$eV^fT%Pp>qX%@TZxrV!N{T+BP#rgeP7APxC6tF06 z`~KEyY>3G%!D7E8Tfxc0Hu0b_qv5j+h)^S)Qia@%2n@ZP?3s*EkVARUoQ)EVt*Uy7 ztuq*2;FKa7*Z6kN_$A}JAyVY(TmI)1ZCZtg2?AA0mKlp^=|#o@eEF1vX2*SO9zr%i zA8AUf>5HRn%XuYEEg`ohtiIkwbm2C^kfi@s7zZ81TAEEV&O@H0M9lUw{gQQ` zl}5>ire$+$s z1AiKn~+aA z?o4X~UTjHYeM`k}Pb-?6TY_X6ycQXX7*eG+k{D&t@LNn#bU*nC5LUFsU>yd`Oy9c3 zxd(PnE|r!Pb+bp+VeC`M8<;!pC0!UjH=pM6^5exHFYGii+7|n6uN+s0VBD8U>b}Lc zOf%yfO&P7Ld%BxLw%bKYQ;$~E^&x{Qr3y$4%X!_aqoAS-o%Nv`4{1{#w*ZUKeW+3u ze##IoPJOE>n&hMzI-q)CX)VKV$2-T>Ow%Y@%x7_-pl7^$#&@1E|` z$`V2Ss0kGCZ2BL6ToqgOFgKB5AlPhXv&rwf=f^jB)f3=4wJV*O$phTU`m)7}^{0E- z#%Ad46eq1!FfUYjyM>}(ZLf6q{@j@KU0>3XbF~+1z4sO44(Kek+Z<^+$1A)W1**}} z??DX^I%gJ^ErkM!*pt$?e?!-dv?3^O+NwnSs0pL#UutQ>B5e9X952yU2%8*01SJcr zpo{Zjq_JL`b^n&?ck1#_79}H~a3NKBU(Jc=v!e7ow$z?O+CawFd$^xOiQ6|FR@#nT zyCz-6StrE0mLD_=w&QNm67M~!>`qg9UOy$^M<(n{?IYM*)@BA*O>NTz%+YFq;x+Da z6V&3Ua|vuBLeku{zqzYK;rl3JKx81hG5fJ*9z%t;F~jqvX;&~aBMBS!#mo-@>BCSF za@0ZA?1e?_)~jgu2WyX039z2lZrqd`LGvW_J3$oyCp${a;XEc@>OWfvh?RGRgo?4` zLzj3g1O?vHR$j)?eu#?uE*@vBTs%vP^iVAby5Gz&q0l|3WQETQD9rTOoz}Z;%MQF; zfbPB2t+i#F9!*)hP<( zo;q`l?xLrtpBxZ`yp-*rF$5UkwF>c|WerltAo32qjKhSmAz&&6j@Zr%cTCaS(4}t4 z3JwHq6Y>5jQqR?1`2wss6p%378RJ6ZsFbASz{AFL9af0wEx$jS`lJFvOmIi`kW}?d zKVD?gH`_X6{Oa_d{Nf+DHM9g>@SOxi{Kb2-I>Jm@;5(o;dw$!HJ2S}27ZzxzA}X*H zt9aQJ#NJD8V3qk=jyyP$p}weYk`({`lshEGjtA5Njf&rKVUa0-FyYzVF+fMQ6~9tK zX7DU1P;F!!IG55FN+~$!WD_bxgV9}=vBnO0 zQfag7Z!|Y7EYcbNoMBcG=%6(QqOIv~LT}sVBAD!)^fWHS-cp8J)eOl#qE0L_x;4XL z0baaLo40^wz3MMMRL1zE|20qc@0{2_^JJXtjI96fJQ?TznkQps_`l4Pb!ltF;Izeo zx$OLrF5%mj%ZfD9%k3XgWQn)H;LINy{X5;{`+zU+_@8uP>%6Rt^OwiqoxKQD27uNjMXfFuZ{kql(v*7{o~#qgl|2A0!Jp^ateIQMQld_NH%8fUCs-c z-U0-HF0O3Lg)Q$GD7kAw(8#xI5bb2GN%PY|`xE!mvX0kf5XWZi2>$9?Cl3^G119hT zomIqNY`{p)&M~Em0dMWOwlx5IK{?*g#^wy+*bq6ZxR}<^KWTxSwKCqlbG-s)Qgk{t zD{Y+Kt|JVX^ntP)MH0F-Mz+N6^Xk*0(?Rdg7p5-{Pm!9{4>HmtmKE~CLwh@_s$B!b zkIZ(dcQW)C&*^7Sw={*`u;!(xz3bAB@`3m*opNf=^I~{*ov@@ zo^F%6UL4Ei0x_KaprpX2!sACI)`jv@iihU;EMB1#)ZVR~v_byc%)OP*URgP}G<_}< z-C2&?0kolp{T}XV$H4Zxhgqk_NftpQ-N~aii$bJ9Nxj zDe)4XQoN|);Y^^u7%}Z2B~)!6#+&QdYX8)J-OkK)Qa19m46>12k$1nVec+!g95Kp3 znFi%hggNQv7;9dTEPPDnW97$dOEE0s;S3+?eBkm=OGdPWDvyP~9Me?Dm?U_kg9DuS z{$Z*bA-7IVbPoQFI?@tO<>@s;a^Ro^D_7wY2?DeNeK4_NMs{z#KdoJv0IBR^j88xJ z4M7gYYcKefj#&d&^VV_b_#m{)7R^Wh7g@Tq$(Z$Px*dwPPF20F!n3AP- z_j7l0`!R|xBZz+5m;FP)uz-Tr2n%k=$dLEjlyw3*EAlqfrCQhP`*Nt~1K^JCrCX-)K&D4rvs(!_~y ztRlRPy*B&M98%*ud3XrvuoIiUoJ?_miI8XpOtJx!^qV!f`SU*Y)%EzWQ4xS;)(m4e z!MP1!PS#w4QbI2@V~k<$Y)ONUf9pi&pq_={5|$hDXZu>LvT(=kv5g?Aoc%Ac9Gk@% zY54*jqVIf-LG?S<+sIEGki}XxU{`QjFG}fDgCunz)K(p!opTHQnn+{X?n22+$xc}E zvZQzYg1sK96sQG}VB(d-vI)c!*q*_eVX__e!tq7^s|_9+ zh}`D^YOj@p)8vx zWDteYkFm*w#&Mti`<4!>J~(!rKDl|414l`h9FEf3{N8?7hYz(z*y(^8w7=*MUR12E zP&pa0>WP$a`oS*_KlhS8P@gtoOgbl4r8O1+v0O;IaIT!lvVV4nz!NzS6R4h~aaeK* zqN+ZjdEe}n_=x}A#eWfcrC8wn1jlS~Uc?fx$BeL|)>h>n7jT@lpje`ebS>JyE6ba& z);AP~i3??J&ZtmssXnOqTc;(P>sSbe3$QQ;Mn$@Q%qbETuBZcl$p%Ry z+^ydYBrPRjX-pg)b)HCYrMGDEF-e1c_dKFA)1P`)nl)}e51I9rjoy=KAC-Y{B{16Y zO3+`A+qWgavAq&)e`QQbuoq37K0pO~c<`#y4q@~$`jSBW6@8$!MT!&S9c9CWt;fB1 zpKAt<4Zx+JIuaB|`AtU5>qezl?6=JGz_>}YCYYV1iuz7z%ACvL)F6YKYz72?KvUhI zcLh)W6e6vb97*cuP-8MNCYQUYL_>l9#h{*I>40O?vjgsiq*66<^s?gaK9?X+JQOl; zhK|u&;*LYc7B#H%b9J{GC3W;VCvI{qlrN8Sc)Xa?2dBMMXtP(eR#n!aTvYEsVuLUa}j@ zHxLmQXHi_4YA`&(O)C`mM2?bokXi)=trfo-3WK9%&ViXTkmt#iM1LbKsxuZ)-p~No zY1$7CWztPW6KQ5+(V>;(UBneDrZzSU??oKD`bzl>odw9lOy%erLVyoyESX2nbPG z_Aa))r10egqHVEd>!TEi;0%g~T1V62?3FYU?e)4I zl48}T++>VaNunm09KB0`?Ip{c47q`al%5wxUNWT&@yptjmDIu_(tlH9^i!W~xEKu@ zWzrZ7-LV_y>mL}*)+ErT%dz;qe||JU8Y%zd7ituDIi=16ODjNBL6_MAkkR0$9O35; zP>pYqc9y-1)XNcqS(j{9yIuKrn@thJ+LWI&_ReXP@LTQwcC|giAZBu1R4ki=^>@I#F><*W>0@F zl~c)~m)aubd@$@Z6+AZnKC;d?PUpKk8*@|ZTt%-@%JK+)T`KIIhf!BT2`XpNIAkCg zBWk;4Bh4Q?q>&Sz6P#{2TT?9s9}Ug|@92rESF&%bhnRgXLA{q1Z4ubEPGcS6ljIBL zg4)%h>Zi~}8$O;@t^s^-lw{y%xug+{WL-5ObPSIQrUCQfsm^2bo$j~6ljxcJ?wyb; zAqJiQeXbZ9bd_>*?ZA&Wf1k=1V^kH$@P3P|MDECUYVMIjdwiX8ds6MBRqGxMX?WaH zAi(4kFQvjHH1@8dAO5tJO+=vei4(rAM4wBa=_%v|K&a*E>pR?3qD%8#tlLO{bJ>}; zQeny?fmwm4U*4w<0|cted>%1Se4p53NG5j=}L;M8Hjhbex1yf%*W3E7}DYd+b>#pv;{r@obPF zwr$(CZQEFB+s<5R+qP}nwr$^4bz9YW*bnFYf%y`%jWK$Uh_4s*AB1Zyb!Sys)&QU( zc!P*bQGhzYndTT{&MUyZizbYIT}*O8wHYY76@d*q1Z!KiK~P#H@1kgVs_=*3qcnzE$y zV6w{b&Z*w&Ad*WS31Z};G>KrPB;ePgsDjO=XFy)V=#1)>dR!FJwb783UZV^qRems)vN^ZO zRUlN)Zi>}fqa-_8TnRR5fw!CWc%{WOzd*eE+fxE91f%}e!>jA42v_)T$W9to;%#eX znC$4*W|Kq{Skd|^E}EkA_k#OyyTg;-ZQmLpV!Bt-4cRjq+C%5S8ZU(5E6z8$%sKtbw7;VcNA_ z&tVuoLgZJ|`<3Ja6rTxY3a%Di$sZY=0^!@;;&>=^h)XK4v8iE|Y2wV%Ybk@9qFfB! z+u*pNWjwBD-!SZZS6|~0vz^Qi25T(Gs&x8Qxeh|zXCXxQHZptCJh9#DPP94yz?YA3fBIataw!_DDoNoBR-e+%MP{MUb)!%<Uy+`=g#3AMQD{kWlxk%zM$rJk@+E-&$%~}D1rjPLt4Gi zvD|UE1Erl76tm4Qfi`KHd=Mqz3@O-%o4AUzbivm`9N!^iyQ;KAERnX=(}GXBFxnec zfwj(X8rB}^uxkt%MIhhsm1+#xUZ^(6UQDjrtDq60z z_KtG^XQKqBtGUQ4c0_<}D|bX^2!pnI%kSNgq1kQ~(X(biJ{;cfRlEOK_7iWYEZU<8 zyl_t2)2e`UIW%;II*bU;zp5svk8dx&H2IE3swXwN6Rjw+REasWhM>$A&v4f{G%E2l z&;V!iui@0{aNlYWQmSO5&sWE_N7D7q-?{yz-3j@^#jK z{$xy-bakhUv;DW$nmPFw?}dEw!JQv}Q>+ME&t1{4Lw9qWs+!v6t4TGfjQZj9PccO z<1h}Ye)mjb-~FhH?e?`)TUh%i6lu?Z2%NV3w5y$Lbt-5n>lu%vYW6!0iUxghWLLJv z2Sl&ye7TIv@>VdBlzD|%aZ=XBDL@=AM3U2S%=Dz^-MdOpMJR4SLr&s2~2GW<3BB6j=za&NxU-DeI7(KIa?!>lJ>w zt-;_w+}{6oasSKhWo2bz{2#ZMndLv--v8n&{aa}%bTyWC6&K{zui7Bi_9mGH3z@le7fHkVBuG&#)n1ZzAld^ z>nvQAAtnKdDWUC^$C#N%6t&R}ha}g_)935Ia2J2Bv#_hp2BQX_S>&vcq#E{*1qb*s z)CX_j2Vz38*|u=fFliY=%=@yW`O^2P-zc*Z#pX+Q@oL&L#BQ$cSQ}7vDkS0jG%4){ zjEmbPNH!$+zGf0B-d69#`3cY46l~r`7G-es;($Fe;NE|?zsMxOR`@tW|3Vs>sxO2q zO6W!sdOd4daB~rKph1}w3N*C}JReH2b`8$AIjvmmqsj>dA`IPa{5GMPdF1HV&fW?T zsKv>(?cY`+q?B5)$knRdj2;sA*!ai8;*U+<-h*<=PLzlAvIUrvEYS>YQ{ok z6D}tF_1b>#1a=}2i9g_1i^x4S)(B)ww1OeuqhZKyOQ0=UXy-+tQkCeBt;37}#|xow zr?RbJjk{!^A8*$n=R(Nl#K&4pu~Nwcw4CaE>4HoRdvOd+U+A4ig+LWzM0J+rpiUY; z=k*&-H?52vSMo~(87wT)XW`Y^a%AC9UzLfLf^79^!;6n|F?++#{<395!oX&e(zaya zIVEm&e5)y6Ti4_Sr^}G^3_n-oc`jMo$MAEaeq%U2orNzJFtHEUgfpsDU7;j%#XMiilhhGgWpATRji)NnRC2<~wmR3oVkoUHW z9Ih8k94&;SIWBSwzf9(50dh9ek~brb%1vTaKWl%cT6w|S1&6mnp>KCO7o!vrUM*FG7S`NFzNSsi$Ox8TQvMhqLBNGjivY}t zKa=FW0f+_|+q*c~G-v16RtO1F{yf+QtU4lL(I{YUFoeMytoObC&Cha^8?B=OU~Kz) z{LX)d{RGdUXqMK@z?xO!h{R?$va5z&mpmw(Saj^VRTk`Ed4ZC;bTb!4&;Q|jkkY=t zjEvH@xKHj6U?sz^fUT@uF*FbSUkC3UM-*_Czo;y7cmTzcaZdzC$AWL+w>`N=F!4^@ z!t=~g8kz1AZ1JP?A@)kAu^|^86;)uPqs39dM6h5?j=A(4oPHceW zIO5)R0C4v67z>gPoSJ*6fkCI;6RiVde9y#|SSYf;+&4;9Jmzpe23+u1(V<9x~igvu^Frlotu) z9$cNrkiHVgb(#;!9>O>!R-uX5z6KFlp81Gbf@BGxc?0)4enIU$*Bu+vK?!*e@;pWX z&gpxnjq4+4wV+}rTW+ts^djyjgE=&H^4e^yX{J{exB1Z*-yC(}r=sW)g;lf&fy5GG zEudY7NSyx-D*+4TwFN-ZTv>;nRS|t^q!L=Fhj=?ciot;uhx&U5hiZ)%2t_7j0S5wv zV*Pu#ncslMirL^4=FtljSHM;lwwV=Z#6Q55hj`zCuKTisHjf_LS?K~XKO$WhJWex` zb{PtqwaMKV2ak>D>Ju1{m*D25DAkZ2dfZY2Q;0PRIz`&d$kj3G&mwtLU_#%jHxEKy z`+%*4Ttwu@=*+E^av@tbFj}`9&7=Q=b>NYfIBs9Q1&)jJ71875d0B0I2A)fvIvYE? zUN*15*_Er|(qK&wG`%D>U2%Z}S_dNf;A4dC9)LW-F=;X)2Uqg!9pMau^M%t_#&pl^=Wl90C z@b8!VoYhg{qNYsiz^Jty!QP*ni;PD_Mr^X*Kpbk%zu_g`dFe;mA8}y}#No3){C5my z%~cMT?7f6s{)V7^LK+izJe;fP0PgFKaiE9xnX*+*v3x4vW`e_G!{N{!L9QIXqy*!T zVhcOs?~KoUS;**CQ({G6@#wvyxsFQbkT&7f~{h^VOhE(!m- zV&Usixchd0kM+aP@0&`-hGKB`1ju9awMAH3`gq2IB?oFq$+NBp>--zpg=fmxJB4N#LtFO<37$^D6w-cBPliyt=JHRL$k^aB|1;H>6D6w*N`fGAM1sKr(3>!L&yN_i5OKE)&ZeOdBLS#Qt7kW!W~~`HL@dPxa7jLNQg7xwkp?n$$cZ4)a>^TKP-?1@rV^Ex z!BdVXQv)&m*fY?Eq<2dQsu3ZE$!CA`C3w6(y%!=sB(7g?lv6Gv<-s$^7f~4z$Vg^I zVK8k@W_>MB&=+Tb^aKwmZp-8^kpa7{cjP=KP_UV5aRTmEwxjah9K|_xOCoS$t8V@9 zz58m1y_$^!Wa2b+3t4jNlG!jCnjvm=(J)wP)ABq*tsk$EKu?*#oWWJcEu!UE$FM#dIHkBps?~5aXeVbQujD1OG!DY*rM>w|wJgWKXuhgvsX(^1W zQ`nCbt#Vt!-VVMu$OkO0=UlK@m!s9Tp5!8NIF4PC&h(r3f3jVVxSaaz|1c_HXXh`q zgvG`{EL2Rmfr!5Dtp8i_4K+DBgmRLsj*@L^} zu8Dnw2WPoYyX=8>LgZ5BiFBMjp1NLxsY?w8eo#&nUOkCOhfc`!`w{`Fp82~fszGZ+ z39+J$n%Au+hvt8|K%36`$~KzU8-Y3l^D|HVv>@{*8*Du2VA{%hBYf+O2-u;Y;pvb8^t=+E+Gvt9GF42$c6#*@f%Q!CMOB zOrBbxw-(wFvqV!1rX7ngWpWH(C{TcgvJzn4N1I$cOFqXpuS(vx*lNLLfU1*IQ07hr zMQP&c`)}3Q{^+ao8cv4}y~VyeHZt)*pj2>@xac*cLGilK1U4#PIkG?h7_@{59x-A~Qn&BC$>c(;3ODS}4-OQM6kaX+yZU|@En}#)-6W-!|5d#%?a#uP5l+YLqFdG@tt_ueT zUom-X8a813ECjvqJY;sA+ZZuoU&ULnwNUEM1IofT=4I~P!j+Yf+$5nf2fTLiYc!Fb zWOc&Y<{%P9jf0PO$OQB8ly+8*3j@{Y>pbNdGW3mU%M^_&9;UX$ms=Z3`*;yj@6cjv z40NHHz@dqDNadDew6bEVQ(M%>O*e-ApSu^SKtpExS@t;9!Gg>(iQDZOOj@~%)7~;| zYV4lr-5eKxb=rW6S_vsTpB!Y+*-j|vm?)n!`6 z&RsBWA0vxvoBSS9b_Mwlt=mnn0sKRONe~}5oJIqZA3OJI#mxUPPsaW92)QIn{ZKVH zjQ{T5O}mo*g>DDc?>nkwvY!uTbY1K;UR+)SXto;G=fU=QwDt0wiF z*;mexIL!FOyrWSAumXcHA~p@tZZ5rP&Q2ZGomYh;XVEtZHo$()H1!qr$6q;n3tf-v z#tLv^sFG5N^df=E5SOkLBK|TkOR8x5@w1_}Ike+Mu24U}M}dNKCw3iScd`*blB;ce z5lAu5@2^GNl+aL+&dB$FWa^+w-Zb(OPf6g&EkFKve>^p*yCP>>=!k$fE>)0#=dDJH z2O?5zsXt{uAaOY)qTzHQaI(R<*6}P3UD-Xo4^%ns9xzZs&5I(vnSch#pEXJrYAV@} zp=t@FK-}WO7@lpc>Ooi+Z|;>Sj5Oe)Y( zbpyV}{gcJY650qjpk)eZN!aDfnw3!z?K2M2KU3$paPtOfVlB%2-?z8x>x zNc)M7+Uee3VXPo@2S}GU`mf#UH?3A!~fS1zNjxI=iToef%T^@GJ7&%^{mvGI24E?-)aTqHy zaQXqwWhyUQi(BP3e)~mgu?TV>GfBeq3iRBj(3O-~Ivh?V12X$W2$zZQI&SW0~(O35jtjkGhQnI;v!rcy;OP%88b0z9hy5C8`(_ zR$nnaJf_V!Gq84y?vb;y+f<4Gr;LrIEaltAb61W_f#Be>zKN1}KgRV4;Y5F#%LK?} zK_T`ObIER))1Z!Z>r+_(b#|d%ZclH&IhZGOL{~Ie>=Ze-ASIyQ0%&{~N%5%nw$*rH znup1ZsR~?rXY0byJbWB}}7MFuSZZw;i}G16)G zBdhiCeHA*oT&p5>hiBg{-+9Z${6~+^(~bOne!pP(l;0Nr zY2Ez~@|=Z}mE(V{yZ;>2Wchy@)U4Lrv_la`NOs?S4?pM=iv;ml ztEy)nuL1P>a~F5yrR|}gh*6Y0+MtjwYr4F4 zcFKBC2rW^TQzn*tph<5B9u;EU(hLmi}xk0v~|0UT^FNdxnsrK zj%mUq+iu|&r9d@8$+_n*ZGV!*kL7+HicT<#4k0XW%LB#>r7Vdy3V)m$%;Gd-B!;l6 zQ))_xO-;}xMc7!;A*Wxg&yRQJs|#)FkVI+bW{M=zRCi2A6GD)A;F;wt$Z+cV_S%!| z6PQR{yFeH;`0p>L?yj>Gy^E zYdSuvd5Y-bfM&kTWBqd((iGx2U@)LeSWXjmF{&X#0XgP;m@pKg#=lwe3T}GwBQauZ zvT&sVUWPyI&LRQ&zZ5gWC;+Lbiq|y-3|}B)c#FM3*uyU24lNjq$&*C-lsK|={ko%9 z`ACe=ses4?1^Ws=QS(3+*eDG@bhW*;2MtOxEW}%X7;)e_58-@XDQNLZqc)MY0O#s^ zaN%yfQ#8p`AJ(5bP9?((kP{s=jq3D7b(9%@*uBblhHnPBPj8?@UohLY3l$0zr}*%u zgh+YBwcRv(#CJ(Z=0gK+VNw16NVlOd0&K2v*z; zQqV>Q(E&K*Dubog-0;?%;PL^txFE;LgwVu#Ag02a@VGuI*CBQD;L|EUrldNhqCVts0e0ZBgHM-SB1~tX!bb*>xl_l!e4{@3(TDISJU+QN z7HknBmBi2nSrs~zcy}ENgD{T7`h>5UiqlLsC2>d>K*7$c!~~szJVrR;f-D_?io^H@ z1%Afu%SbHL9mYHav?M5egBcXz`5rm)uxwC(SPl3dYkYQw>YMS#@EpovJXm^_wW1yQ z`O>^w`^tTYke6bcD<5w$aghVO^9~(*{i>GTER(CPelddYq5Pv@ZH=5VC z)ArHd6!qMbW%N=mev_QS^gL(w`#dnZHDZV#-Ar~~EgWLQ0uS`p_j%mLn{6E|_f0xq zrAxUJC#g(|sr<~H(1g&2f?B!193PtJ=V^>XwC^eCPvSzU3GP>>S^(@Yw^9@A1lNGa zhv2wTVT;A9?U~-Ijc6A^q{x7|7-)8|*PaOegD!yNN>=5W@`B8!e=WQ25mI6fHdGJH z@>-c*(hEPnJce7ryOQ|`qT`P+YU?=RyFrDyge6OGK%BBlcP0tdCmYz#O&ke3NhG3a(PVO#!u1n@Ngzg0nNl z`e802@T4H*90LOf!%n180z>CJoOLaqn$~=8dB{V2Fh6}3duWNd|IUT(=AJ{L%Djrl zt#$(aHbX&lqR;~~+e^P;AIs4)OqKK<2{xrjhEvk<$&EBQ#9|DRZ5Kmi*gSqo+=*!I zhsd{9>hI0^@iSsQ{l~@r-xv0O6MZ=u+5YEZXJ!14o*e6cL4NG6F^~}ms z8#i%a*J3YoIIvGJZoJIy?wh7^4H0zfZN+YWlFoGD>aRMFCxoXQevZ!mPbY<7jgtE_$ zdvP=eLqWh%zwu-0gPGdTn$sYhG>h~Gg&|^9-SIL`OFTv4LGwcg{yd(f@|lF5gF4gH zJjeMP5Pdlw>pv>>-xc_;N-;At|8JrG2SxvXl4w}}3q=2aE!4G^v=h!KY|m}&+JhzA zarV=vLle@Z2M49L*|E{FKmfYzdXyVdkA==p;8WHTE zMKLqk8F$Ro?=+MWR%v@-Y8j23Yczg#JJP+>vZiENYV}JDV{93VAD}}eOj7U1>ASbt z{rlO$L-|Tpih3b!VspK(&$~DEBsIp+y|SKLHEUDR%PiZU03?I>mil)#UTWiz^OJ;; z%Lg5pU$bK4OHwL9A2n+B*Mr{KpA=m%IYh;R$%fuzq@N9|!#2Nxz1**gq^Ip>*Zi2f z1+7gs4rs4Gj4u~^**n7)yf_1+T(Lph~7@pdfUkA+eoyv4(VhdrfF|4`qT=z z)qkds2^>=Kj9EI`#eKveux%Uj?RRjT;~T0IH|S@3^s~PA%{vB92U*yMdY}t3W;|p^ zX2BbOq(j-+k5Z|lA^)V<=q1cgCO1_hyq%`M8ps{@ImLFrmRl%Stm`xTSZ-O{T^$?j z>26Tw8!S)LQ(N{iPpATw31Ksr24=Y3&v}YwHQznwId-Pc_tINsk?GBRR={j(;A$PB ziugrt;7d$wRm0FQYYYQ3i5pJz*+je!tO!yd^7JhCkbL& z1;yz$-H!9157$7U@ZVo)x?w4$Y2ii{V5v3%{xu*Ms7#7AgtywF20{btW~EGy*DYHs zR;sX0e8k26zC$L`bXDub=srrzKpBv+5sv_QW(u18{HnNpBy|Xdok~*W3XZd>IlfuH zV%u~=lcF#+rbuI%0sN5J>8j8Tx+--^2VcOY04`UP)10o(idKtq!2&4o3#XiW`DF?jHnL z3R7fmzvaUAf3k{Q+Nvo@F!D+;cO+auAc*fOJrFVJ{AQ8)tZ)VAKnwKm;S%QWc-OVj zVv}wtDc+QL_{WsW0|Yd} zVq*svt~$tB`toUQ@9;<^R_jzt$5Yvzz0wA4vBXMyAXr124(msotZLeaG~kBl(n-(< z@PfVLrLI4oSR4{pfLU_V5)p1y3>qZ0bB2IyC~*KMZ&e)Y1&0mmgPx8kOW}}7iKIeaS07{1l@0wD$KUh zuv3v#fH_9cV>QqkQ7d<-AGkl`gNLu5lY*82@SLloSN2NAq~{@auD`L?Ka|_ajym5K z#4FjO*OKMn2^;MR7m-`mK+!`VbmpjOzKjkF$&!z94sE9_;_S#ScBt;p2Yja+{biZV zH;TqYw%t2AHtM?f`9MJu!UZX!YJ|<}T5;8^n`Qu>taxAwJ89uSJ>iq#YFL2T6pJHv zRjFK*X~O=j3nW9`B0txJa2W*MCwYC3mj2}68lXh#Y%N@Ol5fv9vu(-bMKb`F1pXHD z84DN;6+bS?#DV}gF0Y!CulX!lSO8zDk>v)i&!2O7w>blN4a4{6#R;~gj}ielbv}yO z^CA*f@7SJNrkU|-QjOQUZ$txSSOmc0%co!%3H=COVs+i4Va>6RbY}o4$kaVu9ozFy zT{!}Tv`r=R)cTlQB{<{_uHR?+fk>b8SaUMd^aj3HOZ`i{0cXoBK1cdai&x@2zPoXN zeWxMEZxbq+kBz&Y^vcOg9PLMkW8uEgL*w9B#xalqd5{5gK_zshUwpEm3=VS;ZIFU#sSy)-QxuQe~|_^^oXZke|;`swl3L#9X)os3J!2 zr_m+7!=5fb;w=aLstLvNglB4_hKB}}UpXt{Sl=;=Y7Bmr9pllVmcS4Qg&ePOJa=Cp zL#>E^)HOY^k?1MWA6eudc+HT;=+1eZ48bMg z(|wL&myVfy8y!Ym-VRzJ#MR>Q`|jn?Qu%sl?TRh-C^oU}kmpN63v(~T3kW$NhCmqdo#K$0#5<0k zEO6ej$c~?Yr7J{3?vp?wKyr$t*f88EK%slOM)x@~T%QsS1b}LuxkewmGj>hT=T1anNH7$sm<9 zaA7tlw2AW}A9ch{RDHS$j4`dLoF&rK9EV zIiDaP+LFuKU-P&gs;_c3asf*SA4vDH2xc{RZbMPgynnH9cY6+X`|fUkQ>=&mDlC9E zcA$8r%Px%7Q4<_HE84ehPc#m6YZ4~-W1x;JXgINp#aR!b`v*Uu3nNj>$@%bHm=Z^M zB_os$t#xt0y?)sxW(gQ|DViD3Z|!H%`048Ob$tD!8O3q4K z=6BwpStyY`G&2bL88UkXhnC+`MuhfJTx*D@Qr>-oe9f;~Q{iuJRe2AUbTJxiYP z&{pC^-pY?5p&#L}BCQP5P16i0>+DN!y}=IuPV%x)1hjWWXWclSYGX#3c3r&YV0(>O zQZP&j@3gbwyeNQ5HAj^Z0_&xI7%~Ls!WZg(|B1nvlY#MDO*}pnTvwh12k`}uy<&*p zqD`%R1;F8Vl`O}ev{d8lXERxnjfHE7jE?kGQ7>FW;pD}_gT9m;_Q7@w4)y3BhEOcj z8S(TSQx@%3uKyQz_wZIGj}L?mojj7Nkh#y33^}sjPs5rYot5K`MKJukqEMO~Y9)re zu2EGf@6XjxLr#z#3MUVCamVD?F&Hp}fr=mD%p_pnhm&M?1IK*^SX3DLRUvWeC*DCH z>->q> zD@hNouDC8+o7BdL#3W-={T1JMmn%7*zblmqx-+%#?k+(#4dROnc*l;mQAC0OAOY|o z<@zf{rPc>OQNMayRXz zzc~E8Sp2=aHUZ%zI#3%JZ?E@{#h24ntYU_qyEZK{fAuKWzXzWILfe|QSAQ}gB}FpA zpr#MqOumLgH}#aohvpNr%2)dEXMfOCz@!LMxRODA7FoYqPKAy?>I;1b6r}FgXw^$v z87wAE?URC8+p?@&mgHs&BHJgHU5`1?SD z>*e}%a(y0N-sl&O*dr#Q6JJ+Orzme~EBx%!Ui{rqeT8f85s%&?6ohwkxoGo%N5TAp zAo1H)nD>;BdiLo}0gAvfAIxFi8dVx)Q4LG>2dTp6GdyqHVr^pNSfZ zdNMoCqV~?TU{IkFZI6ard0#|nZCk!M;<(?;!QB>bWx+CHKV>8S8Jth<;Yco1i zcAF+HWPab}HABLn&s$8DdwA1Ij3oWYwabzLrD`%RvJS;Y$*ZAh8;jyRUy@OatHnxd zeybWG!Mlga$h9!1@$qL(|0iH)9>15@*N4sXwiLkb<*r(i^719?9@e^adygihsq<`T z==a4Z=MW3*F9L}dXo5~aC!lLR;xxq)RL zC?HCKU`>7qG+h3dbAMVBgAd`_y4a?krbaC%|3xT3m1oS<=W-~}7RuhZ;?g?5O-0Yi zsKXusp&Lh(1IhkegNhKHVOMf{uzn1f&MN1Qzl~qap;+^ zcp*y@)1v_ehrPz!aHpTW4kNTVvx=38g>7Tw6ai zM~p1QZl{Luh5lP1F?Ha4-q9In1Ru$n^NO-A2*ge$z|rf8p98&VqLPf9lu7YMJ_u|U zc!@*T$fPiUW#>r6$2bDOY>yTWlhZm{+fK4^X&&v0#n6*%{h^PtsNe>vj(k$#Th}Jw zF-R$1R_|~VBs%^i8BtinS-L7F>wye|n&+&7Mo^feXROMDK(&%ypdh+@aKD}o_lkqf zldLQ>S?Oj*{??GyrbdY@O(1UNLBy~WjUaBE3#U^Y)rLWwLuzZuUQ3+v`r@ADt(Jj5 zm2)A8a9tgLBrHjfH$)oaKvU!_60)>WH9peI7$*e`^8#O0MDq;}LD!(BXLe;) zFw^Q`xF6DB!tfhR)=Y1JKEjLGhnoVV^YPLHNYZnxCIPHq^Y%HlL(|(P|E0FH^PfEIMy@{~^tq)j3j0H# z#&7GAVVUk^ibev01s{3+rRf+{uDOpq<$NWE2m2ZutYJkXH5w1;Oc#aF^4DR-*Fq!K zheSj(`w^kUXpYBH?88Pu8>T?8u`t|2914VqzQd!TO}$ja#2{6BzDj3iC@DT`76XE# zl?G+$i)U!}$L9nDw)C%`f-|0U>qc{q-e1kERS5~hie)BS3m~b#+W7vO z4-PsSksNZ`-VWtM!iYJ*12-_~KacChzT%ifYI78U*` zbi2(bjFvvTp#&yLC{2(&${d2goI-@8bfes z)4{U7qfQGBalql*rd_P4tVA@8pw4a?f>~ypB3u`Y8+?^jUrzRbw;}5SBQ(00rc@4& zeB*d2VFw2 z(w9T+C;(=Qs`ci{bW-QLLE;`>kr2g~#t9$eaz=N}IOVOt?t*)2I;o4gSarfH)|4pc z>~Gf=(aohq@l**}bMBS`FX9QK*;f+kF{vW<#G@eqSf;lP@0>AC{U>n8g<_I)_6d~e z5GO+Ar_FAgLEB} zLk6?L)j|Vy2Q<*SkWZEXN@9=y*JyUhSv-7L0}2#u=^;sI>TY36y}U2xvCid8Xd2mG z8vq(fDFzC>y%ZGxub(af#FAqw?24h8rbXD!AVdR2T%`n0W>{if+J=gO{Tf~Mp`hBt zsZivvy%N!SeZEUa6S4525x#MmVnVoeCgYRupx~*@BGZ(qx!E!YyYHcjS*|IR?5zHt zQ89s0!$G9tc;;*O=@=l*k*y<8w1exOZP!d{X4ne{SZ0_uKC8YdpAo*+v&iP6v_UkV zF{DjhjiQiEfH(<{(I1Tgb9N4u?Z~n+kF1?L_Kc2ydtU7Irsol0=zFdsnRs|L(!+0u z_N=^I4v(!FMdMJoZm_l|Gn@J>OpDSb_)nqQZFMBfC_(Uua2`D-r*w@b z%CAFb{|1@Bci<;$;Y+I-o!%cY=|Hp?)i0nT(>gV9WID#Btj%FQb3SaQcN3=@AKHnE zZfCc)MKtv4x?YY2c}`gt0Scecr$?BNmKrej87uo98{~BwfUxSeK`Mm(4VqG+g(NG4 zO#*#BGL|U}tu*Njs~k*_e2;X1hY$g8NTg+GCu!#y!cnTStzkwAVt|^WqCrp0_Na3e znkUHoyc-hG-1Z=7Uln6ds5LOfb45X+i%{BMC26Ja@qkSotYY`OQA#U@Y1URV;8V48 z^o$?AsaeT(f8gF*kid`YH-(y7fwkE+(du26txnmr{mpYfC>C+!58piwfe1($%Pw*% zEma3$i=^0U6nRy+uy+ubzCG-WpSAA#eXg6S8g2no~T!~d+o?gn0{={nvZaOTdholDjSv%(C+?ANq6 zBF`M+N@DoW3b@81Pq#N#F*!kQl>~Hvi4c;ulBZGvIgHsIp8Sy~V{IuF3^9VrBX2G0 zhgmRY;Z4~mmi}3Jwp03JkFzX}pg^Y;BIU$AHx?K{F`BZl*UbBl%3%t$jFbT(W&PK^b-uQ(@-XjxQS$&8#NY z#8^E@P69Rq5boc0dSL6V1H3mMOIs>#U~#BbUGB&?BX{RV2E|tBsmJ*MnR1~Qr{M40 z?QCFZG4F4I)=lkjn-OEv5P9`o5~|mAg5nO6Zb{cdvzjIBN!1|ykeyyBgyc4kRVf7N zdR48CiwoD$mw4F8-+Ck2uC$lqi@O{+>-*X{5QSo72TJt|%UA3fK_dwq%ZSr#jx;+c zG;BVMj8gaF{Y~wqrx`fZA|WiAI2|#>VPXvvg%aW&D6^-v2>PpzjSf>ax1Nji#`Fdz z82vd3(3g$M<|lP4)vIcrLV4(4i*-2IGG1;Z3hdj;KsRt1YS=oIvgj7|y9m4T6z@H1 z0>*n>i$enku5@ofNPpXjVAec?D0q23@B}68X^~kl?Zi`_!yS*MMmUT}C-3yRTm1uX z^oDfz9}4ZimDm5@Na6h7{9d;Ik!}B{lfw4@l;7K}vH2I79ie)nu-6FByuwJdx)TpF ze=LLql%p${$6qt0e66$2TIlVwiLOPQtA-bO!+j-kbvX?X41@WDGkzew$kkF zi+81uksg2>$tbX36QRl@=!g~ZgOwi_^#MP`8H&?jD|@Lt`I|sA1RgOhfJZD{-fIcN z^at}ctbyaFs><3(@z0~|S1GhOqoY2LlghE<>__5J-b9|xLUJZIpqXZa3Mf#H$uCEW zXq{+KpLb^Oc9E%-p~x|5#ZDH1Mzxgu1T$C+*bvM0uJR}skU@6_82p_$|7`d{_vxya z*Wh_QMcgvwZV>rNn7EY;$}BwLX1Fva5URk|Q|48Ueh{q)2KH=~GVHOHpTBR9u~qQ8 ze=NB~QG#>_43f+!*gg>}9t|MlO>>z{0?30QyqM4!x z(GBJ@0JD@3Np-LZH_0t+tB_QCG4s<*67_`$tED!Whg|reK+6o{6}rv-$I7%1g~*EE~VBhN1WI{hlHG)#q$Tk zUJBiF@pWT&4WYy5NkK&!uRbbq7$t+`A|Fs;6|=;uS*~}7M)U^@aM%tRrU>|giiiiN z98Px+qkubG`i>Okd}(VIdF-NY(YLj*Mg}A(JWynmiAm?2( zEZL8o{oZtD7P(44Rp!yiL4(?ze~wnXbwS2(Y5{6XIrZo9;enC&HrW@$ASZlJAhv%x zv?~P!G_i}8pQuhj1_g*eeb2w^Nj_`C$7~x>sW%2)w4}{1X%<^ul_S8c|CAv=M&Nb) z5ih6@#g!r9x{gB_xo#IJEHP=_LGn^Xy{+NSPXjLAlrKgVL0RA~w?(1ox@L+SRH;^= z*EVtq-Phn1GN5m2B!}P*rNYF2o>^VBLVOw2F)=gTE)r*TbIRh0A9~@w*qDsP`2QID zhA6?>B+9gH+qP}1(yFvGD{b4hZQHhO+o-fByXSPz;-5t?-}-wIaU;%!u>>?6%q+rL zV#uYRvan=mjg#*5V+i}JBpsE{PO&wmIFc3MXHWHgJx7HR#^XuBRbuNz~2OmK0 zHVSFVH3}bpNswo5P;NWcm3bZ_Khzx+A*9A0>JW@wP?j}&`*qq}n{(=fR{|4L76jC# z=v}8-wiTCmQx#s*#e$E*S^bR7>C(?(7|8|U8%6sP9aF*=^1cWuGucWliMdYDw_LOt zwl~TQ;HS;*_|duF-~yC7M>b{ak`dFjvmnOYSGGi7@-& zp=J4i5J!%Q+60so+P7n`?21Sw+s498?(!DQZgA|>t^fA!>Mi1sxn1$ETyFY%<(!B{LVtGs}!FAI98)&GE| z?u1D;uc>Y`MAF!JJ#n49S3FmYn+O$+?SlR4;KZ>TnRS#KUU{`|0D@C8ihmB3e+`R& z^C(!E{!5T#|7S8X`~Q@TJf*IY@H14rpKDS_(v&Mpog&zk6aq7UMhXD@v@XZpHBt@a z(2ry=9kc29cDMsOKA*yf@bT5@;^MVoABGC=tMNNqo37ilj=sJ0VSQ;(DCyZ zhaZ^a)kTRNZQ^nH0`T~_^A^@uYh1PlgpfZEZBSari_N1K6ed`Z2Lz$?U9c49L?*hi zr|)1$Wda5Ol__PE(aX+~lErc4uxDm8aVGJQ5w?x_I6^iked4p!GP&JZroyARyHQGv z)e}i>PS{5ZXRE2kq%21j$BJ$WQHx^qA<&JCh@_c`z`Dibfx+WahI>+fMO5sg$Nrv1 zL!uN@2xWeHC?L1N^>0{;Mc*?jco4+#S58E=!HHk_A7opL)5{mN%9E}dJ{GgE(Tc5P z;$^5MXX)anS2Z21iy74RUzwRX2@Yx3P_d8ROk~wlrjr}a!hdB{t`g4Vs93s294Kph zT65NRNC}m~HGY`rq_GXj;GQzv?Q1?Z14hst%X{T$yScVzu|$JWE=nO4fTl{W#dYeg zROmzp@b)zl!=e>ik7G_j_W2}c>dsWjzPk#VWU|JjMrY&$>LNeuC4$bcNCiJFG+eKC z%}#X+5SvFx?lvXVC$3J*@`)gj2cZsc(+*ds(ybT|wO0D7vdCo_tPFSbvuc!jn1Yaz zzNC$lGC*kh^PN$)D+&)FdTNh;k-<}O(gjDtPXdIMgu*a zv%LiEmj%WWW6i{4@O4QxmcBxN`(YwDCjx}@{o1WIZaCCnOik0p#Ce`Fz{c%GCb}eWod|E2%=PX3%*zd0q;ox+GEtU@cUIYz5&eS6M^^8s zB*BlNVhw%^)gJhMDkB0$mdZX_nX9`O6bv|0MUr`9;skh4q9U(W_bpM0KXXy>@Sw3& z-=yf`yGahR5UqOYV!2Hh*N6i3MEWu?BZ#NU@WS>n018_tg+-zOq;j2W@w#?gT35Yw z!?aaT&L=MxG53Ma;Tpv8=80P&=%Q}Lu{+*vEl(GPD3RERIkh*jnR94u*niuv%Q~`~ z<8A&VNZcqB+VgJJjyO`Y-DHr6kY8gSNv1ODB(j(_?97^43A0u<1n*JDCML4QsBf-* zO+#&ZYas*R6~=`XkO3n}G<+E_#2=1q1e1{3mF!iLDz=W0ZOIYWU}qL|;!R>E*jSk* z*C3tjG4aB6u~tt6R)g0~@beivH_-tsY1vA}w6OUGm0_|(`t9Zs_svLp3Zv?yD;n=9 z;CvkHhfg4R{DdP2*J?70{iv=3(*g#fU0E{U+JWa}Iawd0ObYuX5N#|l6=I|X3{?B= ze=`*Jksw|ZsnCevjkQty&PKX9GU|jPG&o@#vJD4s~1&A!p*7n`WFx)K#qgVbA(g%X zwWBNz!u6#+Ff7&lSdIB2fYy5dqk!ka4`jd!HGVu18opXo7odHI^Q$i@88Z`p-~n*` zTih^vchm%gYZx~j!tcb98;EF$E8Bo@pn233dSsmu{_M?clGvOTC?m{gmvN@!mNMRb z^=flTI7}O|K-v9eXt)zCY?G^y8YS#%IxDV}hb;U3Rj?)?_%8>rc{r-gm35}8`}9Sx z(y5$7_MTFcgD%diNDue8HCw6t(-oL(jGK-PbbxczU@EkhZxj<~`f;00JqhQ|bY~Dc z3e?R63QZq|Cx5&AZ$HK?xm7fehxA5Y?sc~FNA$+3&KdsUTU%}BKM;KDADh5<94QzD zVz;(Km;8e*VranKFIb!=42>vbmY;4=-?*Fg0i*yofb8eH0RvUM^x7|hodq!NV4ed% zuABu~{*Dx_cal>2uM3h=x_lY%_2{+n-dK9DTm%X zMBn_YUb!~Jy2~*+&xFr$c6=0hmQimhkhrg|-v)Q=d5okX|Co6Ho@D=?cx)X1^=@YW z=NiTSKdn(t3UzY8j4)d_)J(_0(9TxmcTnXBG78avgvG#A!BUC+y+5AE<>#7^qKcX5 zC$C*C4hXY?Iw210&gd7HZ0~TJO;@rl7q&LGA%^Si6Laa|!Z5J}?RQ-Pxul4OhEkb| zTZqEDy>!x$y+ctO*J~wsm-%rZUZJ14<$1Pu@Sl3{KqQggD)cBCzMn~61S-?}_*H|W zi1oi`%m~N6irK`Ml;ZKx@pIk??MeAVVn|%9$?S_0;$)?fUzxVqCQP7EDvpxTx#T!e zqDsDO_voKYSwdO4P}AJNq);x`U`g^w>Ue&`LlWu_?+cSk2x+g5f`KqZwVf4|f)4g9 zVId=+@Y9~>h|a74eKU-QNn1^OH+BZ5ywk^I>j`(087J%s9h$bKL$`(BkJavO78eyEQj353 zZ_3*%^c+hUcHGr^ECLcL09zS^mak%@Y;RzwLgOOqcP|291NY0D*X{DOx30^fO|THz zbo0T6jT`=MJCxvXTdM8_p_QW6Cg=w!ndhxu*aCE^sW#l#f|M23UOF~%Ehcy2W)}V6 zkmdM*-|0!p!nbX&2#1D~kmCk%Oa@^DJ2EeXkY-M z8iWFPI;+)6+nBj-+c-@q8u|(6f`Yw9RX#|*T0l78`Ccea3N&G;No-#Xks_&tZN_M7irD$81g01oQv6|?ChF$~#BvLYn;VpyU zjstO(rsvXvHwq)A8h#IY%8Q5qJ~=i_6PCS_kvf(8iUK_7%o7bW4JZ}h`Hv((Txu!K zhR&G{;elyOL0qxY_ULhe`RQ$=FVfk&c4*J2^Fv{>^x}n0j4EEndPnAya!{NfPQ|w} z&QhYty}fOM?73H!Xb6NJ&uqSAs_v4pbuvIduG) zp!zW!kXcP9I3b@tGtMbC7LG@{f4qNz^h=3^*(zwyUtOL7@U@*N zR+iY-W;@i(w~}8!|K<7x;FOO|@Q-@=cOm?%iLo=W{I_2I*~2*grye$>zG1T=hTwIg zc59~*xY70dZMj%*E}sHR3swQcO`&KIjfyggcI9@*w7RdQi_t$GXan?&{lHwZWtOt&fgZrK@u3{fvd$cP#*^nuA=Le!gyJ4aVcN#83ih z0nM`${eg_4iq;jyuWH@Pa%uxCFm_#uDM(b=i>?wmPW!dSTLI=WRPvhsC=@AXQQdx^ zv#$E|55N>{iawgQP$lxFpTtDty)K7fn%RE-4AoLSPnzqfkL;(z@o|HRLuvcJSNka_ zOdvx%@Ps9vcbb^eSwBb}XQ(7S4s*ILOBG9U&u&XfHft_+=8;8MSoO_OQg|Ci@q1kPmU0NCgxwsT7Jy%GH+ z+3NalH^SMTFuB?xec=~f80O5E(VY&2CS!5eu%wQQ*pFm#VW3^k&-^bu(oX(|p(*?e z*b-<&%UU6do)-c!INU_xz7cvuQF6!0AP@3M_hp2c2s-3C`jcKB+Gf)J62b5tKM`tX z0Wed8jZg*Y4ru1QYrfe6mH-j8Q3%K|m7qyC zG_w+fL}6nFbDg+sCtU|+vwSdwq9opSezPk=(XsNfaV4*T>p0J8?R|N?;!CZBURmH@w1q-Mx z{jSDhHcg<#RFEwQ7u)e%50X*`weX!1cL@4ojq_T_p+Kk|@DW<(S=1&)K3_JFW$8!; z$E7@v<^d57LNcSUS#i{oL6%THjOJbC9$Z?wR z+LTP}yxDO3i*X2_$fAXMewTyH6S^j}TU7iUSwNBkHwBp+<+{}n+s#tSHwNkH8{soT z3g#jN6N>ppYXLyjy=KK}0N<%DgrNAitX4#lnqvK<7YlI6r^$;jr%%yRLZxem)o1?CO88YW!FEO9*a{Z>S z69dV~Uh^Y%X6&n`ya}>b##{;bCOW&~K#c_y^@v~I^8Ann2{ zE))vyAEq4MxVCdZ_g{zdv55gI^=_<3_*qQGCvpf?&FAz*9A|cjI#`*I?KWD&XVeEJ z+{gPcW92FJJPaPG8LR0`-4%?PsKq_+G{kH)+q^%sB4pREPI!c&GVU5 z2%L1{MH(gnFO3-1uR1O-=}ICi@1pIQvJ02)B<0?(svT2;HhovPP1PHIG5mF8Cn7kv z6~nxsSU7Ny>*!aCwojCBms&jiG>h{Z2%fMF79Y#IF}2#a0)cI+`*p@JrmOZ1xE|IJ z^Usd`AB4lm%=TZw3gQXNDf__}XUnw=ju zsFcQ?jlSoGGgiPNiWf5x4F>j*gR?0i_(O5!#8-ABnH0QkC&p{#oXy4X%)44!!y-2- zp%dE#5G)tH@S+p8U(+1jg$!^kO89a#PnMn7{En?szW07}tHCF~w0i1gI$v)28dFmR{)o-o3x?ybQ^P7&XQYZNqmCS}dFBQ-``mmn_O5 z1UG3~{uzeCja@ZX1x}Af9?zKQG4tG#hw0&c_q7Xo5;{yMH=5V1X8SBx=5k`aNL}1v zaL}K13Sxh$NlsQu2JMulVz~zF7=HCk{c6m;rSMXPq7w*j@+%I`Ni*7lV$3x8z0!~+ z1ij?}6-Kc$?@5!nv-Qhw)!X~>3BE3&U#4DA)F^% zE?KNNi}0_ZqQn_DRou5WB*@%FY)c9w+}A52=1f87l?&UP8saMAeSg<-xxJ)PHdSM! zb$f1<(BA4s>05U_Bziw6u9rEKAm=6Oj;+J;of4IG&SV^%8iRT zw~^w<+DcEYa9u98LhRB?YaV(8_W8Bz^B~;uS3!W}%RD6|(qRGE z054{xO3XhO)hERTf^6N5ER2P_ryl!83PWC2P01$JH)egR1WYkEfHs_#QodM?Ds~jz zwE7GR@NA1j=JTtSkHAKQ(kJ;>y&uP%2cJiU`$BA2&9md=cfoV&V=Y(eS!of^%yY-{ z!z;L$_@AeL)cwEf`Cmwllj*y&)Yxu)G~ovMr9oZvFQHIy@0{{Hb_raypt61LV%@1z;XulQd7|tj3e>Pda(e z+tayW!MfUm&yuH^o~_x$$lqeGW`dGgpnp|AdP-D0BL_vFwF)?0BHF z-9jg7^{)pcR!sz?4!&WE0LcB2YBi-141eUBG4RH@akXPncQNa%;qfm=`)|q)j0%|} z`{e8-6*JgaegpvM_s|4xDuwaz-^HOd9l99=tQtOeJT$pc`=nYL{sDLD+0fl3xMF90 z5o*Fb5$jo+FWz^CCdsY85Rn?%XlAiaj6>Ut5iz17=W)P%N6zN*3Trm-s$iy-)>K1+ zQcvR)%Khbdaza-t>E|QD=5kw)Jg+h4fFpuABAcBxnQIb{CPeRx86TY9*~cbhrIc@# z3_TVI6rR{FX)}&532E_|l9vlys)$h?7o}t;SoFrC66=v797<9G_fLimI8LCrk`*e7;vU`mEdhL z(N^DJCU2#uJU82;82n-i%GS=u!1JAZGYX>_a2p{gZ| zGu#ADMXouiH|f#`<&@`eV zC86onfoJK7*}O%6DXNqv72qN2u311uBHOs7*x@%;bI%x?WEKg&^dpkVuR(aqkWxjs zpd;hyDl);Gh3HQ}&^gJC&oInn_Bh(4UdPfsXzH#_5A=Dt5aT8!Cq;j~7R@W~rFaYD zXkQllt;eLnV6~{Tbf;VMbohBzaG7?A@$(p@p9PI>QfC-Mf4A+;vpSQMpfq-mufVp9 zkaT?Zy%xWsLu~*3`_F##UmU`~{$Cuz$nZ}f!pQJHA(1JZwP>6c#?YN7(jJCCX^=eD z+aZ2DqhZDzx0HYU0h;wsZ>17`W|BFH)>qtzO}T_~!>Gx#wk0V-;MGz6SUWx1`;fnr zXW#Abw^vt}$3EZ=*SGU_{LczY> zzt+eI{Yd7evY@4E!*SYb7quO_sqjAfpG7hyOS`J;IqR3r>zTzA*Uz44@(Mb+Cj@B{ zv1jR-EQC!Map&RoW@;BcFN6B4yU(;ZZ83bn6Ar?RuQIhndKhzIg8n}IcjdBBn_Tbd ziGJ|0()-cK;Z!4snriV$;7(W4L)MY=tE9TTw0^Pf$Jg7RxOxHZV@@Tu`XKtmx~%(r z5@K?r##c_d0ZtuL+NjIjnTV#vEM~0LC!@(wnQS?d>d|l;ej>DS57HERwOYUgfqr)C z9k(HkZ_|@Ne|~soU=37+rHdnn_H~mS$n9R;(`j3C^pzYPo$oWP@dNDs6|cH8O{xWr zKeu+NLMA-ZdU118Ql-;WF|9`NR@n)^vxke4bgy&b_Btg*1SrD&fSv8Y))CG=(Nk&k z|5zq($a*el28)bAUnd|y2{gR`BUA_ygR%gTJ#b%+me)Y6o!t+}_?HmN^xwYwRs_9j zFOPy@NgPFhLg$V4_Gs9F+Cu%3jRk06_q2cvzeoQ2L1l9-n8E}`oA02{UEw4j|7V?} zo1~*>Oe7;!5OxevrtVgE3Wc^+T0;7!uzBcyfX8?+k>f}BjHNv9e9p*>?yzQFWE>b`G3g9_1Cg8ROKV|rz;S+N$mAoeOLvG?k}=&D=MOXSk%{Um z%n5xzfOCtk%polpS`oky)kHtJtx(Tf0T?jUrM?}%m%%X^mFoM9gosb}VOON@|0t-B z09=&tD1}^_M$~#U>K>ztLsPfs{o4NHwwydKhB|?&=X-*<4dR4`#M=PohPz6e!ml{@ zN}9h4{Bv;M1O>mfQxvd%Mh6-#AiTfTWYL1a7i&?-a#;-`PNFU zQ&NckVnvXFV9o(?nJ8K4FUT_(T-i!q=!Jy-tc}8id&m)4frot16~$D9Iod)=gQXD% zbpMB{6Q#bl2E))3gX8w@acM;jY8Z`QIJ0=M-%P<(AH9Qm$XDARo_M3;&#`}--Dsb_ zjAjEvxQljiY=DR{3Il^IQn7=nI90JC8OW$Dp0_kmlvf5Au>B^`3tp~(PoOI-aC#ct z<=2_3MxvtWPtI=~ghUt^ z5RMAKKK)&75KDtA2uQ>-cz8)CTp;syj+3i+xszuD04jj8 zQyNgSQ_?J(QtM{l?#GwuFfr940dL9Gf!wKpbT`G3H@t&CX6DNxyK~#5VP#&fNq#6F z+R(#u&MM0u$qAE|q0SW4z?7e)m4RD?;~XhTz#^m$Cxl$R(ol2U$43p9@)GL|$P&0l zl}cfCEbOdnk;~_kGA6Y-_i=^4jmdn{(>`W+-t6!`X?TRVijw&cA)oJ0 zQ(o@`y+3$nx>CezLPp|nj0-Kt+6AI1<{jcL{1U+rMHolr%Q9nIf%^xkeBh+5&K@#0 zc=)X$=ZbR;J{V>=M9UW=+h*Z@xeAj|#%kyiNUURSdK%Fhp$rzz=DPpRxF7eXUW@L2H#1K;5Q(R&mej7xk|55R-@RSSJYs;G$38#v z@c-RwOU-p7{^1PVqeaTK#Yq>81TV>EhQS(l++_{%KtK!Z-z1_#AOO;Le-x6Q!plmP zfk>{kM@V2YXMTKJi_gi+12be?h|V4+amIKHO<=oBLI(68dj62EE-bs$=`j&Vu|H^<;wTe0gdfQ}&mvyZJ% zF$v1ooB$mtL>3i?2KAJ~i=M9G8V@N<2NJJ33nB%C%*OH8ry60*-CCL@rN3rSv5D7e)tCwl!M@RIrn}39}cQ>gy2U1%CXuzYOpQ`ff z9H<>*1(J?f$BanK`YPd#(|AZ+g|{dU?@F!O>w&mL7S~_=G5TH+DaNJDMjsvI3Jy#O)}-2SR*Pm?>N+CXWl?%{FPIf^N23(47ENk> z?lP-62px7*FeoZJqY(^1V>1j(V(sU!y$s<3y-+8%4RsyO=YGXtrWmSdDd_78nGdqo z2wv?|pH>VR2**NxVd>%o$ei4a?j^dY(Ac4 z(vQ_K3NJTF0mR2svxE^B>UymfiznlNh@lMdx{PmP`-B3;GMksYb#uz;k1@H5F^n}v z;_zQAV;m51*eyK+trZV`;eW3cwKi+7vclv9YPE0!_rjqDO_ke5UgtxJtnbKD^KoJ;v|92c|GL^Ek76Nsd`IFTYg)}*)>;sR7@vmOnYCsJfNp7qJs8Ny>;Bsfs9<7q%MXG;1QB^P?-_nOnM%3^pZm zO{NzEnn)V9I)wcTlVkZ3D;PDhz8Kdiy3D+^%rCpk!7XYmt*e$lmT?q8lTx`qZlO~S zveA7Tqkt@b%D1-KiubZ?U!_)7BOm(IJ6R~&a6rpk=>>x)d+@#ZqwUMer^il%RH|M$ z%JrBei&KcI`lkN!nWiUx_#Ig6NltoVr8jG6&(33&`sPv!NW!c-U`|jw=!|j%65FOFEUDvZnU=gj$m|> z$!_&z))odbVEF7$fbqN>7yDFiemM8!q3JDpEKV%N-1Vbm$h#)6Ur8!i$fwN(Vd6a0 zm7-pS6?SKa8j}0tzMcR457G)M=Xp%cc0}22UB@^_0xF{IkOjQ)tzxR&jh?7#rSH-7 z1?JOs+=!J5h0-VKk*27rf7~teWjvQ%B{xu8^vUVaY{;$;Dd zm{&~^W{}$A>SEAZ)`=dnGijpj>m&TVk3A)E(St-UzXl+!{gG z;DpLY+I~PII^pdzf2NvNi)GGIcPk3NWuv{Bn7m*E$xvUDwjDVnmSLr6qUdS8reEZX zwkViu<}HTfQxdOO>nMO*(9q2RlnpGC5B1%bb;ak}i5a_tYG?~S#O05ut%N<&lR1E4 z2s;SCK)M>h`QQ*6_>ta^L5ba*p@T6r`9`AIrgeJBEa{^^AK7?va`hI74<(1q1DMQd z;W_)QvSb-t?HJda4S~Ydu*QH+`lJ0?~cLSf_@JGO_n%)jwu}vbE6o7v* z)KK7f*Yz#E0Ugc!230P)>u)rI@YkSpK*K&j>0IV+J|3mGo-R|~ta^{=|+S2%o zHz?`I7Kqww9rA=D!Rw_^@Z!<%;5 zu?b46X-rTQvQrG?wKi$DXQIZb<0 z@MvcRq(J{>q?9Pg@yUTenKjEL{~{L;)Tzv}hICUjYOJqzeuG8`7G(xk5#m{2V<_-B zD!iZ``C#m~r`pcp1x{aQ2*y7Tl81!)_+lelp6oldvoB; zpQmMjafXBX*0sZv>TTQRmky|bnY$35;=+gR()chzK!9f=Jpqod#17g1XI}GcwbU?A z1Ksm#WrOYrfhKIu8FcD*U@_Q~(t)96K6kjYT{&nSubio^j_zhNIU}ICOKMa}1eM*} zk$J!9>HfX;RVg4)x#M5x5kv=XyX;KhyR}LUh5}m%N`Fp9}=0 zN(!%R)NRr2v1!^-@fRlDm;ZKg+4g*GsDO*XR_q$y893eoix*t_UdyVeX*N5g2B52q zU3zjRcKr#tAC*w$hFEF^7jn?yJZPKkUe9LlVbX&BKqzGDZ7t700D4|;_;Vp4b{LVq;|c|W5) zZrvfQgP#N%cpT&@JoBZ<4_JHbn>`Sps4DA zZ!}(vfaT3ROTV#*BWgZ6pd8D%wFRufIRGGspI`YcTKZ(phl%c#dwHR~iBBAzmbD1Y&9TnwD6*#l_2A@jmgwqrUj{ zbO}IgW{Cm9B*(gwPQP^B?EJncYhb>J?2jc9nS9tEfLcY#2v&a+p&(Dfb-~ctlvH@_ z05s>^{EpZP-YEmAu-wC&;wz8%9OTbiWo=9#wZ3GE9K?tVtTy&xb!S(_C^&Ay=3K&C zGzTC+l>l&lIl(J&R21cHaYHM*)B~c|meWlTSSrafe%JgnGG9jgxuPXMrx8rGv11$C z!kmo40wvdGe{VwlPYuKLfL=4{fXgnKMW{^)c#mAzLoYG7@b&DsT;N>OvNm)8P(lZN z6u!o*2!381(Sdc@c|N&C5-Z}q6xO;KG$HdtyEdc_N@Yz!Ye?q&n_^>^H-+#4&z!IO@pCdrmaez?sW;S z0WnX%%0dP+pmQkt9HFVdtx?J7#oVa2Mt*=v3VOF>6<6@p$ID=oNccNuFvJW;M-EXI z57`o2t7MZ{SLHhTn>{gTG;HeK{iEZPU#bI3-#OSxum%Hcqi8BRQ$({!QVb$q35UX~ zm#7*C^i(76b6wZ-TnWf*KF1tVLN;rnkjFNTmQ)4PfX)&iDwWJD}_XG zg+#%1a7O&153)|#ua1d}Mk`8C?_tQji91ZNp9CeD^f3N4%^5kjCw~H4=;{C2(f-}1 z{>=nsWd5)Afsyf_!ETI<|5LJClZLbdHakrAnPQJY%%)rusl@G));dqI^?K*xL+n|f zot5}6NoSlP*|!Vm_zq2lj`cx%uCz$=a3DYUUT_3&wJ|U%%40ZGi=aiaaNz=2f)$SG{ZbWuEWhXnPZ=QCwPAXtw556BNAyvx~9<~?%F+a&_%~SCeFrAo@ zto;KcI?A=m_uGj^6P(IZo(!)KLIG@NxHK)hu- z0QyNpU#Xp%dn8Dg*XRctwO->ChOc!ap|5`)Yvms2(}^l;G^VTHHSLuU#vn|m=2+!| zE#Oe%#6l)NETFL0t$OXOh&17@{b5xE3BG0g?|uCmFlWr7A;^76`DffB6}L`$1q+xt z+@Wwll|fj*OM))ob_d(@2?OqH*#^(*zT2WNqlZ!Wbe}1Qb3Jr`?V8pML+`P8vIIz{ zXP#QCU<>)*1lqZLtq}Dhg>xFnf+c-MqJ1!)nQQo3AT%=nh8LpIF-q={mt60oDnvQb zc^s{zW099xH>!x1qK3+QP5&M3TAMjHdN@{f3tz>uCW~YPtg9Q1veD<*HbX9Ln5V-2 zY;;}>2h}LniL==F>|c0$^Z_1}1KcOAlhN}f2@OrS0SGOzday>h#3Oeu%&?@sOUB)Y zto?EJ9V!vFS|)g6TYUC5x>QRUii@;cWNq00A?kN?6rZFp7WYLPXFssidvQxF=-`_h zkmrSG-_ty1_On zICbF`f2ImH+sSGQfr1vQ5z^)*K zwrjbbsWNWNXw86CE|V5#K1~c2fHMB-8VF(KOc!3E&z@(FF0DEvRcSj!UFokSh$H)_ z#G}(#z}J9)6qF<0$OKBK19DDl;h*Y)Qt+zZei#)s`yHzAU3YV=J02snJ?jUfs zf!gxOcO<xwtgEKfmC2e3XB6;0iD+OKBO!`u`%rwye_%HA0REh>TJea?gNGjD*! zG>n?;=Ak@? zI_&-Zru1-x7d&=I&hUJm3zPkTz?*P~2$(_!u#n~vEgE=H$eBlgORNa9(IiOa$8t=RF_cuciuzS^rfF9<9TH80#!AL zQ;kDas2EH#X$ESNHD5mE(C-+2`x#7Vm|+fH?!t(6{TJKS34Ao-12}0fR~#23W2?)N zdXYhcZMXNe8nRZ!pnhvmiB}?!&V^p~vnp$>7w3z^1t0)owHn| zlDt4euFLVFyq`vzj@Ua{xv!3avU4bNw7UlPD@4)iY*(*4=pPZs(M5c`d>>Y>8in5l z6Nl@~!ybb9c1{z5#PclTrUa0O3FB5saMwPb$L5`2SgXnEt1g zXGn7+8hZp0bf4WD6yMa}cK%spzgbdbB?3bG`eSz8o5U ze>uS>OvcX#Q}icaY=D|q{`jKR#v`S#8?%drnGGsQFCgeAUwrQC6j=cIs1K7?VJX&B zHbo&8zhOr@SOz68MYw~`$WRSe)NC?0EMutf!XF4BDSE*!P$Ea3TIkfI)<(sG;g#9I zs4I3s1&E!VSG{A!1xgDxux>8~v-nGD{4mLXT+s~r!zE3V%XQ!MCEFU;5?eV?(??ED zHyYA6#D3{`adxu3?ZaRA1eOYIh8EG410uDfKz-EFz!M4+lALkU2vh2s4x#?pJva)V z7^Z-XwSFTgyk%h_>Q}*Q@!_Ng*&V0=_CIvGl`!uszxrdg#IS=wR=%Y&8D zZ$8xZTM-F#V8twaCkz=(0DdrZOiZylCt* zGA0yI>q4M<4+GsLq<#W|O?Wy2AbVtFgB*LvtB+r@g!xGM(Y$R{l&yq?r8aY$;6@)U z=B$xJV7#VQ4-*n%u()~!fKUnsTH;UU_7E5?!O~g0ze^}xNMk?$ur+Ns4RNm4oY{-I z5eFUWb8D0NO~Q=k`%3e63r`EA+9=rDC>AFpFdY$YCU%a+Px{<5R#v%A1M|Ei6f>BB zV=QiXBWL<%%6j7G!y6Bxez0Bs2|?b!#ZuAzU9u0(u~u!dQ@tnv8QM(rc4Tbf3l9}P zH0lp8WJ$#Qe8)U~*@479$1qp%o8sBisw!?EwjwXJ#1n!P%_6c!(9NDVaEq07goLkn z-0-D1Z=r~e!E2>{AhC$fdz;#+3+C=jkk&kt>F$iM4R-EX6zkCUNFml!*q6U>k}{;< z=Or{WA_L$Yu!8_@GVKZ&#`ib~-P3AGOxJ)PM%X*yrSTIOiO_8Pr#qn)1I#ia!J44g zs+;pB=x~Vgkv52#>?#Ef^x(=6=LtCRDk5?6LKuB?3uWT(v7E1lSeF{`wKGO0mTL>! zeSj~U?yQV%srO?BwU4vdE()l^tKB}iA)vk>a4d)&`4()bfn;k@H*%H#@B?pd@$s3_ zggrnXlWYEpCUf@EPzu84#lriRX$-{eX^psE!9nN0xiFO<%BHA$*DG_0-=eXlsQNPW zjhlg}frn@Xt&VA)KT}$mn^vKwl|r)8&jM3-T?{S>PjBox%w^d<+Wn%)l!1wSTLbd{ z>6}-`tEcZx3lDO}yo;heA*O4yF|xb@5i3#Rm|}{#;TFJ@3$qp+uA2$2-72MVnSV!Tvf1(Rh@Y(Uk=W&3wZc(C z?UXxFmpbb=crQDDhj|~DY#Oh7452)TSs1cLvS9Af?R#FD&gH$=!d0d|GKV#%pPN!w z`-aR1KcQ0p_09=HP!wOGeLFsf}3=rgCbHa4=bSLSnvsi&RYD=O} z@AnRMR|5IYv;jpU7{1~sfWqZl84vR?GxQ1ntz69$FdHJ=07r_=`mL@}U{uxIq7Q8{ zsL?bZ=0(v%%iZ)u57QKlW70JLrm12mE^6 z*8bHZs{MC;LO;fe1tsjNl~L=Z2zpm)SM@`$qlIJ58dtu$>L9osBe^(s(llo|x zuyDH~Y_t>c?C~CfXRx6rYdBhTl_hKlb*M@$9DAPf0jjB-o$?KW+|E*>KUd>NYDF*p zUuxwWLh|@N?L&Qb`|1z{QGL=hkC$in(`GnkM94K7A3MC{PbzLbkU<{!CM4JiR}As# zle`Ni9xmY!Hk+_Kj7jBGD$PC(Q+rE6@-qKtXY`~0{SnegYT4!XgFKIXl7dsH=hqo?&zF5e1sz0+onMc)yF=X68@b ziOji5m_JN2vjwrabvFIsbcGJ6lQ$Z!^L`?kdRZBOk_I{K-6bFB?MXd_WJqpCC#vH% zG72w%v>d7#E}-ZvSuf5mZwvT~=PFp}0D}TX6V7?bU=sfiW9QT)TG%D&vR!q` zwr$(CZQHhO+qP}nwr!m`(-DJ+{x14%|A04ktd%SCNv0U=YtdPk_<;(4%Os9>z7#J( zD(Jm2>}aC1r1^iP0o|L(lR8!=+zYo=O9t7tvF>-$H!Uia@TO)Wfo{8z2evB(5!L-0 z$9fqq2;L5VQ}X%g8|6n2KQDKnF%l zjWO)g+M_6ZhOO-VE;f32rH|Y*ey5m?%t(GQEDrPL#GS7sDZJGwPCf5znBH@0P|3@YiDHwjmjax_mFC#`xzP= zZe_+j_MK5v>~#R(S|Qk~>{fhbO68*=-}poh?GH_M0D6s&#&vi)F9uQTu{x(DvB>_qq7LrrrN7oH4R7|KIo_ z1LJ=X&KUnk!r8yM*b%!8vF7o}cZ7Skv=Lbwv#tB&(2?YXy`kkH>KZ&0rJ~|G5~(9{ z`c9meJ!T39Gbn>#q~yl2gB=JfrWZTg7T|lnK9+6zZr!gL=jnJo93)0M=mr$2kOGs|ZMg4ZGQHI(4pi%NIhWeS`c8{G)njt@S zf$llXIiOp=kYgoI`pRD~u3>wE76e;;?{){-EuBA%u|bCOzCnlD{`#dmc5Xo0 z;FE`BY&jxSn|)&f(4{^nWeg+5K)UDewpJS8f)%e{`7#m(WI$X6-5Q-gTIj0UlxpF` zC)m-_dlPMZ)+JXkY&U98ofE@&Z+!rZtcZ;YtNR$pL~hH$^O?^dUzEq~aRqw|<+B_YVoq z8A8f2?*A;$2hd1`Q7BL#FDAIX zCz>=AegConki`D4dSirccbTGpj=)|Xl#Y2HfK5Kho1TkC3@1#c2q#3@*`Mc8l1mCg^8btxGgua~; zj!NV}e0hlm8i z!#g_+ELTlH+Kh8d=>7kpVpPlUGz*PZ{p4@Z5)4ZYPBIC!B7WtzAWoVU{TmZ+M+%}t z<~s_7sR=U7@A}H4gx^P0md9^`cST8fU{Bk9y^3EIwYXtW5;2?RCathb7n85Tb&|t; z*O5Hr+>s{W_3^vsZKav6z95fg@z?iDMJ4$X9UtNcBV@LN`G4w>Y-KUOVt^W*PbnhZ zbtS|{SCtrf@jq?`yD51fOM;w-u|%nk0ddc zKijH0$xZaoo&9FFLZATtqcd}IMH-^;E{Z%=cI2*^kvi8rNxq>c*4Ch=xATXh31#~a zyr{6=>0B-&2Vw{1P?QYxD6;g(VJ;-L>0OxxUV^{-ImJaT9Q*^y>2b2ZWGMwY{q)VC z=~?@e09*_&4^*iCgshb~g0yw63`L{krN#T8F~~SSkZwXID@GHINg~ z6dDx~kyB|h%SjE%?LHUwvG>o==bwTCh7<|fwZJ8udDQ?U<{;AC9W58|Va&CYN!EVF zx$l+dGs^5orjfnvLX_ZQh0vd%NSEDV--xcT`S}F8C2OC?g4V=qiZ2H=;?$0mhS(&W zLAKsWLvC88AUuONWHT@fBFj07^#!*jz>5M$5koNId`R6$B!B3HE93NKFehot4FN8Y z6|vdEkg@?qBigmdqtj+4Y#>7>K#jCZig(b6hNy)tjD8|X&&fpSab!j>(c$2tr!Eu8YlMR|q)Q;n z!Ztr)^3ikUMY@9}kW(e!7&eDWayqI;jTrdM_Kv$O^Qv3eVEeL9aN3-32AB(5hS*im zb$Wlz`DO=cyL9b;X(Q3m>@<1+OKm-`Uh|Y8FxP&48sJT1s_PbN`qZdX2|Gx1`(!91 z(eu0_+X{`$KSsJotD29kRmWA1fna=|5ko~(r}slB_B9?gr6pgQ;~9;)p@*mRh@-qe zy5zqt^NPfhxM4J;(|Qz~H1Pde;fx7V{;+tzW^mee)4gTcvH5Fe%3;j{V2;4%)(Sgq zi(AWco{T08ovv(Nx&OpY4M9q>MSf7hhTpXx!)9^b+Sw~)Ybn_Poe&X{)}d`YEPab& z=NyGv3}b2nb_-d>dVoAEPME!$IG244*ZrUt72{Cdfmi^?;h#)XXm|L??En0vI{kfC z<}ScSrN#7}Miv7Heb2EB4>}rW!a)(A-CkcD;5#dQ0j;q6p8bF#H%5Y%4j5#9v_=U8 zZYJj#IzyGM2cT9J7epbSesiyq0@f3fYqyykh*y6ZF1FK}NngO+ zLQHHxV5|@f9;J^}6wyywW;!~rN??0nuK;{T`nCM*@m2I@COsm_P>+g8?Jdh^koe65 zG_v8mRR%S}W{>vfMGWne0`@~i;TE;7_~5~|{n?5+QLo}X3FPq*f{VkJa`Ctwfl4x+ zalfuwOu0N}pi?iS(%DD7$aL68n_VM5R6nl4hj(f!rRLtxt8~jk41T+yd#bMXB>r3G z?|AA7Jkqi(b>p0K>RuwYS}gn5murBOtsPn@0W}@LWHjLn&BBy3sNn0L4N6~;Xh!k& z7z|^I=imFo{(A8mxjtZj)Q0~TIKcfaoFU`{9=AXVvpC*hPyU^mCpObBnU=iz-XoPS zr$4svk!@3_{-sRQ$e5~Dr)}CGOuQDO(WGk%5#a;QQN;AqTuN_>`>jk22}QiSYs>lz ztlCk!_a8>k|0B&ZvT*!giVp+he~@OG{zua64%UVvwg_Y3*vG%ViVc0wuG`8n9)FXd z9oT7Vx=?TfjmLiRM~2bxy1nVj%iHQI7TkeA$S|QAMORhTU9p#{m-(g_|G$TGW^7e_ zd<<7tY*hw77~g%mJ(>*g^|5@pJJo+Xf$_UctMQ)u*Se}!=DDgui~*BULpxrYN5M9x zS`=FGigoU6Rpq#PF!s^LLJW22*tE{H?MiNb!L9~5ER^3yOrhtrEoeLE9x}MhYHoQU zuM}Y$zu5elXg~BjcTA^Bu1Xs3$EEE8B5(N&79^K^Lh4{G5hNQy#*$)iJSS2vdtcX+ z_c?*r9Yc&SZuNXM7z(t3kP?_IguP?UzNSRmcj=dWRL5j=zg^$v`c?L~_R$?#!h>r{ zLZ8@k8{?5t6VLoZ86wT7n$HjBu4?3aR-lAkHJ}Vk<>(59gKv3B4BcbG;#VCvbmHCY zx}BHv4?a4;0U;xAyI_NwtVX-qlHb&XQ=dORqQ76FkNcW}^%O^Skz$oJV?jmZPA8^+ z>n*4AJJnE*v;q^lKfuyX=*i2-A0wOFFIkXHd%g@?zLu0Kv)q#Vf5eipj+g6^+a{TQ z-UGWIxT~GakPVT1XTp9RhKS>bnL<5LM6*y{MqnIa@D%f>x0J#M}-Iuu+sj~w8`6+-HmwSqI`EhU&&Yrb zp8$y$bZbdHwRMNvD^UR90Vb)U^K;IF)dTyuyT)CCY0G!$$k0q(Au95<2c2SR{#>VS z=sEL5v?K}DlR{%V{7PY5-_C%&oMm^}(AuGUYSgj-+VoFWSZyr=4>}WO7m{uB%kx5% zV~&a_LsVJ#+a7-MUgGVZ$-`3g)3+-C+yrun^?c(_g zyddFm!D1T<4XHp0^sZQS^p_77M9Wnv0w&17p$H`9C?MjFWR?DdNb_WD5hg8hLd>`t z1Xu=tN#k03l)y`U0*~w&4QNk3?eyY8NqQOKXdtSRGUA9DW z2zP9E2aO3mpm7GtA${?;EXO2}Nom)oCxhK`Ql4^r5cT{R2Zc`IXi=Jog{|QV!*3Pp zYEsc<4PJ~<*a!c&0$oQ&hP1PWNX`lESVYj{1YV&bvjNT9@Ju{-S+AF?sG<9h?daGDPwQ{c`Hi`)4qrRp%>uyMjGt+ zIG5wtyZ1MX3l!o2cO5wBxXYozbn$CFGh>@Ob^6jD-SM%!*Kix2K=4~~j1-W3p_ zQg#)89C*`uBuVDrUX+Tb1M-D;&4UX=k(?Dhy7L<_!4@-z-pJ4q(6#Rv^TugvU*jZu zClDZuVXvkXgYif-4Y==11Lu-JX)Gzlr>;3)AIwzdnj=b>!7c2Gp2wFF0R z5hcdHN4UN=VzwZkXuoHWoMrE~Y&I^xitKSZdX|Hh3 zL-@G3Ve~gen8G^!Amt~w=oG4=a)4=uXg&qEu)tVq5IM~9-??W*0eFljJ2;YXFp(oK zu=K|7#Pib4mme+Bi3tsep`Bm4kbV9Mc-U`$9W%Fb_*WfF_n9&nq*RfAO1a>qm5#Qk4*)dbn0Snb$uh)-^+?)^l5?HWGKGO` zq;K3}5hV5zIXth3H~DNcJdSn+3DTgCAz}z}wV5eKBI+*);gi_`E*QEv79HG-{g>Ay zEsPBz5f4Ke1bD6VN&PU6x!uH8#SE7~J)bU*axJM8?|@r18&#A0J{|x$(GUPqxEQcF zh5vX$_}aVJgtnHFU{cj-c{My6Bek=d=VlK(9QSSA&Gozkb;^~G8LfsqcV^DpE}V>Z zJ}oQWOq0G-RfWMdGTPiZE0VeG;6p5F>NL0@VI>m~qz((}{t99S>P0IuLfdkFx*{%A z4UN*UGXr8ZBT%s znhI`KAOHm8CZZ$CeipuM3zD7?JDHk=LUSM-M6x}d$m&cwfrzMw(a~B{$_^h5AGK*GUzLt9C>ibt#v2){naIw?MX*nO zmUL$LQyGIv{~~PiqhL%>ea0x^fq(zHG?-hk82Ca|(_ZSCpzay=pI<(8n8gW|y&Bs+ z_3-!g=Vy;`Bn9E|Sc9VWyd)kNQ%R4*dMPBHeuV?;1Rwd_9dTQ zLsT}CDdvFBlmfF`WaH7CnGbLqKtMuKDJVX2G!kt%aUx2jzj7}h$a@ns_z6JYD=0ZJ72*bTB8K_8`J#Ln^?;#3n_Zbi}K9C4y`*eu0{KN$S&Z4|aU$ zHe~e6%O%nAS0s;je_X%0d(znq!Q)Cd2-v<_8aJUtwY74odhlU>lG{GT5NqOV2*xqW zqkCAkN=53)-Iiu`Gb)Ha3OUG>Ry)0Zgp0>A8^+zJBW|j7`i7@jDyhESBsE3XmeJ`c zov+Z1mEzr(H^(-Esb%s7Oh17r1RD`vDJ_9Iq0%q7mW?JN#!I=cU(7>3S_$l&Q{c>Q$)vrT_g z4Ls+=%MY_c4m<0ei5(S6f*WhBL8$z^pB-H;6FF+bd_y1#y%Et{gNK>)h8dPp3%0pK zy9W`Z%PF_(P>+P+T|X52BLsghUYWZi-zC7zRgir8(J;I~w2w@ey$4*~PC#cafUnOU zV_y08oE%^Ie6{%&9VR8?wI>vB-19uZr%}tNBawgNb0-ouo=wu0-Tdkk%q$6v`>NSd z-KXU_NBKhpK8VHOS(CB5Yi1CQCx%Y+Q{SoHM1hH%IIr#YoJ@z3@an>TT3@i*A1d5E zc4(mVk1c>^o&$Z6*Gyy34eO|Y%4wIihM695*s^g%=$u_d%J=FC2bFg3CDZp~CIEloHtz3=I!%-kULtU7(Jp_O<{L$ox zCp*OWYGhv(_(GH$X+*@= zAQY3M8|~KQLQmhd&LH=LyB`kxzn!kY_EL00@gDp=`W5ZRG)aYRz;m62QH;QGFeR`F z8{i?v3jOn- z_=aYL2S^p(>3D`LDN-T|g=OL8pZ%4|Mfg@y`d%KSZ>*~D<4@vh7`x)jAcPK7+{Ho= zGaeue%;8d!IMmRQMLOJZ31B1_e(u!J_b2N)+>#>4HpU=;`5?^9v_^#$2y?;7J^z*6 z7c%j^agE(Th^r!r#F=@4*gYsYn#`Tth|AAji`AzhIq#lDIYoj#Q%Dn>qF8AQ0QG7A zz(3CpqyP7X?Z4Kr|9vxHVy6Fp@d2j)a5G@~AKeUEv^C<0M-Wr5+dLlh%qJ2nTF)JK z!%Q>=Sx2qz0izp8uETUp&Dvz&cs~8`n zaIQXLL;gPQ&E3}ez9j7Mc=?RD-VOYntL<$+Y#5^b`*Cgi)@5~m?3(>HP2bSf+hf?{ zCQ6wr$~fuRhqcMB)U&B^<5{|W`+0l0G<%Kl{f|EGu~zjn;I+qf(zz$p^{lJ0<5SPq z-!v~eeyiY)y31wO>88}RDDC1Ga{CWwXzkX+2XW$6g2U~&#icIt*0y|}e8US@$1qc@ znjQVHu-l*uS<@wVXs!vxbZL*kNj>H47crA5bt93+{SQZRdM3Ta<#pjTW%IWCyna6N zSNktV0aQD~9B^d>iFX;y{1Iq~JU)bpkL-|r>==hQk=MJ2TYRURDDaf6CaJPJSgiO` zPaj%kn_~N|1-<|Wnev-yTm#HHdxg#0%kG;lg@wZ&8hV_Q$uUTe;9ICvSJ&_U91NnwC&9URa_}*x*KZNR1rTx>H!j=c3E+O^jsa_rGrZB`&1?R8HoW;RKPWAH zvG?j!on}T7_yA$Bh12vO4=#inOq{T~6Wh;ws)EQftApg|?P(VFV1W;Jw3FP(^%`AI zY3F!)1qX<(e|O8$NbY~#wQ^nDd}Tk$KKy6g^b%1Xeql^=m zsgo1}>+7`yEc#L-b&&N;dvJej)ncQ(K6xVhZ7D>Oe1i3YT? z9ceUjAH8;+bb!N%`0Ew8fCo0{e!Uv3-by;^V>$^5uaiDSkuMps>$otkJu?Q804nU30wGO(Ns0Ksi|cmGg1PmnSFlG(`*%no@-VJ*Tt9 zDM9dnSV}j_2~>GRtjd3K7%f+e72!x81#J*^OxJ3iDyZi<%RuL4aX^G22p}e;TujfU z0j_v2tlppa3z!5=K*RnB2a-pDc%2_v6FLF83P&Y4-RmYol*N2Xqr0%v(>*dbG4)jc zZ8pAxq06O@SGC!JA;oO)3#TnHe?{npMM-rgk{gmULVT*xFTEw@j%wQG9cXr-;8Ck3 z3Oj{g-DQUHMh`_7q!~E%?Q9d>H6~Y1+zqA>^g)tkqW{YOjvG=%)>su zDDJhW;YiaKaZTYVZD}SwLOeRRRHJ>F*zD8&QzRPubrc$*s2S!q_9$ryafl^{HT=O) zAI3b8R5!T7SR51Hz9%F+SMNI!wyW1XVST~ySue;OmAgu&T6l$<;OYD_4;<1N#9Fj#Mn`}#)OV53q>{Mv^FzGxXJQVMa{opjzeWvi?&_BQ>+gmJD zx(6;MmC{M`+S8yh>j(Zxxkj$XsW;d4oZdl_!#}opePNi@#t8*K*ffa{f7ua;KF+G| zv@)T>sI7S<+)q*3&C>2+l1Anaf5TpvZS;c~H4$CLD@z?;M#{3nDg^_lKQN}~TFL1gEwx*8ZQgkyFt2rv zl@4+IM2Gw&R9HilLY6ZJ+)4f0h9DQgV}C>Jcclj=uEjm+U*4B!H(kW5Pn)bzkS3%R zQ9y`WNE$Th6ZD&3P{rLtjwcF(|7?AQhtD3GbjLjGoxVp||dHnQx8iVHh}2+)ufrAfF}ubl#7 z=Mrz!BHi`DbHM*Q#};^m%9RtI@-^{yYYGlS;9>W6ffe0^qi->p(g_RGVFU|6;0BK4 z-J??Ip0KqzJWgo=ig-XK0Ebcll%*yOP0?G}8%4JxkT!uV;j_Q@<0^)>O^xzT#xsvH zo1wHW{i~-lyA{m*DD)-AbhrUS5PZh{T8g-a<|d?oX;;tswh%5+FF}eA@)&lEGdiPK zZM6RdL8b|Y(c^1Ho*_s!&g!-lelEx!3Txpz z<`SNYC1|3rH?lG{&hh95c{b`Z*Q73!wwWu&$)xffxcWspI0acTewcnj%y11kod_l2Xty;~r-J z!Y3Nr0>b*?i(Q1(lq1^EX3IGnMe~G?Fr1@d+o|}@S~g=T_@>-B6~qOutQMO@W3()6 zwAi~%h!qF5Zt&H`Q1FXj`#6S(^C=l@va?>Ot@CjsKO4w8`V`HBOMopyw=T5Kk(8Wm zjk7mFC#+K$v3LN;tuv*6C7vKaSiU#Nl_?6E&|?cZ>+DA{z%M$vE^V67cPzm!QZJe? zTG3lec%_PCM4ZLE5+y|&fgeH!)xa-A!wdjT=%*E+<)a}WK9v~hVF7>+t*p?Ze}3DJ ziIyxzwMf+mNZ11AFeHv2#~&^LkiP(g%85{aN^CenfF=zk4QR-xbVEG>$kC!?W_aX> zTY;LhJ=CG)VK0^d;jv@~?)L5M1Pg>dExG&>W3qN3<>XSQy<@t|(3ySm1tPW`OoX$e zopzOn?YE%6>Ys{;8SXh@Yn&F;y;lj!vL}|D&gk#vCnlA0mpS_RY9}n)4zVFQt(U@r zIBUV5-XLCPg1rt>;dc_{a!O8#yD=#1=IEZtx8s*wLPEBq!FmEysJh2q-TgHR}z>(i$R7lLaum3!*- z`&!g`SWvF|XCX2R;1m~UcHk*{S6+iBnV_5&(~ba~5^ufH5?;V=D=0taPv#R(+Jy0m zrNbaaVcJr%YHdOG%-dVD!lqVv^2*x^&cn?0RImpz;xkZ zEP~1Tb%Vh?_Hqxr%{|=f=XC+dDYwSPfz!MA4s$|Rd+CIY4Ot|Yq234A`yBs z>;P*Rqqzl-od;1j0`JBPX&>D4v+^me691t?p-6QDLIZ1RS10;M?nO!Zt`|ZN-Fui# z?^S+<7$zg_&_#S$`bT+-6AQ?34jB+=t9LY6vQa8wB=X4nyC3Z|;K?)IkL)u%6)WJa z#pUfWXuQGg%%#Ml4lVv!fkTXFD9q!WZtF8G(8W(BJ@~REi!jCNARRu0jAlU!aExRg zHz7cPKTfG}Wo8)CJW2nU;M#xn(dhaV2;n)#sZf5p{qvR`gPv^M%8pz zG;s8cOaf=4Vq+2?6aVIdw$}vBA&HaKCs4p~Bjz*zq|#zZRY@EX0}}y3b<6n3F$)D; z&wP=bSf&=iv*_Z}7!cvZqh4Im;w_>ArUo9>sx}FUnQ0UK*ItQ1G+W@rAs50i`Q<-o zHm7eAv||%?iZS9GD7RUFM2W286#bAGxX=N#EW1jCFN7|p)~({#pouq5w=@$j;Kh!_ z-?znj6@P^M?h8c0XVjD-XWy~gF`Q!{A7?TlSQM_yZ6es}gQwG(Z!mUDeJ%A%fDPDK zb^MX-)+&cWEIY^z7d4{xxJ;VS@j99yHVwF!b|;bCwGWBBUFI7frI9ECPxx6m>;<5u zSP{o9QU{l_K0~S;$(hO+3>&h7Ssa~k7s2^rujV+w8fBV=@_Y(^9wcXac<_( zZ}T9@5DCqWF|l zV^E;=)PbOpMLY}j-DowK#MRu9owZNG2^RP+y=$j%=+X3jE8W=DPZP+*Dmx_ADq;O# z$mrCp3ue_JcasOhAo(7#T9_tELr3-3T?k`2RV83>xY1@=8i5M7oC< z3_g$;rxTjr7Ce`5BSZ4f%(FbYo#>*X8zlY5iJwq_lstR#Wi9rO-f`;}(qBW=Ll9&++-c5e;e8tBs%1lv_=S z3VRO)^GQbliLsEO?TL5_8jEO7WSxJjxOuyI*?V8&tL7|y>H}>GPLTw~h<)dvZE5|+ z?dlAMS00EiFtKx;6V8QO87*_V4*z_`l6EelW;*WZS9xj*#O(@)sdP2|BihfFhDR=T z49AM2J=;r@5{odZ?Cl8$ZZu@8Xfx?0WS+C?7`Ib)h9q>TDG!vYRQ^$39 z%qhOOit+wgT8A!hVaRFKDAT5lsOJGbKU~<}O$j_Z5Z>iJ?v`#g^6)-JqTI|3A9%jM z4zFi2q>)ii_~hE6z|ZI@sEe;dkS!g4zonlU*lmnUkE7EZ8t{?^pG^;J&O;!ho^Ce$ zINMO}`4lXux^}767)E*1=YK#)U7|;~Zp%)fdQ)5^-T3y~A{ju|e6q%3{*-=kNvBPc zA9OvPNM@{KVeKn@^7d17hI!DV@9~V93_{t&7&GJ21f9n;wtkT)G--BB1gA8*Q?LEd z!2Y{C8!JIMSaj3wo!GvmalYz)-hO#(8Xx%0`Auts_C}B=RA~@98engeQO*jAsGE=4 z5jQPvzDQP#NN(}6Llb&}QSnA^Yu@S7in(edEA}Pa;WWyZ}bdBp%Yj)???$6{$z*KE+qAUlXjCj?Iu#BS>WA;m=IsMj^i(;W9FKkPe2}@7gMW19hS*D> zr`6NwywzP4DB#E87b8(`jL3|6Ju-;i|_$(>BEdqs}^Gs=Nk_3yW-mV&sy%6Z| z1ku?{1Z6{>!4a=37VU}h0LO=RJ&sP?`6>YkYSoWcZq9nspa`053#Q<7ERiX)pWv`4 zqe#whhC4Vdm3OH9Vvpt38{7c750mu)4O$2tKYppmmf0EAH>7iEj~aNMy4H#=nl(x3 z^--@zxzruc{^dy$5xJi(V_j~90Q2?=S}8{#c$vkq8!{O)9;!z{snF^ZPtuOo zHN7yg^X4(pQn;JyR<;x(=_pvrQ#6Pj%6ptFw@GbC0HTX)i;kpV?n1!XgL4CODRJ`6 z+WRr-D9zP$JD1h_81k)!YvcNJen7c zOj;Sag*78))DtnXL|rcFMbfZtantro;w9rl3zi~@5m zAlG*Cukz;o&H2@76cXbGB|Gfhhq4AuMS0rmsl2@lH!u^Z|Dm>D`3@R9Vt0lguy8pq z4vsJv0q2)vP{y-uhVyCn3%d$%2@Jr1I#u3&68JFB9#mM~u5>hsJfc6OkLYa=)(Jap z+zI=Y=W-@Bmg(X|^ZOMgDDpbB}P3#4{3Fo3>L!*(`~gvdU;P zr_`w~Vy_9Q$ED(pQ(N)S{psU!5Ml2?s9Fv>s3g);shMW&85LCCC_1_)5@Y&hcr~WS zTs3KhC*FMQl^X+i-!B+tApB1OU@KZ~Sm!Aa_M!$BtD0VPz zUvyQ<%SVdgik*RJz|iW^&^m->j`=W~Ymf`Pd%yHg2py7nej%pi0qh;q5m|^QVAMhc z7Gl$b?@(Qp2}aL;B`fH9RPW8@m6GY?QMb;&E6(kzr(|B#NTcFX9J;Tup*B8B?Gy|I zL005J1^1M;>XHUa0vXLGXE^K7Q zixOwn)1=Z7W_g_f-H7k##O{iNHFAzOihu)>`N(i0V3~(Qp#X2PgD%~I2VTfO0J;J_Ke@dz zZeT|Iq?JJ(tzyX4_3D~v6;#CG26JAakF3g|wNiz4h9~9srU7TqD36G5%-Qga1v@YI zHpWE zUPOHe(}5`BUi{n*gL&;SnQU|zn7J1;w7_4WZ=EEQPC-MJYNn!w9tYd7|Ms^c@I}|JPFK?$Y3z_D5*`cl$67)E z3?woC3eH<*|4j8YkV#l`LB@wb*;j!Lj{WS?YbXbQ2Nla}{$#vK|-P=RMgBFuGAm~>}Qtls!n$=XQ0<(@c8`9;5DZUHX}DRf1Fszbsj>0A^) zS#a8LAl*4DO)0&HOMOOB%ggW#NceMYsNJ&7YjSHp;9z19{Bh#AkV)_+6&ND zApHN5hXH7j)}a8Vj06OjFFrxGsNL0X+)a_ z9H{$VO3%;yf`p1j-M{QdLrCxNvIE%MV1beov_ftl%EtLl;{V7THBlC^E<1fwX5l-1 zi&`D#uxuk{(w^$3Lz&lM4m(DH{%2LMgXJBH7pzw|mg$KDAuCNP)IsmkxQGyK;e!NZjo1@^(HUs0Ewf@m->ou$mKzfTesD~DXJ^)lNZ|%wBAl9FRa_D$ek%^rcx6jdQ z!DGRdO!CSHWM`Pc;MI5VLXghNBwc$rO1BBH#5gXK!+@zlIP4L<` zzIw3oPvWK$KmtDDQ@?TrP5_{<@!F`OPublscjm=rpJC$KAZP^bZUD<;w8kl7<4~J-egh~-A5Xp2s2E5Rox;gEYxMLhqjN5X1Y*#^i(~uY#9jQa4 zwT`9H+mX)!gv_!I|3YWDcD1f>h!{vhgX#5w_B&K};(pC40Us%JhUwPrV_%#UP(!xG z3(FbnLz6ErDwngW(poV6qPJ13E;g|wQx z-kql=T`lj{cghZ&b3+{&nV5m=SEpR3?Db(E$$?MJoMkRryamcLg5EOW#nj$#eQNFl zwp+l;>ox1aE_KJFYH4o3sX{bghoo1~SS55GV^P*hFrc5M_j7*GFx6S2tQ_@D5CP)j z3}lrGqI(As;3+xQF4k^3JnA0$%2fiY%cDXetg3>auZYn)1YMv6f1>k zar@yKKT_9;tn^wn!Aivf&_hVlI<8dwgAER}?s+@tvFhzo$w5A{ZZD;lQ?1uY(>gwf zuQ-hP@7)3(Nm{S9YLcjhupcwD4HQa3?g-`61NjB*1Kd%RJYc-}96- z%K;X|7vVP+l`+2OD(oC6`#*LseJjJFWcsEjK(CPwIu~^I#ahZSu^K{yN9Efklnz=_ zv~s4%)Z8trOG6cu_E=(%qTZ-QYcI1}pb$kcJE&H(4)5N}=%$+agYX8?gZpKs*j>KL zD6nJP2+HW4i>DL6&IN^u&SeTje0s!y7+h-gjpVl{wiYkd`8Hd$V38Y@jg)AVnb)V( z$T~${Fp$@cOY8CMqs$kF#@PuAT$)gDt$i;>bb{)8W9=0xjeA3bm0GguX~@sq9d@ zr|G3s=!VfDuFUJGdY;m8GNfeyKe-aEVZPZn{hhDo7+C^dA6Whcdv_M)M5m13le6HMf6Npv8?T zDO08hj$gL<>}e76s$>g{4EcS`J%hXq*hH=i=4>M=50`*5Rb`#Pp$)6?Ux8oq%Oonx*C~m*eD8&tA{7 zuDUjlm8Ld?RdBU0q~(5>Ly1rJOVUZ@Z^W1Y`G8H2wPpdg(&hmYwUfEX548=a$yM3` zQ*FmG6ch#>=2!-j=2~4LGtED+uXzZZX~t(&p)LD;!9X~WM@)g=A1 zB^bgF#Q(!0&M>W|N6&Jt38uYjcWK}XA+jWd87lU(8)MfKpQ`UD(=O3dB%pn_O0xL# ziMV;hlBBrSHbzOmyJZ1dVT<(f55Yu&oakoTV*$Zd$Pyaxlnige5dLt4DWpM|R~VBa zEIFJ;kkFKip=jrY$0)lUHMoGoVAZx35fd5uCiJQNNwiekPYuCb8d{C(geF(klF)M1 zRz#rbk5y_O8-&A^Asd&dogiSWz4Sy^yrXTp!VY6|{y@jHO%fmg zK_aHLFsF2hZmClKM^aHZV)t--E6lic)~FbU)qNv}B)boj(5t;M4vCV%dNx2sae^Ri zPhaBRecj<+8eQxh`zZju>B=yCTdxiZbO6i(aBxf_{=T`~Zi&2z8ERK8YK0f6_uk1z zfLICHEh0~2ydHZGONoNGX&nJv$!I;bKmoQ8`4#l_g5iNtZfrOzdxS$ys((Z5lz6ku zT{#$NuF?AXr5G&w>?<6+Cg^}`1O&B2DN(=xS)mYjruqS(;B>4Q%v)pZ!q~UR&6JrV z*ydv zsdb73*HC)Lm&QL=@VqWpCa*o0PVL~G+cV^5;((xb*j+q~*^;R72;4t{dW0ZM>ePXI z#FiqiPZc!nVR;GI55}0V!E^yowhnvf!{DcV2H)^I@ol&+uQAzZwx$FTr@omm=wb^E z0ScuFG3DdVx3BKFKA`@GcWe#%+J*wn}qs4AC^j}CxZb}WZ zq0vt4*#W@`$Qbo5mcjmdBcw(|L*X?Q?K1?KefM9ZFJGC(OBG-M>5oEI9YyYlFuN~! zF8B~AIf+#F^_%QVf>_AmxJ2zoI*W;!ze?gY%Wb?)~!)YxW!g)@BF;pR_@f z|BJDAiVm&Knnq*WcCusJws&l2$F^95NBx`i~M$IeY(fCDF?Te0Lbt>;I)iH-s@T>Zgrc}OqaA)(Hz+h}2fr{LK!wBA2 zS}K$37Xq}@Ldh__lM0NV2Y~EA`1d_c5lB(TYN$}IcvTt=r8Pt>w^qy*0IAk$5oR6` zF6HgE>D(1Y?o>WdJs0)Q5tR9C%PDiJ2P)sAx=SqK83ujePFXhGt{VV`_|?n2nVusW z?7u!1^4G6Hz|0ic{p<6^ilTOU?+1OpbY%|yVKD#yO6^Z)-G7x@=6_IXS^g)bwn$Cg z=BE$Y`?zLjzaD_i13!kxKQ}0YC@dZQ7koLqh%X5j>-@rZcLVsSdVD@0cyQj~ALkz_ z%*G`7O@nF70`2SWc(Km?acik#IDFA&$4Awx>R)Zh!;5ua#=w%*N12TM!d-1u|7}Bl zB=}Do@)k~o)K42S{J+|emH%HG@*UMk(es$O{cK|`+8Ts}H@wBaijO;G?TgZgYy`5P zNmEHPic!aY7vWO36~T29_>kuPPWFUYPc>1b(phocW*1GGN%xFgYD6)~pMk>NU_6*6 zU(zzyEj8NL`Wea`%{kboWrxX~>djHC-di7W@}L{3$AF88NIF!&x2_6;onc@j~FKqq>___KN%>oC zHJX7B3|6R(_Gyz@P~o`n*Y>@i7D^;dDLQ$XGDJ4J5l9V-#=8lD3U`xy7D zaO?+=9W=+*WnF(!p2Am|gbJvh-Mp;~rkq3?P$A@sRGy&1MaS?1fyfX?_N$eCN!&qB zFmN67ML$#vpiohskxiUKs5LyS?@`rrAS=y5I_G(~4&v(ONWzRf?tSPRaHytydPO2FocdjjuxxL>gbN^=mEbIFA^9w8dEWj_PE z2QMJmK>9u3UAEO7!FG8kEh!Naa3+S98???>33^V(0_;HE3^8SvjPuMHOCO022Wm<8 zu!u{SS;&<8LJqnbBE-z8m>D0zDwf@A>IK7tw_J1lFlHX!EDEEAdEHXEx-^{DhK(-@jD7n-W}@-QV4R zcU7Pm<$uAk*%p~2YX(%sBqeeh*~a3O!&@vryavVJ)2mBc1s420fF^C1-j<;RTxiq8 z$R!*()l$b3B3~k8w@&lRgV!MkRDg|{)8Ib^RZs^;c12n&28@g}Wo%2{?4%>pr0N9~ zM`#nq`ChSg?NiXHp70m=a@$}J{1s_`b2b~o#@)@#t&d5fowEDM8XacbcndKA+B1wE zZ|!5k9@Q2Og96n}fssl|XG-AcIqE>~dAgI0nkkUd$Bf9>30s9%^+G9kv+C2oD#$N@ z*&5Lzsrl!NvYQA}KUGWI;(8|a_!t+-oTXtUZ@(dJ@Z4&@PZxgcdM~`eKj&p^nE9kM6JpoR@H^nAHNM-y@$tu^~OS(qF`oR-XHKTb}4n z1M7>i8x;o3wRVmE0SUNeu0RR=?{TxrtRRohoLRM@BB=h~FmsquVll;-ZX91hVj+8C z0V0+WyLjLxVV2)#4(#_w-Tgwx<1h3f_*<$JOc-AX-LHrbyHJ2BF+pT=1w9Y_aGgD1 zzIQT49i9o9+tWYAgi|$yE<(N{-pjzAWNGZZwu1prKt)J&ZlBZ8G915pp+UQ#C&P4* zHe6Ld;l0whng8#@|L^Dg-vQ3dO#dlYWnlRSM#l0#F|sOk83zoulZwt}zdGbEFAaRA`L!(d-eU5x1`U~t_fw~yetMW9fJF zE-0uZM-Swsv6+&cH5qVO*SmZ#(EtpZj;9h@Z_Jsrr{|CKI?0xvAyZWU=Vr!d<|>26 zdLvp)f&F#9IhdaWXLDye?3vR$Ed!60Qv#gUr%@xD-9aDL9%Cg)HcW#2^cE1TMie=D zmcVdz5{xe}MdjYUYPdXFERK~yvh2cGT|HtD&Y`wgbfLYM;3 zttR*H=J%Tw;t_Eo*DE@iaGCR~c#>vSk--7}~jylH4%`u$wZC=Po3<3wUamodo$5(fewDA zTb0>0u`tZviu%Hql?4Zkd8>#5{=eR$iP0-khRcujvw;UH8={(2R^pH3O6*lZABr=e z4!K)IZTiSV;WR6#SBd0?5lscuJiz4)N$*TX=a& zh|lBIfc>&Js(ouE6+YS98~+xF*Eac_!jL*8ro%II%^nD2KU)KZ&z{SGC)%0V*Beom7TH!CVkrqC~rvd1}UjDm*&WYidl=+IHyDB1w6aKdV)0>uss)6TqYl%aKZO&m4pA~Th5yPYYp}Ok+B$M z6s$2v@*2XOUA`E3Gdbbws8^DR^Z1rE&c$laFEFzl`U1&dWT=PETRxd7YpN#s^a`Ul zJl8%O7>96q`24}nSHfgYfC6YD`uyYJ!-adADyY}ZP0bf9eCdV28!X37pK@2i6y$W` z3c$YuT-wx%Q{c$ALXoSZ!G|GD;0aZzQyyaD9V2GRy7Gv`&4dslsC zI`D2aD)suW6nS!UsI7^)sj? z)Gah4CMN$b2LFI!o&+X3=1d2Ym_l&CnX&yN*pybb&S6*}FtVWH03V87L7)Gt%uXWX3H=3(nO}pWhP@@_fwT(h{B z820_({QJT#BGKf7q%H=jOz$G1e)h*pB(0J^h<*6neb+57FPmv5!xJ(-4>@4PgVtmAtlJ0&;akKnKpEkFRR+8cvsGtu;YNmkc;?*6>Nuo zMKY&3^7+`9hcnPlQpXqwx$4ikC=mP(BB5k!9UO1QG-YGB>G6$&%UccUcuM$IUlvsw+{R0ExFqH$_y3F z?i#WAUz;~#5c6f*ODX7563S*y99<&_EZj9Vi%6SWbU0>c-g@MCK;J^yHZ`PdNLmoVJTrA?hpzzoYhO&P!*px) zf8AUSqy)k5CpB{Q{V7Tss(rlv?djOCQWGZ@jShhZUB_`@u&9b3p={)1$sQ0K;`4gF zzCNj|yLz;_AIzq^|Lu|ygB=Q-{&9S1bsvKZXAcXo9~@!g(y%+hMT|-!A*y~eIRmc6 zu&8#4p<2DVX}#50y#KNjv@pZCY1Q>SL9yI@)%+50q)7Fr2L@h|d{X(n+#!=9&*`1G z8%hw;S`4^Za6h5tvKn|C$9(n+noBv>a(%kvra)DtWxHs(5wZT0tTE_$Dot{OZ=YHN zDqt@kp-B7P3n%YKV~v_J52$BsX|VFSE;L26e0Pd#x!IHJut6>l#ePPRm!b6&#cUjo zz!DT7a4gCi0FdX<{Fla>QME9E8AaQX&Y1@=P2eG%{zL_|Bt$Rxa|zb*>v~HRhJ|gV zJ6Z_AboFZkaLt;(u}8jU3t_V}yt69-Z1bJ}fE*H5CTamZXgOc;Y zipOd%&Gze&6ZpbUj3d=di<)&{FLoXi)XW;4ZiziqjmBvv4%INiB_9$xMXnKqa_PBc z4ZJ|%RXFtFzZZy}qo8j&V;-96C7&P6*W&NuI$qL$?EvW}-Q?Qgdz^BC^hvV5Qo%f| zMB$)FknzlnsjJso|H{6D)IHC9X%O{#a7r+XLEHL%LLxbioO*$pIJa7lp6u_obIYI0 zDI{6djH8jvOO6*JJrZZ_TVISw|0S+w-t~pFpt3zl{f$9He>MIjPhr2@6Tv6kz8i4( z1+Q&@ab$B8b~j_@nDf|eys5HF7C7T06r3F|h$O9rp}>)slBz?Txs^zXffIGyMe&=b zwD%o!q~HN%>dtnzFf@BO3jSC^t=J9f{I?!*d9)>xD)j@-2W5V4zB>ZIe8CRSjJ<#B zP^l&{9Guu6;ZA=Jwacsp){t}ZC=JeNBjD)3zM45v!%8HYQyo}(vk_ti0y`g+^A;Ww zJBmN2$c$3dofSK)Q2lX@_U$CFjJ@ty0r&CJ@TmH+eu@+%b)#h>8*^9Y)IX`Z`O?On zE&QFhZXpf9v)99F2&OO{GINLl)0f>KTO|uo9JA9*U<%Gn_;>QakAJ%+>-2g8&p zhPEyK?9GS0;IYF_@yid$Ocr%QNol9sh4Wr_zBX2pqq@kO2a_0pve+Vm|;`5@BJTVS!*|PW8|Uz5EpZ`g<=+hwGC2OQUziz)|{4@_8B61 zX-JkZqI?aV3mxBs1GDhCd=dVT!1@gbRX&y6?dj#p>jyLs^yVE40)yURS60A&7$h$_ zYR5BYSVMr1tX<;durt~o}Ky8MVDS7yT~CJ)GmV1 zt|Buula4u(-ydIGDJ*{R6LxV8WJ%DWEHP#^%ttc|hM4uf^6(m%EMQOeI881SMi|%V zM0bm=S&XUuf`_hX@%s2^7P0J}Ki*jhX8eTNarMe96O0}*>fjY6JV)+zi7sR`^eD=Z z%-Iu|4<+L8Us2hCThM7*(!MCmEFRb4HP(N=g?_=_jZA044a~T#O@p^K?fab;qx$DM zZ|Ebc`0H)oz6a=WLoaF=BGJ8lmKPc-i z$tt!~kO&VpIy%GWjJMsu>OaOheD=7y91uj}`^G-0e928^=Yt;}G}1U4{{84|D4|y) z{#_grfLukN&_J1a9riWBfwugvXuDu4H%G;cDavBRld6}qj=bK~IFrGBPUZfi-w{ZNB^uPE9j}4{u3@A_-hQ? zkA>|Ja(JX*Eb3Xo`ebIB)w1d9TQDg>uEnrMS!NVDk8ItfJcX zuYoX0H9xg&i;sjsDUJ&9hk-5(7UFg0;-5|QBvHAXznIfwb4h)dqf%#)FhkIp`V4lA zwq;CUQA1a5eoUpJgd!JxMWY}*QSSl0i))3hVmqP<15&+l+#qd~&t<&a?U|Qv~ ze@{RB$U+<^KAJ>umEJ6%o4{C(@Fu9BoLC=0<*E964-5{S{4~%?2cZ@ML=A6r0azCQ zJQi~}FSkIF4C_d)kDk6W#mJ5wRin7pHw+I$R|tdl0k)NTD=hw^j|{*nNh`y?n3zNp z{hVcR(T!ynFvf2{C{clmCy^U7>r01A@-7>K|k_sGuL8QC) ztXwUx@fy)qvx!rZdLC`e#5#-$xLQQ#EOtp%Bk31vKV~$yFN?n&#Nrag3TtY5?q6II zA0l{9UI;HC@#vI5R-ThlPSzT(3}Xf4RjV*CG&5?{Xkzh9HZF&*{KVKljw;j0Xtr!Dm+ z&?W9XpR`R_W058~f3WJC(?ugFLTb4$fqP7k+87)$Z_U`hYEYs3)bdTb_rquX29EBrB-!Z(5tc?FbO|1VQf3W^f^2easdh|Lg0_fdI%?z=!5_O2nQ^h z5}OyqUG1tS>`I2wKJ%nYBmPDnd4!NevrCgz0D)S1elXK9&J@gJ9uf{E;oT=pmS_4WI`jKgV2r> z%y0qdp(hk}yF3C9AjeI;sKMI5Z8gyoV_R98T8VVLBceA2t{_z`4nOekNNi{sF)>4M@=lV~1jiEl04fkN)GTw|>s;@SxY(6ED$y)E5mx^p zBT`8<+hjoEez0`q+MqCp71QDf0dM88v=XOuHP-T55ovZw4v~p(R#6evoSaev4#&1q zs&8|r=gq8=o%%fnm1|QWrgh=_sUS7k`dkqsmP<+ z(-+x`lP!h;(p;(CD@>?#S1mtxb;3;G-&eJ2p{S&@=*trg7fzPvHM}e1T^A#7PRB4C z2l1ZPhA3IUp;F5D7r%j^grTG?8!ZKuM{^yOG_{n2X=w~$9;ihrcyquL(;y*mqDW28 zd^?NQ054FGVolSs7VfHQH&^N8sAum;kupSNyx=M*IkiDErLa*@hJM{6v5ogCZUMZk z2+t~7Q4?)E6;voxf;O5T10Y=EF+EEA+!G3sGuKQ+-p z!BWl7HX0ts(5Hl8S6qmjbpL*ro%D<-O*d&5cVM72mOd_o9+B5XDO@6Qd-VMTgUHgl zaGyj6x3>}2Cmr{^^|@5R^c!KgCLx*|L?E?0EG}3QBF>`4 zH(y8^vSBgbyIXepPMOETonMvo7I`Xs4!%D318ExWu%5`FbY>ZPW@_jlswC0!yxiI- zE!C4iA{+{es?XZam~ZX&w#Wv)Fg*fWDN#n+`Cdyiq>c^|4BVXXL^Oa0rGMLFUkZ!F z23ic8W7W~QR-hlWGz2~Rn?r6ON zq{727oYd0thzSooUDg5GKP-*)l>Pw<;8J?Ol=|3j65~a&y8;#C6k;=vwwj| zxKkbW_J7!)8s!KoQ2`PZHTP@z`@!6 zCk~#a+$Xz1kI;2Y<>^RSb&eS`{8ZNn(Uh+g)QCRdr?^txD3xcaeEXb5LS{!mjigbv zlon~amGOMhrM%=@fBEZM$FjU-Sb*l5vI6d)qtcq{1WD2927sQs5D*1sl2WEE_TLkW@tGgF+L3CQKIW7)QnRu_jw&WWkj)>N|5(#T00p0c%Fo-9}J4NhN;D+Ns5er2HddAlr@_r=dEmP!_wcmyo)3^ zG)V66DTFqIAXoJ}BY<&MkfG^8lLosDkw@Ic@o&VTKI{}!yUJ(0qoKF@Lw*LL)5rGg zzKAXQ*4*^|ayJLccoMDHrcALgMBHs{8)X?)$7CmL%DkKi_ z-v{!D6mUe5a^}A|Li<+Og_jmbs}r6VhzS_b)fgIfE#nGqOA|3CJ;(hhQ1{t@P2LY*fMAH!>q5mQ4H&B1Ui#yXfN%|#(JLr73Q1}PI z^b%60-Ws{A(Tox7U3|4P61B<>-mW`MO!tTU2o!}4g#>IvJCh0A84>mZcS3HPQ*&Hd zT_Bdu`36y&+bJfy+=tQ%bh02ZK?SH~Qi*HW^29i{c+gYN-*=$G1>N_MMHBgAv#KDS zv5HPUW!#C|W7WhMx=0hDB@EGx&rKY00Z=7-ARx?2YC&@+BYxVj?%TU|;&XMKscMk} zXrWAPu7_VHD|7I}WaBhCQ1g$)r5-FE@uj&-{=xqD@4xhznuqc{{Xhw{wJ{Y zV={>O*)@6R=+4GmiCbwozq(692!=sGV7RKgu3QX?cc`yeMSnh1ta~Mzwu74?3O=+} zoWGn^^n02m28tH(_4k;vW&E=7ba3iXm~?paXnL*pqn?5J&fH}7v6LWZ22kWE%D6lf z9mU8LAWz3}51n)bgCb?!0xP3uUeA~ev#rXw)VyJgMc+fkHJG~?oM-KdJgIV3;BAn_zEyQ! zVhG-$bfRlOwP+-EQioh4_!>n*i;PNo*kR3O>%T`>zpe_K3qYSX^`gS}-uTj%C*4pA z3^bR3WIiF!F13Jw4L~?L&Ij{7KaFIH*I~=5V`P`2;Np}13)4A3NIbNN*(R<)koRXm zTM8@@@K<+}f+z?}H=F=*S2jt`6y*C@(j&~96?W4DgL(D7SjR8RL^2U*elsdujBQI@ z%jTY}!blm&uL1wgKU~NG%qUApz%<0%zNo_$F|oAAf(!6 zx4Oof1u%WWw_Z0uRCjhzU09#Oh^bItma9KL2)YhTG9nRYVJ-xG5H6p-m*I~qmyJ!0 zSWY6s zX_15fl-1Iud7x6z6h*p{7_GZmP(VB7-62e`-k)U7?={PSFma00mjO7GX`wAcjGb#| zDc4)E1gZzQfG*mPK`P@s>Z}^&Vaqt`6^dAd7xlw4Uh_6+v{Ll}*QJ2>2%244Pftyc z>Xv5!B+q1v;2rII_c%8ai}gbYEFvo^ky0gHuQHG^U@hu!W8!6LS0$7gUj^uB*<~}C z72#ZC{9d_Tz4$%-(Lq&SR-sIKPs3H@xkFjqbM-FlDWshgu|}7bpJ~x%Oa#6_$tY}M zA(%~UNxO;W6wPSQihR{LlQJge!8PXs00?`VfowUP>fR)M9v$YuB3(GmueJ|JiHIgc z__3oz*2z-$qT-wFZVk2;gK86i^CLL^mT}#fPRu&>LSAKK4FO{D$5Qs!az@MW({sNJ^2vnjGJCqr z8f?bVxSL-`l~i9Wd*IuPeQ1Dln|pPwv9+7IOrM`>^bxn4UwVGJH`X-;U`*)P?~K5% z(q7(=efQEdr!4WYODanwd%P0uDx);`^A#t@Qr+h5A!j#$dKjPfOP| zD#`Y${&xpF6e=ztY`;b6mkDUw7RKx&En_hALN-+3kc45T*kl`EA^KV)S0hkz8k&+Y z*3)#y1?ImB*|zJ~Bh5=n^3iBFa8=;#mj`|YO}|YDs|ti1vVE>%hYHdT;Wj^*8$Mo{ zx2K5Qe41S3#&d3YdVEr+`RL}{cFz|5h&6eyWSksG3>%l;7rL#V>@k=GiOn07U@bpT zagyS<^!wsMT-)vG*mHjAu+UbY-9#HO%D`|3OVAV0&`S@!;L90e{~`2s<=_9S9oe{d ze)`}$)FAeb>Bjw)B(@wGOtqq-8p|DFVKgi?|2XD#91f4mS_HrAGAnV&{z2jSOm*V1 zhQ&?G9EbQ>^nEMgLY&&1nq<6ZTZhryCgd&CmH||G=fT~ZLy`cV%F1m{r$p&CjQyO^ zoQ-?{s(5YSV8AV5-MRGvKUE+Q@qaPYzn}j9XGmcC?;eBgA21aA|Ae6yHMCM6dMKbGPO;)POP=o_tze4ri;WSLb&3cRra}2g6pv0 zL^d6+mI+yGuqc#>=X>s+&#dncp|>|W*GG=9zkC|p8Wc8vTnTOM7TsI7g)`)&g$eDe zpY?G>V5Z`SNjPq(8T!%^NDHpmfrT>{SFC)^SAusTrBTXNw&?2^1rR7};}KOTq6tY0 zUrER0G8%7BkhAU>OxQK)_DCdchN%A#(l8gXd0OY#JGTa*-- z88&o2lQV{~&0UhqV-mzd@9v$CSj87^YE)MK*0)m`c26DA$PyZ}AbM6ozlYd5Ofxp| zy)9kbV9y)PzCmquwJljlw=ud8iYP#2J_h`xnw>DbVcB&06M3e3{3I;%n?JOk)|?(^ z8jT`9X6SmYerk^$svDwaPaX=bMQqA=2%4xbR3lf@cQ!bV$&(u2`qp2B4Yo*~>z)jyW_eEw5NP?Rz=cA~&qNb;mmQ zdzC4J5b1U@ZAq;OktzB40=RlBY=%j&DwS0#jA|X$ZZ#}V>G!fE(fGFJ5;gj!)Zgrx zPppk>nM?O4&5$SwY>bU~Y*e6a>RIZiZqp&4ES*IH=hG9MZfB>c83CugXOr5+x16LO zc;D$^FEc*fS13q=Yjc! zxCM)#FP1U{w@tzHoP^R@> z?hcr-cdP{5`7exTs=SfMH)4ai zUXyV1Y$;Cm33R?@)F!US31OLv&}#N`s3NM0svwJPz!gy(%?Ou2^itHP-XoU9Zb3C{ zB%+m-W@ow233s?L!1a^jKsi2UJhxOTZ*=iqB=3NvX`uF=0#=9g(cn z3u_#)Vdt##(-sm2Q>!22&{IfV22$htrk;q%L(urKJi%BR3Fq!b;o`Un%%Cfuai1Q7 z)EY$tzLN5o80b!s8u)bgA9NkwF1n61$H-T*1eH9l0#QLR1rW+Dc>urqhMYn4EQ~Y8b_@LkX&r zFib-fm^zisC~o}5Ift4xCU<>Z6aNk~w)Lsl!yUwPPk;MzC!k{1&F{$x01-HVu3Gsk zdpx!2kmN8V?!|_Svyze3J`c{4b^G>)RbK!z3&{J-)zWtiPw&)sr{g}Bsj(uj*P}6C zyTWU26p=o}sE!s>hc?&pvaU+Zpz3N!6a=bmDti-{a+c2Sk zxFvUR^XszvIUo3Ngv`??pu?%j_xHevAqGBD@7Im&dt3SEil6?f4=G zdG(4t?3L}QNX*&uvC%v{s~{;v9qq0k2qTz|KjT;72ST61t6hH}axNVq4;vF0fAWQC z@~IDTp3=LC=)S?k1$>tv>&NM0Q1L@WYVYb2#mU=%3ne3227)+%C$eieRCb3`nU7st ztR=OmXjsx?T;DnQx%cx(?~z}`zCSy76W~MQx`)^sDcA*P$`dF`xZ$HaMg#h15SQyk zhVxKKYd5v>_A4c`N*ev_Y>YJdau11nD9@Ct5C=CL{l1#aewzTg{cWTJu#6&m5$`dp zg=azTe9Sy`r#w0E=-P3{Hh?}G`TYOI8vjNR|5pF$S?T|y{D!Q!(Z=;b2tk)vU4Z`we`{pA0sg+ zr!Gw>^5ZWx?;g&j-tK2-6&aFC@F(BOkJbJp@-9A8aF3g~kgr($;#A6A9hHR;Tjqh4 zqxk{y@E!yTdY6&tNM2oBO4HaKaSw##R=J4I4X}g|G2LxFtCD%BSYeabB)~sT$4R=z zg+7b@biScYkNrD+?h?V9tvd(!p~D7p!l(tX-NUOE7+>i`KqB8rJo84`mt08;mWJf2 z1}uPT(~2sz2dAz@QCEu*u49MJ0MaO5xX$Lu`PsFew2zWW6-MfpfXFhHlXAa6C%FRxbH@cB}hygRiVf&PU0yNyAQl)9?=@<|2Xm{)zq?rc2db@SwR)WOb`#7BX5w8No$SJSBcP9x0r|N zbdN-c)0qYp6W!Pq#EL_D9o#+Rhx6Y@MjU4{O-2Nxj>?rS3AY?ZUdA94jq!-_aeJrdXTTK5#Bv>Zx|bL< zIlWwtB2VW*mTa}GQy)$;uLa=Ic4w+4ymevh89tkU43ee>s1JJM8smaadvDI8q7JM6 zVugf^9NgROHtLPm{MwylF5g7QIi@%x6_-VYQ}fR~v*K>q0cwf@0vvY-8Wa=H@vHKtkK(eIt_=%eZ_QCq-#ZuWH9czxQ147LlzTtk+fo1nDJ(W6^OW|ku?9wXN$WwEcC^WFkIR>rXtM5$6zIOuJh zgA!E5Sdt!#C%k7^Z<|LPu3P%JMU$l|RgBuYQRr`w*~b@eUGB>tv+T|i4RHgaTK}l_ zAP;U^#6-JJx87mLpe_K72?-l_-g-F@_=LSO3RHH!(qU>=XWX>LC+z#cEu1I43M~!!o1!gBr$s z$(KP?jO>Nbsu^8_E&C|m+LLUy&F>!iik#OuLSbXexjvh zFiyZ`UZqf8MVFOT)oIz!c*bu+pg%F?(lT=K5asWL{-2F~3WH|x1AQIp;OG%BEHEEY zt;V%6>&|MZ-R1x_VPugp6W@Z^GG@L^JEjje5hs4Js01o zb1&os>r42JR>Gm-|ND^nIV<3G08i$3^BbB+A$IY2s;OR+GsEQGA~TsfFPFWL&CuPa ztB~?!L>K^~-xf-!mld6!C4;gLp3l?{__Nvi>^S~W*##*NAa_z2F2;AZ5qRc=@l^D% zQHY|7xg}n4k@G|D7t7Taeo9R6;hek`1RYGBPFnf+mfp?DrJ(ae8?URL^cNi`|L&;K zFo(g4&&X`g-E-==!DbdA8CwP%hrP<3G%_|Lh=GS^m4xX8#BN%<(_* z=O%S^n+;Y3u(#HK@#p+;d)NCq^l&th2$J=Dku~t)w!o`3*-D(RXI#Aa;Kar)P8$DS zW*NBSm!pilm*QO*EWEG7oRs0olo+e~Gw1${>)Y>&$qd*5P?;|~H_Ps=eWGOmdh6Cd zPjqaVZl;C)B%|ce-I&L|RK-{oxcg%)@B2q)7R@+5w}R$>(pIlJ|K$MmZrQXW3!2kv z;@ihUkhER*4iGxcT4??>PXBbq`a*buyv|~B+{I9rfRBMGunAuXdcXYNU4*cIhjtHs}v3 z;p!#9#NU>X+2-hnBb$~y_j6cLCD$MrU;vkz^){qr=<_e;9Vbgq{3zcJ*oB&8k%dn) zRl@F={X~HerKL6C^Uf`1l}%=Jb2E^e-P`^K3J&&0jWYIrvDng2Gh4yxgKbakm(grR zsCI~AFI5vR&*^uko|uay;(!bn{eRW8KTNMdBy%7tXKfT9d%32AHR<=R;X6Whtb3G_U#@X_%$eitH%48viQNgA#tP97$lOF@BGpP|QK@;en6v z!=!DfkHb1LQ^g?{Uhk=v11Y43st{@c>f)86Ao9!=C&Z>JEoXL1fKgWjQTNJFu?2>1 z&v%(ITOc($X2>YWBZ<5+@@FPIS$ADdX3a z7`YZakKT59sZ!A8O0<3@4;fg?EAY;>3uxA#3~FYuxaiJIbNT}ra&!pHUJX8#(~k&D zLm}^zJ+QK>!-ZyMUwZ7lkDMEQfAwx%& zj|qfQM8dq0k}y(2Vk;SH+2x-ExhkMK@na4hu4I+Xp_Zcf)P)yqN2Qu<)50H21u{i% zMA`=$FVq1wI7nAq83AlGppLe$ob#pPKi;c!(faBo>+I@GI>?zr1xf zw#i}MBSp&=A-l_+u|x_z55uDh0mFnk@*Nw>PD_|IG(XZ)4Dsh!t6@WeY{B5x!?`H^lxR-&m~ehMp^p7Y?!& zVdu0~N@Kh+Zk$pj;w3Lk_Yfn{O8!2q@s=5Ib}j}43547hWmh7*;X)!d7gv(eUnVpi zvE0a8@O-ko^1&LWy0%OYH(&Nx>YtoWYH-VKlIMkMXhP1Aydpc&1S7hm_>=!@Q{avV z2U4RH6X#fPGtfr4-PJ8P8OzCEz8lR0(9{b>%b<2RRTTO$-ckPl$ZFYtDy#+>rV!+L?9-?^5E3;UTQnqG$FzI{5D6bs)NrlnM?D|V2ZMooroyL zBS2?PBt*9M_)Oldzy7}QN*zH5Q3O0V?W*IfOET$$+$hd@H^=X5Mx*b-JNfN1B8Wi! zt|XZrDaF8|=hgk@jT`d1^Qd*e{aIK-Yr3WsDpf3GkI#9vYcDGqAcU?T)H)p9UaRs6 zu7^zhrZalA=%j)X720CrP3Q0~^G7VpqX-uLF&Q@d>$#k?6~;1D)|8qn7Q{%CLPTfXyjU5aDC$aILv%K4Q5ooaX!jd+ z&min{_U}UUz#f%|yrRNNXdzOhDb>2_lkoF-KcmUxM7ktu`?!K^?>0!Fbi@a(v}C4> zPuq!ZWpHQS-N;`m^Pk59B`@Ig07%OouT|(p`Rq2owOiiOeHrYnf1b3Va_N9lBxR`-z@oERI$yFMoe(sqAHzg-E|Y)!hZME%_H#J2sz43VxVxgBGwcBG4IO2F1HPFVjVtqZW92}EpCN~NI(W9-JXS}C znRYcZ$5r~|P~vS4lC3g%2t)Z3*jBWpSMFCNWa_e69$*K5OMQ2>bG(1DIp6O+Vy=5a zef!uwonyj-WIW_lWK8PP`Honzw5 z4t$=%eA_I!-)|A`V@}Yx#i!+s0Ro7aa6loDoMszanRQdJr-E#8_l_R7m0jjY5skh% zo@`qvV8Uv2&>rWqV~k{kq?^2%oS<<7NrHgg<6`0NZyDpr3(g5(Hyf;Y{iInvNuRq2 zr_-S>B2OfI_|w{$5kWUa>;243Pu!)tG$VE}4ghp;gQcnxX;u@`PkI=4$2k6h)dS+d z!NC2?xuCKqeOv4+FdqhsPlKXYPoS-4P&ljtgsVLg9Dq#6^u_=oRihx`UCd09<*d9YkIXChN+A_{N>+ zVff$dxzmAx_RcHXQ$8!#+ezk}=#ep!8Iv3-1u7aQpS}1Oe_;9FF3}!F0v&^JO9v_1 zUD$9v6y01}4k9$7`n;avK&LNj9m^jGNxLrrqJYpY|8A7h(2=;|={lt3X6xa1FX&OL z6Z6DfgmF-j56J<~2*5;M#lS!42QGF2vc(g!l0L?Zr7Mu1KOYBqy5X{zT9$DL+BJ#9 zN|=b6l=vq38;M!X*=I9z?c%z`adQ}ZN(mZmX-Np5e=3jTM+OvQ;a*zK>b_^2Q zx#VU-$KjXCarJBih>kBnNIy!ym{hLi6ShAU5$D=fAKm%g3bkA^@VQIoWj1)@EE|$o zwYgY1oD!C9Vcst|8^<5II~@Ec{8@TM3NbLSUPfz=^FB~vx40J;(f`Jk0ADEAzXtW= zceRLxmM&V^6$cPMW>s*^84)3M*LmwD;Z+z_yP(9i$zijd0@$I*j1QU@03{Wz))Sy) zj$bOd0f`D^=(zYHgUkyNM5hMHb0Nf-Ffc1%bIpEutZgu9>hIVhY*hUd^|~<>TLL1A zpi#L;;`ke=~H`A_(ib|h( z=)~E(I4l@=K!{1kkL1AE@?*iD95{tro0RyWLG;A{qgqa*G5i)BN$^XVxEG>cfbN3n zmyYy(0?07FU%XK@{{J6i@7Ntmz%A>>wr$(CZQHh!72CFLJ6W-9+qSuK^X@awxgYla zu>U~!7~MU(yJ|kODp*{h(`a4pUN8uobeB9GoNdAad$1V48zsaf#41k|Yt&m)8t04* zgg6ZMJKLyph}vlwH&`Hp`d?H!OADft#v3;Xw#A)ILGENLX8$ZuN0^YGdKRz8j44sW z?`PL?c)%HbUS8^sc=MI{>o3q$LEb)F>R&4Vkn8?$KTBwl?&Esv@@Cxvk(FlcQ2MRu z;7GcPktgb~_4u4OdErIAC?g+xd8+-Jw!N$=>BudgqpYCJ+O!J^)?&rwJoE5iB2@eiCR53#3-`Bxp+IaZ zdT@^dye4|?`Y&Iq?u3}egL4Di!yEyQ6+#&U43}pIqPAkwHq0|YM%8Tp)xOOHEAG2z zCMD-XIZBYo$RMpY5$alt{Bg^uReKaS*9f#%(z~5eQ-MnHhi0*6NbK%NHKD0w>|>?! zSQ6JbSXL5_)w7hD3XZ2b*=`tB+03d;02dkIsp%pnia3_!dlxT7RgJ~HqtF8mReH<* zMqf?oT+1{r&ymP5)pw}T9EI=^UqtaD(-wSe9ZH?~y@hd$>S8QiO@elDqZpfTuEUU= zS2L@U;j~pq z8i+*P$>Wpq*u=eRH_(TdgDA+ZxRtOV`uL5idpWOAPC)5-Tm%(fVwFc+93?zQ#oVON zWJc+S)9;Me8y=8Q77G)txRk{o0h1?ey)Bq&gc z=Wok#6t!$J*o)~&+7e?Um$LVg)hABq0%T()V3qyKD2U(0W;befi*pXZo%U(r>1M?D z+U4SvWWG@FfIw3&Q1LrDJRgw?Xs5hUSjDEA7Kh0J8}uM* z=y;&DXA=#uEtd{KZz9N+dU4`frZyO0*O>@!37S@3BC~cV=L#aU>>5y~^1qp2j&TO$ z+3&y&Q5vacmpmAVKtv?gv&OGp+XTOHB0-hX=u4OKH9--y;GP3oTR zd2*>iM-(HF$)Tn|AxJ$L(YvheqW8#%a|TVZA6fY>h)eRF;A9;%Wm{Sa-(q@>c+PcA z%>yf3(u;G|%nl*euFJ00*qPaQqDMo&|33}nm2q%BaEbU7E{y?-w`q6R} zxWW6mx42DbI~WxxDDgl85i&=G96fGx#1sLVzRu(~+FCX$xE2u4sEdZT42*w)RgU&u zR>LmP*S{=L&W$VQY+Yobnb?DZ(w$}fJ=t#$=t4#(N1L01lOz8*!~&Fp@aY)x>V$%o zg*u7IvjlJY^>A+`sHWb;B%r&Mv9FlyThgbRy~*SU>p|k)s_t5}KPJH5A`E zX>y6b_%L<_V87+NB{Pjq@OBMu9(1e_#U z`plWr1VCG?QRx82XJ75o_NtrV0Oic0_TZ(4QNWCh1l@fvbDWr>7ncF?jf-{|lU%(9 zp^);~I;SpZH%+s5Z!4l9lqM_8JDv6FlOvY%?#+tVr1xf!HhN_%cM-Lt!-=*p3r^&y zyU7e&HAZOrn-YR0TW+EOxA+~=^9d7f^-{1quhGd*PFi%hN5^fBQHWbwTIxt)^sexL zw8d&&Zut?_uKDgEjpz-EX+pYK;Y8CaC~B(B19hRQWBxe?ldW8A&=*HL*8wyat!T%G zk}#_>VWnK>@225=ztzW- z5GwDU<9h0zSf>pAF(yCWB!eyskIUUBQ4Qh@`XO0Q7i_~WJyx;64gNg?ot-xN77{p@ zD~71m>CPnz`2>x8bwxhaXiz;nC8a=TZq&E04=UTf6l_lD6<6(4{jCLXW@1@1!Ydu~ z0AjU3Xkmb(qXss3Q=(ipKhbLlc{511{wd&NkyoHu(fqbG>QZ}-fy5z21)&$Y9d+B~ zfj3%arR4x^6v-SfYjo4rKbEgv+yz8D51)W7#Mv^yE=8Y$l6~G`(b0VQ1uEK6(LqV= zyfk?s5((NHb`X_TJ9ODq?SWvtM$nkw*IndXS47A|xZVYs%(6SNY=~I4Ie0- zi8bWW*7}a7VuqmEtgZ__W@?hd95A;*fcDvxVC9>93E}nUpYY(eG8%f(&NU%qOP;5q z?heOvZ>UglHTj4**g zZ>z?!SMXxY8lzIW@spXxlq0!zti_A3nT})Pv`Hjj&I2)_vdpq%j9hrYxyY<1>DVR7 zu3Yy|s14C`F;f&$2;SGRnipii9cIW(MWNqTb@6;_S^llC)p+y6r&xkyN{bdUehQg-*ap#4`*|KoY6 zoFui+YVS09L<*;fKKHuERdZ#+mepYv^U0<2yR_+vzqziMdRY*1c`jF}Zu(@?(t>jjnxN-DM} zdHBBpoMAdK4lX0`@!575!=R%*Larbn`yb#+L7pM(yR;CY72%M@DTXFxj1vg)OEU_N zfd~33S4R#{aF^3Ra6T^T_%2vp8Ib&f~IH?3atfo~I{7-nQ>;5*jgm{0xfS&8&3Kk*JvZ zIlVRV{{(Z|Xw)s(uV4;CS9&yL+01$Mb(w&TYvpE>Dqv9_DOZ#Ol%kZW zh{=AXzu$z5nKpR%MzM8gM!j@~aXQDQ{Fzvr+?@B~f;)S#rgc%UT)pk^k*`0TXxVRz`als?7y~_GHv;SZgMsF4}}{u{fYH`e|R8|m-OU`=i2~m2h6LrBZm)> zO-OM|0#e8X2SN=Y5CB>u6>aNY!Vl#lm8Ua-d$vrS9}G#6$aEu;W5}>=4|LR@&kSY5 z&P^v)%Mw$ck4L;(lRUHy+UfP(7XW%XOdwWisTE zOAhp5uDI{r#-+24Khc~@Kpy>yS98vVXsnWeQ!u>ig9?ctSXKa#jWb2|gM|&7{BOQZ z)abvW^5h_bcsg}QxoZ~%<;83&-avxI^VhNrF-8P`#C#r2JW6Na${~tsS_RzG`^HRg zMY0&M^E6}@%6KA(#aqB&tq&02&UNy_O}Kmol5Bv)sC_0pzYPdZ6bgiunAD09xG+V# z-a+nt13Cbb3v)wWh*(W^sIaG6wWk#l8NN8<}2157TF?~5j-v_QMCAcB8I^;0a#V*RTDos?hkO>%QNagIj3R3^ebBLI?7Mg?RNYF3QjILn1rgo#K`#$m{1S24tWYW@SMp5&3U z)P*k)YWjAp7_jwPJW?SrT0Wrf98oQ?R1lq{AnzRwi%WdvS|Io_?%n9j4(=x~Sm2=v zTk29e`9xOf1RT`XV-R$8D!0G)!~52V{!FCdGaCc(KHM3{|DDbCr1WofL&dKySB^12(po$$^Y4>_U`zb^-v!)lh$YxM0O~&n&TE z)ZCZHR7iYzhJ5jijYZ0ukqDX!rYn(}K^h>2SZEeS2Yk52t1cEyVCv@E3PUd0(aM_W z6bez^nzW2NUi&NEz=&DYhun^}AT|}Jhvv&}FnOG@3P*Gb=@sE6jf{5$ebWPM=8DpqMp;{4so*jhRrsH?5`-9#M_ z;XlkG-Pef9eMSwf*$ky_JQ!N@ z5jl2D$(Pb8VT~MB5?JCpfbW*x?~#;dJ~MQmHBIv=jQi$x0(4PHM}Y0DsJA^OLX!_gAJWKNQcMH$MfchET;rANV_e zN@Z|@2ZjeMDx{t;I)S{sSTQ+fOrZL~^nj5WawCp`2q56nh~-F^!TMTE7fDN_aqQR( zlJG@C5QMVdvdtn!S2u=cEpF~ySGN!iNZ+esZWgRUmn5CHiW!yqPn|Mzf8)#{(C8I` zn|TEi6JM__ftzzGG|k_CKAC1Z!OSK96eIqI(4$D)?sQLfOjl(e5?jP0Wpuycz;O_# z(gVjfZEFS6xlr>@E`SjNNO21#HfYqLRsN$YK-nFX1DoNaXI2&R?t5fbM!A1eq0>51 z@%UjgpS3ao)ZP*HpH7bKh$)jg6x3BVv0Y*zW9J2QS zI&UD5sMx`Soe)9LyqrCX@7BT~+CaLWz|v5_=xm@-!0gD51FQiOHuOi$sU2M-kP!MD zZUnfkakeEjIYe({mtZvj08^mi0eqD5DjNMAfF}-kQbMpH792@#u4yKGRmlmJnyaFP(Z9(8<(OE8#mqDjlJ2cC z@j95VWtF|m?`MZvx(z$~Ec#0B+TS440Fh^yo!Nwn$QV3<=m%I~bE=lxwBc@n&wkqn zmqcY=F*8ciF}0$a%mZ7Kf`@~2AJXR@-0bX1VCLuYVu}&8R|Hfrv!DStrr^Zc0kvzK zTv^b8vvUk;zx^pWVfdQhI(UlL3&LL9CWeXox6nq2oMceTwe_w*>eZioA*itZa=*Z0 zvnFulGqxuxqpmH!rCH9PLt64Yh*(+kn$FzzVpFZf0)^sMX^C@R(4YuI(Xbxp?@`Rxo>oI{^7@`e$ts;|{DU7B*>E987 zmX?{H)IOVd{JLVOxMVxAI(Hy}N3-==1?{0rg3nngFd4LBxEG;=XW+hCAM-&b0he52 zPt7ZW>Mk%!UsoQ6CBUz|>~+npqcDC4lc|QLC;c$qE~cQ0cGT=1r!#|hlOwMoEc=p0zB75GXPss0Kn*rQ|NF9GxkcG0dH< zn7C!*mn)THc$9|qeRq2Q8cg-2qZ!ga(^r8cfW4c6c!OzcIv91T(0_u|4uGPULx0A{F~c4@DEQd@V09H{)79)_9IvB6Rk?rpQnN-|}TDq52JMMG&) zbD(KssEq;x+6*G_t>P@042Y~Jn`fR5DvC(Rg>+kOKb2{-1D1rTdO^2W@9`;VR_o)E zLI<9(8{!r*^@=c&ty>vZH!I@4mlO4UdPBKoCbDafTLt?ZrFO_zBm69MM=GcQT^kAW zlZa;HRB;qiQd}9~qt;iix**T>7%$Weus2W-sU^qOOxZHiNT_7>*|+?CK7zFIO5jKL zMRE4H*aiz6%s69l7@^XUZZv4W9Y_-m9daXe9H(m)vxTdUtbR!A5}S%Z_2xHusi6;x z9PRWnAOb$VvV}03wv7LrT0EJTdkby1?&9>V!>57#6=dt{2zEA!p4x*A_k zP`^3LGsV-;_4WM&>e%h+`(RYC1z<49tem^zvAQ%I6v|Quhuf@IFD|q#aW;xsu^mXo z;eSH4Est`sNjZZX_R!5YsS(Ws3K$Rv4%$t@Y|!$7(x+%?Z0zn0u(f@|LNuq0QKA2C z8R>SLJC*zMimSS3d&*3~>>?_E@N3W9x5nz+8=k)4r=p*tLLCbLYc~#b9M@8#V0D9~ z)!i{$HMe=l*^is7fT7+tvXLs|I*tOt;kLu`3>sQ>aKqJzT~gD9wvpxf8)EKY7AQDE z0n1l8Q};xoa=rH&IuRCw){TUSA9vKgI+F!m-Nl$3g$cD3Bu6_V3A*!VKgRDY^boJ{ z)5RCk`P6!rWoXUNdXbZ4H< zygY_>L}7?@{Bdzos!$CT_M%dd1XqJH6(@SQxdO;|Vxoj-7>V_~NfdlF0MGeaWaG{a zuC86W9FG)3Aahn_K1~hed9=Ii^R%RF1v;(4kn6Ec99NX+v>lVNzHP8YBJLt`lB==Z zHl-fG)6B?v54PcHAw5>l|*~rrVw0WV55e0CCwwV!rLM^$>-s zYbHM3+Gw42PQ&($vn@*U>+6%BF(DhKKrv;a!yW4ePQqN1a!_LKx}c|q)z_;V$K+c~ zuu**A|%tX>ga|<=Nkz~(=ZQB24%`maq)4t zq)nyVd%C;QTjnN6^Iu6RC+>{q^N|6X;a?1I8qM-=2vT^2ihgbFvO*lO)?Ex%@1D{v zTMOG!%DZyH5#0#2$B;pkTCOw?|kx z-Bfgx2??Q0VVWq059X-rNII_~js$)cLJ(j|dXdeb(Fly290C2F>AtU&1jmnYa7Lnx z#Wt#J-$KEXB7q#%fdH`XA~#buKP}F(VBTs4T63VlVx4VB1(h8ZgJfLTs>P_N+(t1_ zw$fa(djV=1&e7d3Ko>aw40yU7GR##gKS&?f$<(eM72yhv?nHq2ibc5V(_j|%w@gc~ zOR*j)I<06Y_DlBz|W6Y$h>IekcfErC1cBFk$Q`|iY(GiV1yF7EdWJEM%0G;|eo(}Ewy3OSyW;GLKXy7qmTq4~^G)2=$Pk*-j%)aKfdK!?E5Ueoi)u0G5HJo9dRJylAtCI_K)hT~%REP;xsiOkJw1ln8T8gQ&)iv6XLKO4_tAaQ*OmFig+dEbt0z=eQQLESunp7e zbXq`AtJ|r7lp0z|8M=-pf_!uq7_(sC(q`3qg57@_oLK5OelhC+p+|){i!{VlZ+Z0L``dfZ zY(fd%vteY{&k(UHc@jP7m$o84d6@QS9P>9rCU6M*+~$;!Y%c{{^qH*zq7P+Y;Di)h zq1^V1E8y|Py99R@H8YT6W)*Y)$-iVb!>h@~QwDCjwM{i(#{;&M7SzY8Bk1Nh9Vc)- zXgA$OrMDE_L({v>f5PGY8uiZFA-4-O9s{K@W6`O1Z0>M&{@`6w%wh3SJj1b;Cah|av-kX z$@k8l_$igAZ^K8Cq7*KKb~h8+B`XzsCA)z`=g>!6tioc48LP&*YX8o@`)^{T1NV&R zO(_eMz0OasJQnF=W#>8lh3YciBCOsrCh649KCjt<%6?eQ93rF~Di3qRg)%0p)gQdk z8UGjN9I9%0=2I?Jj)#uj<P0Hwkq9%?c$8DZYH=5a187F$$R>HQog9USK5-Rj~Ir z2fk&?4~tloRUA0P2Qhz=_w^Z!dvVPg32hz=9O{|eDr*7`q=sR!WrfO}jDH6XfmAf*B&D>{g#4}n9FgAr7#<}>^d{nRS zSCi{mpMOev>u%J0KdLl$`D)KToZo)jo)05KATOUzm%l&S&>6;SF^N@_dwSY66%VS> z5{FZoS*B_}8O2Bwtcz$07Ha8l)OTIHg!jV^g&JbdrdK${tDCncr&E#oO9~r5nWqeO zoUA%``->dZC>Fm!$tw}e?Om9KlLZn=Ir5-OPE5u)`>&b00qlWoUM#5?+ z^gv4V0Kv1KF|}PQP^v*IUeCHs$3yA<_N&F)U@5zpd;1Hu)M@b7 zX|x_1?~8pE`se-aL{zu$9kTazeBk$(5-e!TP`g%txEg8u%?RvHH`L&W!g9Bu$BrQ} zj@#N_cw&Po3X_$93IwRdzHFw%*@1YjdR?W_q6kaEXz)cfih+=ZZNf3y3^zK9jMxWb z#kb$f2q|5h>H%~HO=d3E;R}@gtb3Pwl(=!@qmdB^i0bQz9~yJ8!RlWUImiT2@4ykB zTEB&8<5fG<@{<$O+C}V+tE4ogEu+ z&mc7jHiTGAVs%^XhmO>dp#X}=ew1)kH-rKx9(5ZnMSIt|j(kt-ccOaQbDa0Gw-VV}Jw zITc})eoz7Sn)-OMSvInINv7e4oq@B8BxB~O+lY(AK}b@5sk7h$3n(Q^0jqfE8F&$a zLXoz=_i=$1+%Yxi45C7GMtqW?=oPKYSGatuZD%NYW$(ryM5o0(qi@U$-1z&(@CE^p zsgldx)Sh>YQg#^?fpasntU~Pwm>=_DjXSnm@tCXG!4%=O2Ph-UJ~8<_i1v+w!}0tf zhBMU8(|9$(?e*;kQ;lcGZyxP5voX_;^FnoeVt~!{^Xw5CapL_TGzQ#r#QWdc!92KdgF z;RWzs{qp3jDFxQyp12}bm@Zi2)8nMA15g46Wfkl3HLCML1Mr71U5qn-4()M z=!T4wZv2EV4pe1uW3T&c5_-CWc(Rc|!6l@&ZDACr33MUew_|5^+hE(~_m}_m@m(hX zvj6KhJ-@VZ1cjja_8RQD6Z}QfP81j+11Vp-CgrhtLJFiA&y)Zv zBE?AY`X(;?o;2ILosTb1u+h$+rtyT*xiQF~-bwPZlS*eC?Gso6KgGuJs)kU($b8D@ zpn+N5;pY|`gL6n>m%UGYlc2nn=ChHvMFpc5n_I)pzdE>``&thMiHcIXpYIRCI?CBI z+um@0RAmB2fnq(gs(s32N860uO5k7b-vm;6^l9S(s2W-)OHn1a?{6gvO30k2Ro?6d z1rB$#XyvfA;eT9IujvHilR<-;M>M%Cmqw9MO!PHXey;DMm4{pk{z@l5i~R7Z1y0!k<#gpA3tol5YEUz|*)f4?Y|82Sd{1P{Stt4Co8KJ|N}x=H za^>SrOgDVZ!KyW6Y^A&;Z*qoFtIl?jehrI=%+nB%-4L#C_IZdA5&;Zmf; zk+8j7Tlrw34}_-z=PL=m86i~}UV_n1hz5jyn3=Irt#(3_=Be1GzN}0h1+iOsRa_Yk z79H>huyX@POmRX<4FV)8zPepADiOgA_4J7rVP8GuvN5Yl$IjhTww8?5>*rG`C$srb z4s=}(*aFwK^F4DmM#mV$q3a@OjZBqAcGC!P>a9wiK;HUX4^@O)(0qYxGYrQ>vx2aX-~wrKj6Xi&a< zsYi+q`kFL^omk$Qy8jzGG97{X}%cmc@M-DXo(G4Ko8lk1qVAi@jDbuAw zV~mfBi)8ex(ulZ^Sf)jyk$i_7Hos;4iJ?zhi`ywS%VoyDCq{{l$ICk!)r+2J5+C9? z5T_ZL?eReTm!%sp>xAR+p$Mm618pUspGIu|#-;1&#&ESBw20b9i=zA>upUFM-kM)r53&bN^(zGN0=(oVt-*0P=X7jhu`*RR zb8$(w!Kcs@eZ;tW;ED&hq1xEoU|`DPC~O zdEF|7hN#H7i}WtVbK^ecDu9$M4FcC>m8JWBj zL*DX)OZg%1#E_0X{B-X7EeGTtJx6XzxeEI$JKu500f$1h10}4Lc~AL=-Gfff3PF_g z?%69wPHk5r3t$~LT-xGIjrB+)KtJ@M$-_Rgqe>Z|%95aP9d2CQR|7dr(4v>ET4{n-^jC}6)wb!4N)x&E-;p9@9kY1n642_poAvCOBk z6ApYqm;Rt6G|XzNTpS}$1fubnZ>J*32AXYOM#u#-V17}|L>%ff6u~dKR-oY78m3$t ztoX<`xx3HEBeC6n_rXYe5G~|#JE|wKe1Vm;p}Kt}VXnu*XF*2~HntaFE2*)vj%l9a z(Q3uSXS5SOfM&>eP5g0jm~$Kusl3>GMx9o#`T^opvh)8Re&7EuFu=sg`2PrdCWik3 z7-0Ng0Rz)Ko3SKquKtf~zwvI{f}KO3q5^ma9=2l$NSYfMLL|IbvKy^`+*Y`2s*86e z_&84EX;wH%s#?uSh64y}Si?kfxo2aZ+j7#6O!LXt1toVT$XMfO_~KT6GbV7j}?Krv_Jv>76iUFGiVc(=HN z1M(LxsNImebBth=84Uaz-=`p}iAFX1v1bscDhl5Hq2{^3Xny|m(--q=1Z!vq9S6p4T^xjLTV;14P1XwDSCPCf04PIk#Da`Ou0zm46H z>(|VmnZ(9x0(4y)J zz>yylb`22!oIBjP|LhMC+VGi#0KJRjPWb?%L9y8)d95tg1n=bV>5*%P z;FL0mRvv9D=mY%(II!0;rKAzi=w5xZJgyb&TR`rkVo+twqYJ8ACPtJsxk%jpvqqv% zl!(W!Lg>#^8)8er+IJJN$WIv^cz@+!rg>(-TvEZs5m_})4(CMw3{+qt_n!oYkV*_jK~ zEMLA|+~kZvmQkN|d33Xm~r_t6JOJ>o2N<)f!wbWS5aVfjFou<-5cpL`ZD7fwvlJY>f& zX>*81%^7yvnIfSW}Jh! zP%CEI1<27}ZU9Nn&z`9Y`6OIbqCyp~&nEk0k;eB%^AFI>s5RS5dJ{%k+-W4xo`6Bv zhnuY9ohC*itJ$oUEN4E}Ls1%aULQ4(^2&+Igo*7o8nz(9lxD0W)w+++ShSMd7p^6I zik6%|8pT2+Nl69sjn6-qlixiNhPQBNU+{g-QcU+p=hJz1Fa{le-~*}|xyw+puN>X~ z6s3q8RuP|O(YF?E^JyeAly+|l27|!NHV{SdQSMoo8n(jpaC6WY6@MI>^W~3@^d6A$ zYS`attI>{ps}IrqdnYIf zj@MwGegABj^KR;3_LQIq;pZ_dS=2@#uL zS%j;P?vEy?4;a5;L<0&D$C|8khnLX6S}G>#tQg?)apS*^b=@s&4C8-c(dWO1SR67h zcRV*2K=QWsv1aNT|6%7!@1pR1A;y)SqwZd7uHa8G=sA!tLP+Wd7X(C8p)*>bz{xTZ zu}(>$iOc6?r*L03D>CSZ6K-(qF&sbM7sjx4!ZCbTHaKq~Lt;7ct!xy@ICE5_#s$p= zit+>TvTG5g_&MM+LCrMtjKMIU#4HkbnhvD zJFn7;swEOHMN}1nHW9910ce-km5T;O!G(YcBOH?YxO1B}SRdx+=E91>$MClbvZX4h zgzp9)L>ky!4;-F6OIO>3n<8s)V15H7YSL#!MTo+SGlw(&9Db&?77#8dx#5a&8s$qM zcN@tkT}as!^QsJ=VF5tS5^Zz!T3L)9aZq{|M+d7z-vVc{Fw)o>rSW5N4$_$hU(uxdS+h-!D2yaGo$7Aox1BTo~iHZ#s! zd4p+m!x7jS^~00Roe9PoowAdW`4_>;x&~HCL|l+YS`d14^O#@5jQSZO(;{$CI*3I0 zR4kmQ$2c>n5}ZObXRNhpJrh z+kYHhUgq43t?VkS{im6Wm)TrmWEw zaGZ04Bp9d6-0%qkcuQ>Lx+VawYVg!p!biaq{cP`-gh1QICSDGCr(E$h&nC8+NFO%R z8={2I57BF6OpDeA1-qw^h%%ogvmPW#e=!OVLLU)eVs;YgM$y1ZaPUy`aIL4D?r`1q~Cu9#XR}s8QE)dRx>=S z+J=SaoB;hQHVaMjN8bfub7PxR^j$GSE#iP`fKV=t=~}thlA)IE-~1$)(uL4=r*H&A zUC1uF$(tcSEyiQxju{$-P)bVy{vNInPEKBnJA$ZJ*REg^>f$;4U1mM0HF_>)^=stt zpZfSaOe~(L#*XdO!+vwHUCU5zO2~L{?&l>TNrOWUlVPK9lzj;Iyu-G%n=O4t#fin@%BFiVkQLe7(;L_YtaEL1c;QUwrS zP|>SS7EWjA-7%?sNbiKgHNi|BMjz-O+4W8n_av7vo?Q&yWB)p8c7UKU^rKT$!wHTA zi*CmYj>N*rnv)h55~DIB{wGE5nAW;Cjx1si&0&U8c+g{4GxM4#$t>c7N5nL(bDF{~ zxu<9}GZvRx+hA*W<!J3TSv}skp(yis%5qSk9V_la`VSm+IY~-ToJ(2V5du9f6%18D2EGpZp5ARHWmI|ZgAS|@lGSSb`Zn68uM zRGiI~cyz%)Eh-LEh{7sVviM*`6-{yLI+Btqf1O;&!}XUpv?A-0ZlPKu2&Clj;?yh< z%CW|+di{=PLtKy$U*#w>v=0acwnkvU?rv`>3#r~l1mJN<#2LNFuXGvqtU&xMbY)5RV%k+9OaKUrWnQR)6vYcr^4D{in^a_DNAu2sd z{S8L{oAlibG>hsD*Vpr&Di*F5$Szot#!j8T%&ZhQLr-3oFA8h5!mOSVY-L~q2Ciy_ zI9)N*l002CK$LHx+$qiNiI~NakFfomf}9@P;y+U)G3A^!q1Z6-Xj@6Gyc&8o3j>&% zdty7?S2T>;Qd`2|6v_cHpqj<4d#)|xhIPWZEMc4URxasou5`IYY!Be_o14Xo9M&JQ zT_@vbQHB4gbVo5rgsxfqihjaIC882lI`x_vNtL5(DOhDd%_)_vMeXnDsB9I0(4XF8 z!ZWy#8hsC{(d%f)s7mACQMKJAach=^0z+N_5t&t)R+6(Uzq7LVxbz_+8f#9{jE^H7 zo_)BzH5e>!sWXl36xX{f4=SF6eO0nwrn0)7Liq@oZ;f4RsE(3k?2A}!blz-lIX#JI z$&@|WCK9dYUH{n?(PsP3SqJ!UEhT*!zZ?q7KDVZGj~Ub8VUS>}>lUE*Yb>77&xBWS zA00=n%u})Ek8m`jzZC8jhxX=+8o=~IeE6BFp3;cG_S;{j;(-t8n0hv*l8Q#`D{n?? z-vn)K)s5i&tDdcC+CeM&aVeI7(=^Jm6qD(#q^-_NNt5|(j-)>y4eZ={^w;A^&#H17 zBNk2DH*f&pc<%AiWHJ4~`T~-@mUjpbWH=g8f7VK8wehgKy5gat5{Y{gIeTYK<_e?< z7qT5zXHJkJd{OJ53BrZzqyb=e7EuR@7KhmCnxlMlghThgEL-KwkCryP9*W&W%wO@f}1`%oN$ zURm8I9Uk%1I?u|LZNMQ-zOTQdktxAS|I=O1dXTxv6L;<|`I_)CN29BHPR)x6zuZjS zSot$LX^InJ^03x!E0E&W#ts&1?;v|IHmF_3D#4Bcehk9F^m6Nh2yOy`wnljgz#B%p zZ`udV$_w<{jytD-Q{@CJzVQ!hW&oa=0f#ZJBQy#165E&Llv{-gL%}joAJ>y4(4lfr zl7utxnl-zJN6=ep#q6uknnM(db|_C!k&=cOzBf`~c&=~400x<_n^I;}nk@toCZeiT zVND@AhLzQ470EYvaonqS{YI5*zqv!#XWu~2jfXtO>ftue zp2zD{if7-wp6If4h6luJc=5@pqiex871EOG<1?JOICys30IpeHH<~MZctGrS5MiO399cwxth-`%}e<+VSNUNDW5l-jR($>K-oLx(ur|~} z@<vhjFe$c| z!LzUm8y5S=xGDC$HSW1z5_R{A8^H_}0YvY4cCuA!qzFh%WfIzvw{)NY(zk=lWkx z>VF{<%$#ihH`RoR@qa)j82?wu#I=sLJ;|sm+}D^sBR!xQl5E*c8i1#R&2T&+N#isI zpb77ov?c3|gF0GA;!5w%Zbjt{pQ=xWA$>~~z_01rq@nA2^LnE1UYNu!_>~U0Oq5b) zZhK*JnYHbmUGE-u@BsY(c&^<4@m&A@daj3qiY{81)KmZX8~%^y3Kho%X8ZlGcVt;V zE-r8G57lpKy5BAP;UT_7SiO)oac}##tr!47Bn4zZboUnK>0bm@*c!9Bk^78TPOEFK zlBJt+Tl8#D)|GD{~vE}0T9&|?GICe zq=R4pPc~`_VV25;hmze}FF}L5!_3^z1S#MlvAs`F7tz05$PIYjjZ25p*@ThQZgA!=r_}pZ>k-n45*JhhMHZG z=D%~)5hy-9swjjU}wdoi?D%>!WXL>tk6Zdz14_O4_H!;1gVl z2a8ldDK=DI-a+~OyJHiIl24HD6Y2YZW3StGkZi^{h|J}37O^c=>j|8ng?98oz?g(XmZ5_!_g*tIu) zB@{>E4ot~zj@SV7wFR~!sXQ)`s3^bGug9W-MML)EFbAcbL~-JGam1*0_)BWiw|=Oj zA;$t8gQt#bFm!rQYUQ~(`?)m3_x$7WDScR?b$|gRAEyr1;E{~o_yvI3%LhFcIOfww zt#IqSW{+aOb(0J$PFm#9vNx=|%I?Za#)CxSyd0Hl331w5sPQzD;rj*d@WwX|C(hfJBA__F@#CVJBNELMz!WM?iU?GlIEr@oey_DHqODEtal^MB!Rt(3!2qsz>tiew1G}rC={GESFAS8Rm&RpI|Ny{>S1xykMKVIO08B$6Jr!}NBSvRq4XlH znWvyP?|@A}zX~vO_agDRPMM`I1_(%fMnn1LVVPF`3nA#dUjHMpBXKU`E; zu85TVg^`9)Ys;~3R?|@HsWFZa;dV|&uyTr^Q2%_<%eCx}m=n_~Oy4QDp3PC~>d^@r zzi#%DoyHP}E3FVftI|!Bh{$JqAojuZrn3-=nyEkRCn756a7_lE+7;^Ec}*t)4GEE& z*!kDIqdjEO_6|zBc^@m`2GFqDFL2^+K;vaP3Yn0HeX3v?B*jT(M)0>X3ArU zWT(r&MSY@}B?!iZu}ABl~n=7Tq$*F7RLkrm;>q+jq!O`FxgEzdn5 z1Xhqh1+DA5*oX{vE;;z3GrhF8MWZcv|FG=!aW5A>UgWUnI^MM>nLE#WB%iE6b?I{* z6>sCO#$pS`5_e0hH{>GWH{FF>l<8WS5i+`lsrZH|0iI6C%z)sAj$V$q;`qX@DYkM? zJ53%=1%4Kl%L9Siw>UXaFhdiO95sme-P=fiuv~vvg#T!QveS~w0%MNIR7D}kp@eox zo!L&}8rB98p9W$FI-j+wI$pB!2P;O4MP4gwjGCgdjn-j{R5O#^7t~!#H)J<;5pv3X zmXs@ULYSEZX`gJul_{8Yf9H{Mfx#+O){JC&Za(KjSBw!U_1T+1tGetPzgf0R$1yW) zap>m{OcmdZp-TN_9tvoR0>>-AnTNz%7F4_>dA21|>~ixJXI_vODqjmNK0T@9&^P!U zdKi_lgu=s)2?ibK;>!7#6gNUi`zs|mg0ky%BM1&X6Nw9lyfi;DR9FuF==78!xvyRP z_AWb(!jC943Zz$u$gZTapV7$Q6I;27xvQ|)NNVU=4n7)srBZRXY^>0ZPV0kIdN2

    GwFe>b=0IJITgXgI_UKOkWb^@Z0S0GRXwSX7R& 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%0DXNY31vj)5}Qz|8@U=jss3>TK|jt|J2{p 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 literal 0 HcmV?d00001 diff --git a/src/sunstone/public/vendor/noVNC/favicon.ico b/src/sunstone/public/vendor/noVNC/favicon.ico new file mode 120000 index 0000000000..45399c8c20 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/favicon.ico @@ -0,0 +1 @@ +images/favicon.ico \ No newline at end of file diff --git a/src/sunstone/public/vendor/noVNC/images/Logo.svg b/src/sunstone/public/vendor/noVNC/images/Logo.svg new file mode 100644 index 0000000000..36a7ea6b7c --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/images/Logo.svg @@ -0,0 +1,687 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/sunstone/public/vendor/noVNC/images/favicon.ico b/src/sunstone/public/vendor/noVNC/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c999634f0e9b5fd5250f34d13118104261346610 GIT binary patch literal 1150 zcmb_bK~BR!4D{}%NjX#s9JoSJg;IC}2M$OaxNv|cAf&!xD-=TC(J!=D`m@FM#>T2d zB?5_@acqyryU7ALyz3h9c@D1yz$pMUXc)psjw1kIZjC@DSJ!pvuZF$S5EEVD`sO-K zwz~vXl@a^8vuXCdXQVt?^|DBBs};`<&ZW>?Y2J;;?7QO=uH&8|a7?raW54z=y-+UK zVvcb1_^ff#m~1{1q4bC`vi{NXgX{e4l9BSnCkyj_O)k$bT-NXTtaW?GeaRR8=>9={ zI559(gopow&Y>}1=uA{k`xoEyx2KvRChM%TiVOhwVpN6^_0yNId8osL^rTNZQIULc_^3E@(-y%Spc5Q~vy(d8L!)(x1n*7)_*losOPO6XtxtI&bNw>fdLNZ8Dwf z$IIAo{quy`M$-j;DK3=%w?ZjAaObK&H{HAptRzKWIeQ7*KiU)h_)g-r{Sm_V_d7i@ ze&ymaw?pTfHml?IIZTe*dmMBUR5LfIWL5K>i#m4b+qJBy1&05xz4K!eX8XL_`Om8f zVbx5BqIT4GSlSgy?m1KRiH|?#SMyHA8TzN@`>bi|&VIbRcH2a6i~WBVl#% zWRl#M`RQ-2?~glB>Kmrt@$!yDk*4p)b3T2KBbe4c{Fv#s_FrD!=E(K=v)<*pOqy(B slDTM#cEa+F0UAq7I2|-YE9TfUc1w106`8X%0>hZW)78&qol`;+0Ig`bxBvhE literal 0 HcmV?d00001 diff --git a/src/sunstone/public/vendor/noVNC/images/full_512x512.png b/src/sunstone/public/vendor/noVNC/images/full_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..1868e22425cc4a92f6127ecaa96028f1185e186f GIT binary patch literal 23962 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%0Dj@L3M??b%*Av=xu-CeA0R(3*sSq{Rm+&e3RE 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 Z+p6%jB=)+fF&F}u_d&k{to_(4{{qfiCS3pk literal 0 HcmV?d00001 diff --git a/src/sunstone/public/vendor/noVNC/include/base64.js b/src/sunstone/public/vendor/noVNC/include/base64.js new file mode 100644 index 0000000000..0b14332545 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/base64.js @@ -0,0 +1,146 @@ +/* + * Modified from: + * http://lxr.mozilla.org/mozilla/source/extensions/xml-rpc/src/nsXmlRpcClient.js#956 + */ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla XML-RPC Client component. + * + * The Initial Developer of the Original Code is + * Digital Creations 2, Inc. + * Portions created by the Initial Developer are Copyright (C) 2000 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Martijn Pieters (original author) + * Samuel Sieb + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +"use strict"; +/*jslint white: false, bitwise: false, plusplus: false */ +/*global console */ + +var Base64 = { + +/* Convert data (an array of integers) to a Base64 string. */ +toBase64Table : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', +base64Pad : '=', + +encode: function (data) { + var result = '', + chrTable = Base64.toBase64Table.split(''), + pad = Base64.base64Pad, + length = data.length, + i; + // Convert every three bytes to 4 ascii characters. + for (i = 0; i < (length - 2); i += 3) { + result += chrTable[data[i] >> 2]; + result += chrTable[((data[i] & 0x03) << 4) + (data[i+1] >> 4)]; + result += chrTable[((data[i+1] & 0x0f) << 2) + (data[i+2] >> 6)]; + result += chrTable[data[i+2] & 0x3f]; + } + + // Convert the remaining 1 or 2 bytes, pad out to 4 characters. + if (length%3) { + i = length - (length%3); + result += chrTable[data[i] >> 2]; + if ((length%3) === 2) { + result += chrTable[((data[i] & 0x03) << 4) + (data[i+1] >> 4)]; + result += chrTable[(data[i+1] & 0x0f) << 2]; + result += pad; + } else { + result += chrTable[(data[i] & 0x03) << 4]; + result += pad + pad; + } + } + + return result; +}, + +/* Convert Base64 data to a string */ +toBinaryTable : [ + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, + 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, + 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, + -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, + 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 +], + +decode: function (data, offset) { + offset = typeof(offset) !== 'undefined' ? offset : 0; + var binTable = Base64.toBinaryTable, + pad = Base64.base64Pad, + result, result_length, idx, i, c, padding, + leftbits = 0, // number of bits decoded, but yet to be appended + leftdata = 0, // bits decoded, but yet to be appended + data_length = data.indexOf('=') - offset; + + if (data_length < 0) { data_length = data.length - offset; } + + /* Every four characters is 3 resulting numbers */ + result_length = (data_length >> 2) * 3 + Math.floor((data_length%4)/1.5); + result = new Array(result_length); + + // Convert one by one. + for (idx = 0, i = offset; i < data.length; i++) { + c = binTable[data.charCodeAt(i) & 0x7f]; + padding = (data.charAt(i) === pad); + // Skip illegal characters and whitespace + if (c === -1) { + console.error("Illegal character '" + data.charCodeAt(i) + "'"); + continue; + } + + // Collect data into leftdata, update bitcount + leftdata = (leftdata << 6) | c; + leftbits += 6; + + // If we have 8 or more bits, append 8 bits to the result + if (leftbits >= 8) { + leftbits -= 8; + // Append if not padding. + if (!padding) { + result[idx++] = (leftdata >> leftbits) & 0xff; + } + leftdata &= (1 << leftbits) - 1; + } + } + + // If there are any bits left, the base64 string was corrupted + if (leftbits) { + throw {name: 'Base64-Error', + message: 'Corrupted base64 string'}; + } + + return result; +} + +}; /* End of Base64 namespace */ diff --git a/src/sunstone/public/vendor/noVNC/include/black.css b/src/sunstone/public/vendor/noVNC/include/black.css new file mode 100644 index 0000000000..3f95b88d20 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/black.css @@ -0,0 +1,124 @@ +body { + margin: 0px; + font-size: 13px; + color: #111; + font-family: "Helvetica"; +} + +#VNC_controls { + background: #111; + line-height: 1em; + color: #FFF; + overflow: hidden; + padding: 4px 24px; +} + +#VNC_controls ul { + list-style:none; + list-style-position: outside; + margin: 0px; + padding: 0px; +} +#VNC_controls li { + margin-right: 15px; + padding: 2px 0px; + float: left; +} +#VNC_controls li input[type=text], +#VNC_controls li input[type=password] { + border: 2px solid #333; +} + +#VNC_host { + width: 100px; +} +#VNC_port { + width: 50px; +} +#VNC_password { + width: 80px; +} +#VNC_encrypt { +} +#VNC_connect_button { + width: 100px; +} + +#VNC_status_bar td { + padding: 0px; + margin: 0px; +} +#VNC_status_bar div { + font-size: 12px; + font-weight: bold; + text-align: center; + margin: 0px; + padding: 1em; +} +.VNC_status_button { + font-size: 10px; + margin: 0px; + padding: 0px; +} +#VNC_status { + text-align: center; +} +#VNC_settings_menu { + display: none; + position: absolute; + width: 13em; + border: 1px solid #888; + color: #111; + font-weight: normal; + background-color: #f0f2f6; + padding: 5px; margin: 3px; + z-index: 100; opacity: 1; + text-align: left; white-space: normal; +} +#VNC_settings_menu ul { + list-style: none; + margin: 0px; + padding: 0px; +} + +.VNC_buttons_right { + text-align: right; +} +.VNC_buttons_left { + text-align: left; +} +.VNC_status_normal { + background: #111; + color: #fff; +} +.VNC_status_error { + background: #111; + color: #f44; +} +.VNC_status_warn { + background: #111; + color: #ff4; +} + +#VNC_screen { + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + background: #111; + padding: 20px; + margin: 0 auto; + color: #FFF; + margin-top: 20px; + text-align: center; + + /* This causes the width of the outer div(#screen) honor the size of the inner (#vnc) div */ + display: table; + table-layout: auto; +} +#VNC_canvas { + background: #111; + margin: 0 auto; +} +#VNC_clipboard { + display: none; +} diff --git a/src/sunstone/public/vendor/noVNC/include/canvas.js b/src/sunstone/public/vendor/noVNC/include/canvas.js new file mode 100644 index 0000000000..72af98eb00 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/canvas.js @@ -0,0 +1,568 @@ +/* + * noVNC: HTML5 VNC client + * Copyright (C) 2011 Joel Martin + * Licensed under LGPL-3 (see LICENSE.txt) + * + * See README.md for usage and integration instructions. + */ + +/*jslint browser: true, white: false, bitwise: false */ +/*global Util, Base64, changeCursor */ + +function Canvas(conf) { + "use strict"; + +conf = conf || {}; // Configuration +var that = {}, // Public API interface + + // Private Canvas namespace variables + c_forceCanvas = false, + + c_width = 0, + c_height = 0, + + c_prevStyle = "", + + c_webkit_bug = false, + c_flush_timer = null; + +// Configuration settings +function cdef(v, type, defval, desc) { + Util.conf_default(conf, that, v, type, defval, desc); } + +// Capability settings, default can be overridden +cdef('prefer_js', 'raw', null, 'Prefer Javascript over canvas methods'); +cdef('cursor_uri', 'raw', null, 'Can we render cursor using data URI'); + +cdef('target', 'dom', null, 'Canvas element for VNC viewport'); +cdef('focusContainer', 'dom', document, 'DOM element that traps keyboard input'); +cdef('true_color', 'bool', true, 'Request true color pixel data'); +cdef('colourMap', 'raw', [], 'Colour map array (not true color)'); +cdef('scale', 'float', 1, 'VNC viewport scale factor'); + +cdef('render_mode', 'str', '', 'Canvas rendering mode (read-only)'); + +// Override some specific getters/setters +that.set_prefer_js = function(val) { + if (val && c_forceCanvas) { + Util.Warn("Preferring Javascript to Canvas ops is not supported"); + return false; + } + conf.prefer_js = val; + return true; +}; + +that.get_colourMap = function(idx) { + if (typeof idx === 'undefined') { + return conf.colourMap; + } else { + return conf.colourMap[idx]; + } +}; + +that.set_colourMap = function(val, idx) { + if (typeof idx === 'undefined') { + conf.colourMap = val; + } else { + conf.colourMap[idx] = val; + } +}; + +that.set_render_mode = function () { throw("render_mode is read-only"); }; + +// Add some other getters/setters +that.get_width = function() { + return c_width; +}; +that.get_height = function() { + return c_height; +}; + +// +// Private functions +// + +// Create the public API interface +function constructor() { + Util.Debug(">> Canvas.init"); + + var c, ctx, func, imgTest, tval, i, curDat, curSave, + has_imageData = false, UE = Util.Engine; + + if (! conf.target) { throw("target must be set"); } + + if (typeof conf.target === 'string') { + throw("target must be a DOM element"); + } + + c = conf.target; + + if (! c.getContext) { throw("no getContext method"); } + + if (! conf.ctx) { conf.ctx = c.getContext('2d'); } + ctx = conf.ctx; + + Util.Debug("User Agent: " + navigator.userAgent); + if (UE.gecko) { Util.Debug("Browser: gecko " + UE.gecko); } + if (UE.webkit) { Util.Debug("Browser: webkit " + UE.webkit); } + if (UE.trident) { Util.Debug("Browser: trident " + UE.trident); } + if (UE.presto) { Util.Debug("Browser: presto " + UE.presto); } + + that.clear(); + + /* + * Determine browser Canvas feature support + * and select fastest rendering methods + */ + tval = 0; + try { + imgTest = ctx.getImageData(0, 0, 1,1); + imgTest.data[0] = 123; + imgTest.data[3] = 255; + ctx.putImageData(imgTest, 0, 0); + tval = ctx.getImageData(0, 0, 1, 1).data[0]; + if (tval === 123) { + has_imageData = true; + } + } catch (exc1) {} + + if (has_imageData) { + Util.Info("Canvas supports imageData"); + c_forceCanvas = false; + if (ctx.createImageData) { + // If it's there, it's faster + Util.Info("Using Canvas createImageData"); + conf.render_mode = "createImageData rendering"; + that.imageData = that.imageDataCreate; + } else if (ctx.getImageData) { + // I think this is mostly just Opera + Util.Info("Using Canvas getImageData"); + conf.render_mode = "getImageData rendering"; + that.imageData = that.imageDataGet; + } + Util.Info("Prefering javascript operations"); + if (conf.prefer_js === null) { + conf.prefer_js = true; + } + that.rgbxImage = that.rgbxImageData; + that.cmapImage = that.cmapImageData; + } else { + Util.Warn("Canvas lacks imageData, using fillRect (slow)"); + conf.render_mode = "fillRect rendering (slow)"; + c_forceCanvas = true; + conf.prefer_js = false; + that.rgbxImage = that.rgbxImageFill; + that.cmapImage = that.cmapImageFill; + } + + if (UE.webkit && UE.webkit >= 534.7 && UE.webkit <= 534.9) { + // Workaround WebKit canvas rendering bug #46319 + conf.render_mode += ", webkit bug workaround"; + Util.Debug("Working around WebKit bug #46319"); + c_webkit_bug = true; + for (func in {"fillRect":1, "copyImage":1, "rgbxImage":1, + "cmapImage":1, "blitStringImage":1}) { + that[func] = (function() { + var myfunc = that[func]; // Save original function + //Util.Debug("Wrapping " + func); + return function() { + myfunc.apply(this, arguments); + if (!c_flush_timer) { + c_flush_timer = setTimeout(that.flush, 100); + } + }; + }()); + } + } + + /* + * Determine browser support for setting the cursor via data URI + * scheme + */ + curDat = []; + for (i=0; i < 8 * 8 * 4; i += 1) { + curDat.push(255); + } + try { + curSave = c.style.cursor; + changeCursor(conf.target, curDat, curDat, 2, 2, 8, 8); + if (c.style.cursor) { + if (conf.cursor_uri === null) { + conf.cursor_uri = true; + } + Util.Info("Data URI scheme cursor supported"); + } else { + if (conf.cursor_uri === null) { + conf.cursor_uri = false; + } + Util.Warn("Data URI scheme cursor not supported"); + } + c.style.cursor = curSave; + } catch (exc2) { + Util.Error("Data URI scheme cursor test exception: " + exc2); + conf.cursor_uri = false; + } + + Util.Debug("<< Canvas.init"); + return that ; +} + +// +// Public API interface functions +// + +that.getContext = function () { + return conf.ctx; +}; + +that.rescale = function(factor) { + var c, tp, x, y, + properties = ['transform', 'WebkitTransform', 'MozTransform', null]; + c = conf.target; + tp = properties.shift(); + while (tp) { + if (typeof c.style[tp] !== 'undefined') { + break; + } + tp = properties.shift(); + } + + if (tp === null) { + Util.Debug("No scaling support"); + return; + } + + if (conf.scale === factor) { + //Util.Debug("Canvas already scaled to '" + factor + "'"); + return; + } + + conf.scale = factor; + x = c.width - c.width * factor; + y = c.height - c.height * factor; + c.style[tp] = "scale(" + conf.scale + ") translate(-" + x + "px, -" + y + "px)"; +}; + +that.resize = function(width, height, true_color) { + var c = conf.target; + + if (typeof true_color !== "undefined") { + conf.true_color = true_color; + } + c_prevStyle = ""; + + c.width = width; + c.height = height; + + c_width = c.offsetWidth; + c_height = c.offsetHeight; + + that.rescale(conf.scale); +}; + +that.clear = function() { + that.resize(640, 20); + conf.ctx.clearRect(0, 0, c_width, c_height); + + // No benefit over default ("source-over") in Chrome and firefox + //conf.ctx.globalCompositeOperation = "copy"; +}; + +that.flush = function() { + var old_val; + //Util.Debug(">> flush"); + // Force canvas redraw (for webkit bug #46319 workaround) + old_val = conf.target.style.marginRight; + conf.target.style.marginRight = "1px"; + c_flush_timer = null; + setTimeout(function () { + conf.target.style.marginRight = old_val; + }, 1); +}; + +that.setFillColor = function(color) { + var rgb, newStyle; + if (conf.true_color) { + rgb = color; + } else { + rgb = conf.colourMap[color[0]]; + } + newStyle = "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; + if (newStyle !== c_prevStyle) { + conf.ctx.fillStyle = newStyle; + c_prevStyle = newStyle; + } +}; + +that.fillRect = function(x, y, width, height, color) { + that.setFillColor(color); + conf.ctx.fillRect(x, y, width, height); +}; + +that.copyImage = function(old_x, old_y, new_x, new_y, width, height) { + conf.ctx.drawImage(conf.target, old_x, old_y, width, height, + new_x, new_y, width, height); +}; + +/* + * Tile rendering functions optimized for rendering engines. + * + * - In Chrome/webkit, Javascript image data array manipulations are + * faster than direct Canvas fillStyle, fillRect rendering. In + * gecko, Javascript array handling is much slower. + */ +that.getTile = function(x, y, width, height, color) { + var img, data = [], rgb, red, green, blue, i; + img = {'x': x, 'y': y, 'width': width, 'height': height, + 'data': data}; + if (conf.prefer_js) { + if (conf.true_color) { + rgb = color; + } else { + rgb = conf.colourMap[color[0]]; + } + red = rgb[0]; + green = rgb[1]; + blue = rgb[2]; + for (i = 0; i < (width * height * 4); i+=4) { + data[i ] = red; + data[i + 1] = green; + data[i + 2] = blue; + } + } else { + that.fillRect(x, y, width, height, color); + } + return img; +}; + +that.setSubTile = function(img, x, y, w, h, color) { + var data, p, rgb, red, green, blue, width, j, i, xend, yend; + if (conf.prefer_js) { + data = img.data; + width = img.width; + if (conf.true_color) { + rgb = color; + } else { + rgb = conf.colourMap[color[0]]; + } + red = rgb[0]; + green = rgb[1]; + blue = rgb[2]; + xend = x + w; + yend = y + h; + for (j = y; j < yend; j += 1) { + for (i = x; i < xend; i += 1) { + p = (i + (j * width) ) * 4; + data[p ] = red; + data[p + 1] = green; + data[p + 2] = blue; + } + } + } else { + that.fillRect(img.x + x, img.y + y, w, h, color); + } +}; + +that.putTile = function(img) { + if (conf.prefer_js) { + that.rgbxImage(img.x, img.y, img.width, img.height, img.data, 0); + } + // else: No-op, under gecko already done by setSubTile +}; + +that.imageDataGet = function(width, height) { + return conf.ctx.getImageData(0, 0, width, height); +}; +that.imageDataCreate = function(width, height) { + return conf.ctx.createImageData(width, height); +}; + +that.rgbxImageData = function(x, y, width, height, arr, offset) { + var img, i, j, data; + img = that.imageData(width, height); + data = img.data; + for (i=0, j=offset; i < (width * height * 4); i=i+4, j=j+4) { + data[i + 0] = arr[j + 0]; + data[i + 1] = arr[j + 1]; + data[i + 2] = arr[j + 2]; + data[i + 3] = 255; // Set Alpha + } + conf.ctx.putImageData(img, x, y); +}; + +// really slow fallback if we don't have imageData +that.rgbxImageFill = function(x, y, width, height, arr, offset) { + var i, j, sx = 0, sy = 0; + for (i=0, j=offset; i < (width * height); i+=1, j+=4) { + that.fillRect(x+sx, y+sy, 1, 1, [arr[j+0], arr[j+1], arr[j+2]]); + sx += 1; + if ((sx % width) === 0) { + sx = 0; + sy += 1; + } + } +}; + +that.cmapImageData = function(x, y, width, height, arr, offset) { + var img, i, j, data, rgb, cmap; + img = that.imageData(width, height); + data = img.data; + cmap = conf.colourMap; + for (i=0, j=offset; i < (width * height * 4); i+=4, j+=1) { + rgb = cmap[arr[j]]; + data[i + 0] = rgb[0]; + data[i + 1] = rgb[1]; + data[i + 2] = rgb[2]; + data[i + 3] = 255; // Set Alpha + } + conf.ctx.putImageData(img, x, y); +}; + +that.cmapImageFill = function(x, y, width, height, arr, offset) { + var i, j, sx = 0, sy = 0, cmap; + cmap = conf.colourMap; + for (i=0, j=offset; i < (width * height); i+=1, j+=1) { + that.fillRect(x+sx, y+sy, 1, 1, [arr[j]]); + sx += 1; + if ((sx % width) === 0) { + sx = 0; + sy += 1; + } + } +}; + + +that.blitImage = function(x, y, width, height, arr, offset) { + if (conf.true_color) { + that.rgbxImage(x, y, width, height, arr, offset); + } else { + that.cmapImage(x, y, width, height, arr, offset); + } +}; + +that.blitStringImage = function(str, x, y) { + var img = new Image(); + img.onload = function () { conf.ctx.drawImage(img, x, y); }; + img.src = str; +}; + +that.changeCursor = function(pixels, mask, hotx, hoty, w, h) { + if (conf.cursor_uri === false) { + Util.Warn("changeCursor called but no cursor data URI support"); + return; + } + + if (conf.true_color) { + changeCursor(conf.target, pixels, mask, hotx, hoty, w, h); + } else { + changeCursor(conf.target, pixels, mask, hotx, hoty, w, h, conf.colourMap); + } +}; + +that.defaultCursor = function() { + conf.target.style.cursor = "default"; +}; + +return constructor(); // Return the public API interface + +} // End of Canvas() + + +/* Set CSS cursor property using data URI encoded cursor file */ +function changeCursor(target, pixels, mask, hotx, hoty, w, h, cmap) { + var cur = [], rgb, IHDRsz, RGBsz, ANDsz, XORsz, url, idx, alpha, x, y; + //Util.Debug(">> changeCursor, x: " + hotx + ", y: " + hoty + ", w: " + w + ", h: " + h); + + // Push multi-byte little-endian values + cur.push16le = function (num) { + this.push((num ) & 0xFF, + (num >> 8) & 0xFF ); + }; + cur.push32le = function (num) { + this.push((num ) & 0xFF, + (num >> 8) & 0xFF, + (num >> 16) & 0xFF, + (num >> 24) & 0xFF ); + }; + + IHDRsz = 40; + RGBsz = w * h * 4; + XORsz = Math.ceil( (w * h) / 8.0 ); + ANDsz = Math.ceil( (w * h) / 8.0 ); + + // Main header + cur.push16le(0); // 0: Reserved + cur.push16le(2); // 2: .CUR type + cur.push16le(1); // 4: Number of images, 1 for non-animated ico + + // Cursor #1 header (ICONDIRENTRY) + cur.push(w); // 6: width + cur.push(h); // 7: height + cur.push(0); // 8: colors, 0 -> true-color + cur.push(0); // 9: reserved + cur.push16le(hotx); // 10: hotspot x coordinate + cur.push16le(hoty); // 12: hotspot y coordinate + cur.push32le(IHDRsz + RGBsz + XORsz + ANDsz); + // 14: cursor data byte size + cur.push32le(22); // 18: offset of cursor data in the file + + + // Cursor #1 InfoHeader (ICONIMAGE/BITMAPINFO) + cur.push32le(IHDRsz); // 22: Infoheader size + cur.push32le(w); // 26: Cursor width + cur.push32le(h*2); // 30: XOR+AND height + cur.push16le(1); // 34: number of planes + cur.push16le(32); // 36: bits per pixel + cur.push32le(0); // 38: Type of compression + + cur.push32le(XORsz + ANDsz); // 43: Size of Image + // Gimp leaves this as 0 + + cur.push32le(0); // 46: reserved + cur.push32le(0); // 50: reserved + cur.push32le(0); // 54: reserved + cur.push32le(0); // 58: reserved + + // 62: color data (RGBQUAD icColors[]) + for (y = h-1; y >= 0; y -= 1) { + for (x = 0; x < w; x += 1) { + idx = y * Math.ceil(w / 8) + Math.floor(x/8); + alpha = (mask[idx] << (x % 8)) & 0x80 ? 255 : 0; + + if (cmap) { + idx = (w * y) + x; + rgb = cmap[pixels[idx]]; + cur.push(rgb[2]); // blue + cur.push(rgb[1]); // green + cur.push(rgb[0]); // red + cur.push(alpha); // alpha + } else { + idx = ((w * y) + x) * 4; + cur.push(pixels[idx + 2]); // blue + cur.push(pixels[idx + 1]); // green + cur.push(pixels[idx + 0]); // red + cur.push(alpha); // alpha + } + } + } + + // XOR/bitmask data (BYTE icXOR[]) + // (ignored, just needs to be right size) + for (y = 0; y < h; y += 1) { + for (x = 0; x < Math.ceil(w / 8); x += 1) { + cur.push(0x00); + } + } + + // AND/bitmask data (BYTE icAND[]) + // (ignored, just needs to be right size) + for (y = 0; y < h; y += 1) { + for (x = 0; x < Math.ceil(w / 8); x += 1) { + cur.push(0x00); + } + } + + url = "data:image/x-icon;base64," + Base64.encode(cur); + target.style.cursor = "url(" + url + ") " + hotx + " " + hoty + ", default"; + //Util.Debug("<< changeCursor, cur.length: " + cur.length); +} diff --git a/src/sunstone/public/vendor/noVNC/include/des.js b/src/sunstone/public/vendor/noVNC/include/des.js new file mode 100644 index 0000000000..1f952851e3 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/des.js @@ -0,0 +1,273 @@ +/* + * Ported from Flashlight VNC ActionScript implementation: + * http://www.wizhelp.com/flashlight-vnc/ + * + * Full attribution follows: + * + * ------------------------------------------------------------------------- + * + * This DES class has been extracted from package Acme.Crypto for use in VNC. + * The unnecessary odd parity code has been removed. + * + * These changes are: + * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + + * DesCipher - the DES encryption method + * + * The meat of this code is by Dave Zimmerman , and is: + * + * Copyright (c) 1996 Widget Workshop, Inc. All Rights Reserved. + * + * Permission to use, copy, modify, and distribute this software + * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and + * without fee is hereby granted, provided that this copyright notice is kept + * intact. + * + * WIDGET WORKSHOP MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY + * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WIDGET WORKSHOP SHALL NOT BE LIABLE + * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE + * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE + * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT + * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE + * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE + * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE + * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). WIDGET WORKSHOP + * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR + * HIGH RISK ACTIVITIES. + * + * + * The rest is: + * + * Copyright (C) 1996 by Jef Poskanzer . All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Visit the ACME Labs Java page for up-to-date versions of this and other + * fine Java utilities: http://www.acme.com/java/ + */ + +"use strict"; +/*jslint white: false, bitwise: false, plusplus: false */ + +function DES(passwd) { + +// Tables, permutations, S-boxes, etc. +var PC2 = [13,16,10,23, 0, 4, 2,27,14, 5,20, 9,22,18,11, 3, + 25, 7,15, 6,26,19,12, 1,40,51,30,36,46,54,29,39, + 50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31 ], + totrot = [ 1, 2, 4, 6, 8,10,12,14,15,17,19,21,23,25,27,28], + z = 0x0, a,b,c,d,e,f, SP1,SP2,SP3,SP4,SP5,SP6,SP7,SP8, + keys = []; + +a=1<<16; b=1<<24; c=a|b; d=1<<2; e=1<<10; f=d|e; +SP1 = [c|e,z|z,a|z,c|f,c|d,a|f,z|d,a|z,z|e,c|e,c|f,z|e,b|f,c|d,b|z,z|d, + z|f,b|e,b|e,a|e,a|e,c|z,c|z,b|f,a|d,b|d,b|d,a|d,z|z,z|f,a|f,b|z, + a|z,c|f,z|d,c|z,c|e,b|z,b|z,z|e,c|d,a|z,a|e,b|d,z|e,z|d,b|f,a|f, + c|f,a|d,c|z,b|f,b|d,z|f,a|f,c|e,z|f,b|e,b|e,z|z,a|d,a|e,z|z,c|d]; +a=1<<20; b=1<<31; c=a|b; d=1<<5; e=1<<15; f=d|e; +SP2 = [c|f,b|e,z|e,a|f,a|z,z|d,c|d,b|f,b|d,c|f,c|e,b|z,b|e,a|z,z|d,c|d, + a|e,a|d,b|f,z|z,b|z,z|e,a|f,c|z,a|d,b|d,z|z,a|e,z|f,c|e,c|z,z|f, + z|z,a|f,c|d,a|z,b|f,c|z,c|e,z|e,c|z,b|e,z|d,c|f,a|f,z|d,z|e,b|z, + z|f,c|e,a|z,b|d,a|d,b|f,b|d,a|d,a|e,z|z,b|e,z|f,b|z,c|d,c|f,a|e]; +a=1<<17; b=1<<27; c=a|b; d=1<<3; e=1<<9; f=d|e; +SP3 = [z|f,c|e,z|z,c|d,b|e,z|z,a|f,b|e,a|d,b|d,b|d,a|z,c|f,a|d,c|z,z|f, + b|z,z|d,c|e,z|e,a|e,c|z,c|d,a|f,b|f,a|e,a|z,b|f,z|d,c|f,z|e,b|z, + c|e,b|z,a|d,z|f,a|z,c|e,b|e,z|z,z|e,a|d,c|f,b|e,b|d,z|e,z|z,c|d, + b|f,a|z,b|z,c|f,z|d,a|f,a|e,b|d,c|z,b|f,z|f,c|z,a|f,z|d,c|d,a|e]; +a=1<<13; b=1<<23; c=a|b; d=1<<0; e=1<<7; f=d|e; +SP4 = [c|d,a|f,a|f,z|e,c|e,b|f,b|d,a|d,z|z,c|z,c|z,c|f,z|f,z|z,b|e,b|d, + z|d,a|z,b|z,c|d,z|e,b|z,a|d,a|e,b|f,z|d,a|e,b|e,a|z,c|e,c|f,z|f, + b|e,b|d,c|z,c|f,z|f,z|z,z|z,c|z,a|e,b|e,b|f,z|d,c|d,a|f,a|f,z|e, + c|f,z|f,z|d,a|z,b|d,a|d,c|e,b|f,a|d,a|e,b|z,c|d,z|e,b|z,a|z,c|e]; +a=1<<25; b=1<<30; c=a|b; d=1<<8; e=1<<19; f=d|e; +SP5 = [z|d,a|f,a|e,c|d,z|e,z|d,b|z,a|e,b|f,z|e,a|d,b|f,c|d,c|e,z|f,b|z, + a|z,b|e,b|e,z|z,b|d,c|f,c|f,a|d,c|e,b|d,z|z,c|z,a|f,a|z,c|z,z|f, + z|e,c|d,z|d,a|z,b|z,a|e,c|d,b|f,a|d,b|z,c|e,a|f,b|f,z|d,a|z,c|e, + c|f,z|f,c|z,c|f,a|e,z|z,b|e,c|z,z|f,a|d,b|d,z|e,z|z,b|e,a|f,b|d]; +a=1<<22; b=1<<29; c=a|b; d=1<<4; e=1<<14; f=d|e; +SP6 = [b|d,c|z,z|e,c|f,c|z,z|d,c|f,a|z,b|e,a|f,a|z,b|d,a|d,b|e,b|z,z|f, + z|z,a|d,b|f,z|e,a|e,b|f,z|d,c|d,c|d,z|z,a|f,c|e,z|f,a|e,c|e,b|z, + b|e,z|d,c|d,a|e,c|f,a|z,z|f,b|d,a|z,b|e,b|z,z|f,b|d,c|f,a|e,c|z, + a|f,c|e,z|z,c|d,z|d,z|e,c|z,a|f,z|e,a|d,b|f,z|z,c|e,b|z,a|d,b|f]; +a=1<<21; b=1<<26; c=a|b; d=1<<1; e=1<<11; f=d|e; +SP7 = [a|z,c|d,b|f,z|z,z|e,b|f,a|f,c|e,c|f,a|z,z|z,b|d,z|d,b|z,c|d,z|f, + b|e,a|f,a|d,b|e,b|d,c|z,c|e,a|d,c|z,z|e,z|f,c|f,a|e,z|d,b|z,a|e, + b|z,a|e,a|z,b|f,b|f,c|d,c|d,z|d,a|d,b|z,b|e,a|z,c|e,z|f,a|f,c|e, + z|f,b|d,c|f,c|z,a|e,z|z,z|d,c|f,z|z,a|f,c|z,z|e,b|d,b|e,z|e,a|d]; +a=1<<18; b=1<<28; c=a|b; d=1<<6; e=1<<12; f=d|e; +SP8 = [b|f,z|e,a|z,c|f,b|z,b|f,z|d,b|z,a|d,c|z,c|f,a|e,c|e,a|f,z|e,z|d, + c|z,b|d,b|e,z|f,a|e,a|d,c|d,c|e,z|f,z|z,z|z,c|d,b|d,b|e,a|f,a|z, + a|f,a|z,c|e,z|e,z|d,c|d,z|e,a|f,b|e,z|d,b|d,c|z,c|d,b|z,a|z,b|f, + z|z,c|f,a|d,b|d,c|z,b|e,b|f,z|z,c|f,a|e,a|e,z|f,z|f,a|d,b|z,c|e]; + +// Set the key. +function setKeys(keyBlock) { + var i, j, l, m, n, o, pc1m = [], pcr = [], kn = [], + raw0, raw1, rawi, KnLi; + + for (j = 0, l = 56; j < 56; ++j, l-=8) { + l += l<-5 ? 65 : l<-3 ? 31 : l<-1 ? 63 : l===27 ? 35 : 0; // PC1 + m = l & 0x7; + pc1m[j] = ((keyBlock[l >>> 3] & (1<>> 10; + keys[KnLi] |= (raw1 & 0x00000fc0) >>> 6; + ++KnLi; + keys[KnLi] = (raw0 & 0x0003f000) << 12; + keys[KnLi] |= (raw0 & 0x0000003f) << 16; + keys[KnLi] |= (raw1 & 0x0003f000) >>> 4; + keys[KnLi] |= (raw1 & 0x0000003f); + ++KnLi; + } +} + +// Encrypt 8 bytes of text +function enc8(text) { + var i = 0, b = text.slice(), fval, keysi = 0, + l, r, x; // left, right, accumulator + + // Squash 8 bytes to 2 ints + l = b[i++]<<24 | b[i++]<<16 | b[i++]<<8 | b[i++]; + r = b[i++]<<24 | b[i++]<<16 | b[i++]<<8 | b[i++]; + + x = ((l >>> 4) ^ r) & 0x0f0f0f0f; + r ^= x; + l ^= (x << 4); + x = ((l >>> 16) ^ r) & 0x0000ffff; + r ^= x; + l ^= (x << 16); + x = ((r >>> 2) ^ l) & 0x33333333; + l ^= x; + r ^= (x << 2); + x = ((r >>> 8) ^ l) & 0x00ff00ff; + l ^= x; + r ^= (x << 8); + r = (r << 1) | ((r >>> 31) & 1); + x = (l ^ r) & 0xaaaaaaaa; + l ^= x; + r ^= x; + l = (l << 1) | ((l >>> 31) & 1); + + for (i = 0; i < 8; ++i) { + x = (r << 28) | (r >>> 4); + x ^= keys[keysi++]; + fval = SP7[x & 0x3f]; + fval |= SP5[(x >>> 8) & 0x3f]; + fval |= SP3[(x >>> 16) & 0x3f]; + fval |= SP1[(x >>> 24) & 0x3f]; + x = r ^ keys[keysi++]; + fval |= SP8[x & 0x3f]; + fval |= SP6[(x >>> 8) & 0x3f]; + fval |= SP4[(x >>> 16) & 0x3f]; + fval |= SP2[(x >>> 24) & 0x3f]; + l ^= fval; + x = (l << 28) | (l >>> 4); + x ^= keys[keysi++]; + fval = SP7[x & 0x3f]; + fval |= SP5[(x >>> 8) & 0x3f]; + fval |= SP3[(x >>> 16) & 0x3f]; + fval |= SP1[(x >>> 24) & 0x3f]; + x = l ^ keys[keysi++]; + fval |= SP8[x & 0x0000003f]; + fval |= SP6[(x >>> 8) & 0x3f]; + fval |= SP4[(x >>> 16) & 0x3f]; + fval |= SP2[(x >>> 24) & 0x3f]; + r ^= fval; + } + + r = (r << 31) | (r >>> 1); + x = (l ^ r) & 0xaaaaaaaa; + l ^= x; + r ^= x; + l = (l << 31) | (l >>> 1); + x = ((l >>> 8) ^ r) & 0x00ff00ff; + r ^= x; + l ^= (x << 8); + x = ((l >>> 2) ^ r) & 0x33333333; + r ^= x; + l ^= (x << 2); + x = ((r >>> 16) ^ l) & 0x0000ffff; + l ^= x; + r ^= (x << 16); + x = ((r >>> 4) ^ l) & 0x0f0f0f0f; + l ^= x; + r ^= (x << 4); + + // Spread ints to bytes + x = [r, l]; + for (i = 0; i < 8; i++) { + b[i] = (x[i>>>2] >>> (8*(3 - (i%4)))) % 256; + if (b[i] < 0) { b[i] += 256; } // unsigned + } + return b; +} + +// Encrypt 16 bytes of text using passwd as key +function encrypt(t) { + return enc8(t.slice(0,8)).concat(enc8(t.slice(8,16))); +} + +setKeys(passwd); // Setup keys +return {'encrypt': encrypt}; // Public interface + +} // function DES diff --git a/src/sunstone/public/vendor/noVNC/include/input.js b/src/sunstone/public/vendor/noVNC/include/input.js new file mode 100644 index 0000000000..dd9b04a92d --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/input.js @@ -0,0 +1,1861 @@ +/* + * noVNC: HTML5 VNC client + * Copyright (C) 2011 Joel Martin + * Licensed under LGPL-3 (see LICENSE.txt) + */ + +/*jslint browser: true, white: false, bitwise: false */ +/*global window, Util */ + + +// +// Keyboard event handler +// + +function Keyboard(conf) { + "use strict"; + +conf = conf || {}; // Configuration +var that = {}, // Public API interface + + keyDownList = []; // List of depressed keys + // (even if they are happy) + + +// Configuration settings +function cdef(v, type, defval, desc) { + Util.conf_default(conf, that, v, type, defval, desc); } + +// Capability settings, default can be overridden +cdef('target', 'dom', document, 'DOM element that grabs keyboard input'); +cdef('focused', 'bool', true, 'Capture and send key strokes'); + +cdef('keyPress', 'func', null, 'Handler for key press/release'); + +that.set_target = function () { throw("target cannot be changed"); } + +// +// Private functions +// + + +// From the event keyCode return the keysym value for keys that need +// to be suppressed otherwise they may trigger unintended browser +// actions +function getKeysymSpecial(evt, kind) { + var keysym = null; + + switch ( evt.keyCode ) { + case 8 : keysym = 0xFF08; break; // BACKSPACE + case 9 : keysym = 0xFF09; break; // TAB + case 13 : keysym = 0xFF0D; break; // ENTER + case 27 : keysym = 0xFF1B; break; // ESCAPE + case 46 : keysym = 0xFFFF; break; // DELETE + case 36 : keysym = 0xFF50; break; // HOME + case 35 : keysym = 0xFF57; break; // END + case 33 : keysym = 0xFF55; break; // PAGE_UP + case 34 : keysym = 0xFF56; break; // PAGE_DOWN + case 37 : keysym = 0xFF51; break; // LEFT + case 38 : keysym = 0xFF52; break; // UP + case 39 : keysym = 0xFF53; break; // RIGHT + case 40 : keysym = 0xFF54; break; // DOWN + case 16 : keysym = 0xFFE1; break; // SHIFT + case 17 : keysym = 0xFFE3; break; // CONTROL + //case 18 : keysym = 0xFFE7; break; // Left Meta (Mac Option) + case 18 : keysym = 0xFFE9; break; // Left ALT (Mac Command) + + default : break; + } + + if (kind === 'down') { + switch ( evt.keyCode ) { + case 45 : keysym = 0xFF63; break; // INSERT + // '-' during keyPress + case 112 : keysym = 0xFFBE; break; // F1 + case 113 : keysym = 0xFFBF; break; // F2 + case 114 : keysym = 0xFFC0; break; // F3 + case 115 : keysym = 0xFFC1; break; // F4 + case 116 : keysym = 0xFFC2; break; // F5 + case 117 : keysym = 0xFFC3; break; // F6 + case 118 : keysym = 0xFFC4; break; // F7 + case 119 : keysym = 0xFFC5; break; // F8 + case 120 : keysym = 0xFFC6; break; // F9 + case 121 : keysym = 0xFFC7; break; // F10 + case 122 : keysym = 0xFFC8; break; // F11 + case 123 : keysym = 0xFFC9; break; // F12 + + default : break; + } + } + + if ((!keysym) && (evt.ctrlKey || evt.altKey)) { + if ((typeof(evt.which) !== "undefined") && (evt.which > 0)) { + keysym = evt.which; + } else { + // IE9 always + // Firefox and Opera when ctrl/alt + special + Util.Warn("which not set, using keyCode"); + keysym = evt.keyCode; + } + + /* Remap symbols */ + switch (keysym) { + case 186 : keysym = 59; break; // ; (IE) + case 187 : keysym = 61; break; // = (IE) + case 188 : keysym = 44; break; // , (Mozilla, IE) + case 109 : // - (Mozilla, Opera) + if (Util.Engine.gecko || Util.Engine.presto) { + keysym = 45; } + break; + case 189 : keysym = 45; break; // - (IE) + case 190 : keysym = 46; break; // . (Mozilla, IE) + case 191 : keysym = 47; break; // / (Mozilla, IE) + case 192 : keysym = 96; break; // ` (Mozilla, IE) + case 219 : keysym = 91; break; // [ (Mozilla, IE) + case 220 : keysym = 92; break; // \ (Mozilla, IE) + case 221 : keysym = 93; break; // ] (Mozilla, IE) + case 222 : keysym = 39; break; // ' (Mozilla, IE) + } + + /* Remap shifted and unshifted keys */ + if (!!evt.shiftKey) { + switch (keysym) { + case 48 : keysym = 41 ; break; // ) (shifted 0) + case 49 : keysym = 33 ; break; // ! (shifted 1) + case 50 : keysym = 64 ; break; // @ (shifted 2) + case 51 : keysym = 35 ; break; // # (shifted 3) + case 52 : keysym = 36 ; break; // $ (shifted 4) + case 53 : keysym = 37 ; break; // % (shifted 5) + case 54 : keysym = 94 ; break; // ^ (shifted 6) + case 55 : keysym = 38 ; break; // & (shifted 7) + case 56 : keysym = 42 ; break; // * (shifted 8) + case 57 : keysym = 40 ; break; // ( (shifted 9) + + case 59 : keysym = 58 ; break; // : (shifted `) + case 61 : keysym = 43 ; break; // + (shifted ;) + case 44 : keysym = 60 ; break; // < (shifted ,) + case 45 : keysym = 95 ; break; // _ (shifted -) + case 46 : keysym = 62 ; break; // > (shifted .) + case 47 : keysym = 63 ; break; // ? (shifted /) + case 96 : keysym = 126; break; // ~ (shifted `) + case 91 : keysym = 123; break; // { (shifted [) + case 92 : keysym = 124; break; // | (shifted \) + case 93 : keysym = 125; break; // } (shifted ]) + case 39 : keysym = 34 ; break; // " (shifted ') + } + } else if ((keysym >= 65) && (keysym <=90)) { + /* Remap unshifted A-Z */ + keysym += 32; + } else if (evt.keyLocation === 3) { + // numpad keys + switch (keysym) { + case 96 : keysym = 48; break; // 0 + case 97 : keysym = 49; break; // 1 + case 98 : keysym = 50; break; // 2 + case 99 : keysym = 51; break; // 3 + case 100: keysym = 52; break; // 4 + case 101: keysym = 53; break; // 5 + case 102: keysym = 54; break; // 6 + case 103: keysym = 55; break; // 7 + case 104: keysym = 56; break; // 8 + case 105: keysym = 57; break; // 9 + case 109: keysym = 45; break; // - + case 110: keysym = 46; break; // . + case 111: keysym = 47; break; // / + } + } + } + + return keysym; +} + +/* Translate DOM keyPress event to keysym value */ +function getKeysym(evt) { + var keysym, msg; + + if (typeof(evt.which) !== "undefined") { + // WebKit, Firefox, Opera + keysym = evt.which; + } else { + // IE9 + Util.Warn("which not set, using keyCode"); + keysym = evt.keyCode; + } + + if ((keysym > 255) && (keysym < 0xFF00)) { + msg = "Mapping keysym " + keysym; + // Map Unicode outside Latin 1 to X11 keysyms + keysym = unicodeTable[keysym]; + if (typeof(keysym) === 'undefined') { + keysym = 0; + } + Util.Debug(msg + " to " + keysym); + } + + return keysym; +} + +function show_keyDownList(kind) { + var msg = "keyDownList (" + kind + "):\n"; + for (var c = 0; c < keyDownList.length; c++) { + msg = msg + " " + c + " - keyCode: " + keyDownList[c].keyCode + + " - which: " + keyDownList[c].which + "\n"; + } + //Util.Debug(msg); +} + +function copyKeyEvent(evt) { + var members = ['keyCode', 'charCode', 'which', + 'altKey', 'ctrlKey', 'shiftKey', + 'keyLocation', 'keyIdentifier'], i, obj = {}; + for (i = 0; i < members.length; i++) { + if (typeof(evt[members[i]]) !== "undefined") { + obj[members[i]] = evt[members[i]]; + } + } + return obj; +} + +function pushKeyEvent(fevt) { + keyDownList.push(fevt); +} + +function getKeyEvent(keyCode, pop) { + var i, fevt = null; + for (i = keyDownList.length-1; i >= 0; i--) { + if (keyDownList[i].keyCode === keyCode) { + if ((typeof(pop) !== "undefined") && (pop)) { + fevt = keyDownList.splice(i, 1)[0]; + } else { + fevt = keyDownList[i]; + } + break; + } + } + return fevt; +} + +function ignoreKeyEvent(evt) { + // Blarg. Some keys have a different keyCode on keyDown vs keyUp + if (evt.keyCode === 229) { + // French AZERTY keyboard dead key. + // Lame thing is that the respective keyUp is 219 so we can't + // properly ignore the keyUp event + return true; + } + return false; +} + + +// +// Key Event Handling: +// +// There are several challenges when dealing with key events: +// - The meaning and use of keyCode, charCode and which depends on +// both the browser and the event type (keyDown/Up vs keyPress). +// - We cannot automatically determine the keyboard layout +// - The keyDown and keyUp events have a keyCode value that has not +// been translated by modifier keys. +// - The keyPress event has a translated (for layout and modifiers) +// character code but the attribute containing it differs. keyCode +// contains the translated value in WebKit (Chrome/Safari), Opera +// 11 and IE9. charCode contains the value in WebKit and Firefox. +// The which attribute contains the value on WebKit, Firefox and +// Opera 11. +// - The keyDown/Up keyCode value indicates (sort of) the physical +// key was pressed but only for standard US layout. On a US +// keyboard, the '-' and '_' characters are on the same key and +// generate a keyCode value of 189. But on an AZERTY keyboard even +// though they are different physical keys they both still +// generate a keyCode of 189! +// - To prevent a key event from propagating to the browser and +// causing unwanted default actions (such as closing a tab, +// opening a menu, shifting focus, etc) we must suppress this +// event in both keyDown and keyPress because not all key strokes +// generate on a keyPress event. Also, in WebKit and IE9 +// suppressing the keyDown prevents a keyPress but other browsers +// still generated a keyPress even if keyDown is suppressed. +// +// For safe key events, we wait until the keyPress event before +// reporting a key down event. For unsafe key events, we report a key +// down event when the keyDown event fires and we suppress any further +// actions (including keyPress). +// +// In order to report a key up event that matches what we reported +// for the key down event, we keep a list of keys that are currently +// down. When the keyDown event happens, we add the key event to the +// list. If it is a safe key event, then we update the which attribute +// in the most recent item on the list when we received a keyPress +// event (keyPress should immediately follow keyDown). When we +// received a keyUp event we search for the event on the list with +// a matching keyCode and we report the character code using the value +// in the 'which' attribute that was stored with that key. +// + +function onKeyDown(e) { + if (! conf.focused) { + return true; + } + var fevt = null, evt = (e ? e : window.event), + keysym = null, suppress = false; + Util.Debug("onKeyDown kC:" + evt.keyCode + " cC:" + evt.charCode + " w:" + evt.which); + + fevt = copyKeyEvent(evt); + + keysym = getKeysymSpecial(evt, 'down'); + // Save keysym decoding for use in keyUp + fevt.keysym = keysym; + if (keysym) { + // If it is a key or key combination that might trigger + // browser behaviors or it has no corresponding keyPress + // event, then send it immediately + if (conf.keyPress && !ignoreKeyEvent(evt)) { + Util.Debug("keyPress down 1, keysym: " + keysym + + " (key: " + evt.keyCode + ", which: " + evt.which + ")"); + conf.keyPress(keysym, 1, evt); + } + suppress = true; + } + + if (! ignoreKeyEvent(evt)) { + // Add it to the list of depressed keys + pushKeyEvent(fevt); + show_keyDownList('down'); + } + + if (suppress) { + // Suppress bubbling/default actions + Util.stopEvent(e); + return false; + } else { + // Allow the event to bubble and become a keyPress event which + // will have the character code translated + return true; + } +} + +function onKeyPress(e) { + if (! conf.focused) { + return true; + } + var evt = (e ? e : window.event), + kdlen = keyDownList.length, keysym = null; + Util.Debug("onKeyPress kC:" + evt.keyCode + " cC:" + evt.charCode + " w:" + evt.which); + + if (((evt.which !== "undefined") && (evt.which === 0)) || + (getKeysymSpecial(evt, 'press'))) { + // Firefox and Opera generate a keyPress event even if keyDown + // is suppressed. But the keys we want to suppress will have + // either: + // - the which attribute set to 0 + // - getKeysymSpecial(..., 'press') will identify it + Util.Debug("Ignoring special key in keyPress"); + Util.stopEvent(e); + return false; + } + + keysym = getKeysym(evt); + + // Modify the the which attribute in the depressed keys list so + // that the keyUp event will be able to have the character code + // translation available. + if (kdlen > 0) { + keyDownList[kdlen-1].keysym = keysym; + } else { + Util.Warn("keyDownList empty when keyPress triggered"); + } + + show_keyDownList('press'); + + // Send the translated keysym + if (conf.keyPress && (keysym > 0)) { + Util.Debug("keyPress down 2, keysym: " + keysym + + " (key: " + evt.keyCode + ", which: " + evt.which + ")"); + conf.keyPress(keysym, 1, evt); + } + + // Stop keypress events just in case + Util.stopEvent(e); + return false; +} + +function onKeyUp(e) { + if (! conf.focused) { + return true; + } + var fevt = null, evt = (e ? e : window.event), i, keysym; + Util.Debug("onKeyUp kC:" + evt.keyCode + " cC:" + evt.charCode + " w:" + evt.which); + + fevt = getKeyEvent(evt.keyCode, true); + + if (fevt) { + keysym = fevt.keysym; + } else { + Util.Warn("Key event (keyCode = " + evt.keyCode + + ") not found on keyDownList"); + keysym = 0; + } + + show_keyDownList('up'); + + if (conf.keyPress && (keysym > 0)) { + Util.Debug("keyPress up, keysym: " + keysym + + " (key: " + evt.keyCode + ", which: " + evt.which + ")"); + conf.keyPress(keysym, 0, evt); + } + Util.stopEvent(e); + return false; +} + +// +// Public API interface functions +// + +that.grab = function() { + //Util.Debug(">> Keyboard.grab"); + var c = conf.target; + + Util.addEvent(c, 'keydown', onKeyDown); + Util.addEvent(c, 'keyup', onKeyUp); + Util.addEvent(c, 'keypress', onKeyPress); + + //Util.Debug("<< Keyboard.grab"); +}; + +that.ungrab = function() { + //Util.Debug(">> Keyboard.ungrab"); + var c = conf.target; + + Util.removeEvent(c, 'keydown', onKeyDown); + Util.removeEvent(c, 'keyup', onKeyUp); + Util.removeEvent(c, 'keypress', onKeyPress); + + //Util.Debug(">> Keyboard.ungrab"); +}; + +return that; // Return the public API interface + +} // End of Keyboard() + + +// +// Mouse event handler +// + +function Mouse(conf) { + "use strict"; + +conf = conf || {}; // Configuration +var that = {}; // Public API interface + + +// Configuration settings +function cdef(v, type, defval, desc) { + Util.conf_default(conf, that, v, type, defval, desc); } + +// Capability settings, default can be overridden +cdef('target', 'dom', document, 'DOM element that grabs mouse input'); +cdef('focused', 'bool', true, 'Capture and send mouse clicks/movement'); + +cdef('mouseButton', 'func', null, 'Handler for mouse button click/release'); +cdef('mouseMove', 'func', null, 'Handler for mouse movement'); + +that.set_target = function () { throw("target cannot be changed"); } + +// +// Private functions +// + +function onMouseButton(e, down) { + var evt, pos, bmask; + if (! conf.focused) { + return true; + } + evt = (e ? e : window.event); + pos = Util.getEventPosition(e, conf.target, conf.scale); + if (evt.which) { + /* everything except IE */ + bmask = 1 << evt.button; + } else { + /* IE including 9 */ + bmask = (evt.button & 0x1) + // Left + (evt.button & 0x2) * 2 + // Right + (evt.button & 0x4) / 2; // Middle + } + //Util.Debug("mouse " + pos.x + "," + pos.y + " down: " + down + + // " bmask: " + bmask + "(evt.button: " + evt.button + ")"); + if (conf.mouseButton) { + conf.mouseButton(pos.x, pos.y, down, bmask); + } + Util.stopEvent(e); + return false; +} + +function onMouseDown(e) { + onMouseButton(e, 1); +} + +function onMouseUp(e) { + onMouseButton(e, 0); +} + +function onMouseWheel(e) { + var evt, pos, bmask, wheelData; + if (! conf.focused) { + return true; + } + evt = (e ? e : window.event); + pos = Util.getEventPosition(e, conf.target, conf.scale); + wheelData = evt.detail ? evt.detail * -1 : evt.wheelDelta / 40; + if (wheelData > 0) { + bmask = 1 << 3; + } else { + bmask = 1 << 4; + } + //Util.Debug('mouse scroll by ' + wheelData + ':' + pos.x + "," + pos.y); + if (conf.mouseButton) { + conf.mouseButton(pos.x, pos.y, 1, bmask); + conf.mouseButton(pos.x, pos.y, 0, bmask); + } + Util.stopEvent(e); + return false; +} + +function onMouseMove(e) { + var evt, pos; + if (! conf.focused) { + return true; + } + evt = (e ? e : window.event); + pos = Util.getEventPosition(e, conf.target, conf.scale); + //Util.Debug('mouse ' + evt.which + '/' + evt.button + ' up:' + pos.x + "," + pos.y); + if (conf.mouseMove) { + conf.mouseMove(pos.x, pos.y); + } +} + +function onMouseDisable(e) { + var evt, pos; + if (! conf.focused) { + return true; + } + evt = (e ? e : window.event); + pos = Util.getEventPosition(e, conf.target, conf.scale); + /* Stop propagation if inside canvas area */ + if ((pos.x >= 0) && (pos.y >= 0) && + (pos.x < conf.target.offsetWidth) && + (pos.y < conf.target.offsetHeight)) { + //Util.Debug("mouse event disabled"); + Util.stopEvent(e); + return false; + } + //Util.Debug("mouse event not disabled"); + return true; +} + +// +// Public API interface functions +// + +that.grab = function() { + //Util.Debug(">> Mouse.grab"); + var c = conf.target; + + Util.addEvent(c, 'mousedown', onMouseDown); + Util.addEvent(c, 'mouseup', onMouseUp); + Util.addEvent(c, 'mousemove', onMouseMove); + Util.addEvent(c, (Util.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel', + onMouseWheel); + + /* Work around right and middle click browser behaviors */ + Util.addEvent(document, 'click', onMouseDisable); + Util.addEvent(document.body, 'contextmenu', onMouseDisable); + + //Util.Debug("<< Mouse.grab"); +}; + +that.ungrab = function() { + //Util.Debug(">> Mouse.ungrab"); + var c = conf.target; + + Util.removeEvent(c, 'mousedown', onMouseDown); + Util.removeEvent(c, 'mouseup', onMouseUp); + Util.removeEvent(c, 'mousemove', onMouseMove); + Util.removeEvent(c, (Util.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel', + onMouseWheel); + + /* Work around right and middle click browser behaviors */ + Util.removeEvent(document, 'click', onMouseDisable); + Util.removeEvent(document.body, 'contextmenu', onMouseDisable); + + //Util.Debug(">> Mouse.ungrab"); +}; + +return that; // Return the public API interface + +} // End of Mouse() + + +/* + * Browser keypress to X11 keysym for Unicode characters > U+00FF + */ +unicodeTable = { + 0x0104 : 0x01a1, + 0x02D8 : 0x01a2, + 0x0141 : 0x01a3, + 0x013D : 0x01a5, + 0x015A : 0x01a6, + 0x0160 : 0x01a9, + 0x015E : 0x01aa, + 0x0164 : 0x01ab, + 0x0179 : 0x01ac, + 0x017D : 0x01ae, + 0x017B : 0x01af, + 0x0105 : 0x01b1, + 0x02DB : 0x01b2, + 0x0142 : 0x01b3, + 0x013E : 0x01b5, + 0x015B : 0x01b6, + 0x02C7 : 0x01b7, + 0x0161 : 0x01b9, + 0x015F : 0x01ba, + 0x0165 : 0x01bb, + 0x017A : 0x01bc, + 0x02DD : 0x01bd, + 0x017E : 0x01be, + 0x017C : 0x01bf, + 0x0154 : 0x01c0, + 0x0102 : 0x01c3, + 0x0139 : 0x01c5, + 0x0106 : 0x01c6, + 0x010C : 0x01c8, + 0x0118 : 0x01ca, + 0x011A : 0x01cc, + 0x010E : 0x01cf, + 0x0110 : 0x01d0, + 0x0143 : 0x01d1, + 0x0147 : 0x01d2, + 0x0150 : 0x01d5, + 0x0158 : 0x01d8, + 0x016E : 0x01d9, + 0x0170 : 0x01db, + 0x0162 : 0x01de, + 0x0155 : 0x01e0, + 0x0103 : 0x01e3, + 0x013A : 0x01e5, + 0x0107 : 0x01e6, + 0x010D : 0x01e8, + 0x0119 : 0x01ea, + 0x011B : 0x01ec, + 0x010F : 0x01ef, + 0x0111 : 0x01f0, + 0x0144 : 0x01f1, + 0x0148 : 0x01f2, + 0x0151 : 0x01f5, + 0x0171 : 0x01fb, + 0x0159 : 0x01f8, + 0x016F : 0x01f9, + 0x0163 : 0x01fe, + 0x02D9 : 0x01ff, + 0x0126 : 0x02a1, + 0x0124 : 0x02a6, + 0x0130 : 0x02a9, + 0x011E : 0x02ab, + 0x0134 : 0x02ac, + 0x0127 : 0x02b1, + 0x0125 : 0x02b6, + 0x0131 : 0x02b9, + 0x011F : 0x02bb, + 0x0135 : 0x02bc, + 0x010A : 0x02c5, + 0x0108 : 0x02c6, + 0x0120 : 0x02d5, + 0x011C : 0x02d8, + 0x016C : 0x02dd, + 0x015C : 0x02de, + 0x010B : 0x02e5, + 0x0109 : 0x02e6, + 0x0121 : 0x02f5, + 0x011D : 0x02f8, + 0x016D : 0x02fd, + 0x015D : 0x02fe, + 0x0138 : 0x03a2, + 0x0156 : 0x03a3, + 0x0128 : 0x03a5, + 0x013B : 0x03a6, + 0x0112 : 0x03aa, + 0x0122 : 0x03ab, + 0x0166 : 0x03ac, + 0x0157 : 0x03b3, + 0x0129 : 0x03b5, + 0x013C : 0x03b6, + 0x0113 : 0x03ba, + 0x0123 : 0x03bb, + 0x0167 : 0x03bc, + 0x014A : 0x03bd, + 0x014B : 0x03bf, + 0x0100 : 0x03c0, + 0x012E : 0x03c7, + 0x0116 : 0x03cc, + 0x012A : 0x03cf, + 0x0145 : 0x03d1, + 0x014C : 0x03d2, + 0x0136 : 0x03d3, + 0x0172 : 0x03d9, + 0x0168 : 0x03dd, + 0x016A : 0x03de, + 0x0101 : 0x03e0, + 0x012F : 0x03e7, + 0x0117 : 0x03ec, + 0x012B : 0x03ef, + 0x0146 : 0x03f1, + 0x014D : 0x03f2, + 0x0137 : 0x03f3, + 0x0173 : 0x03f9, + 0x0169 : 0x03fd, + 0x016B : 0x03fe, + 0x1E02 : 0x1001e02, + 0x1E03 : 0x1001e03, + 0x1E0A : 0x1001e0a, + 0x1E80 : 0x1001e80, + 0x1E82 : 0x1001e82, + 0x1E0B : 0x1001e0b, + 0x1EF2 : 0x1001ef2, + 0x1E1E : 0x1001e1e, + 0x1E1F : 0x1001e1f, + 0x1E40 : 0x1001e40, + 0x1E41 : 0x1001e41, + 0x1E56 : 0x1001e56, + 0x1E81 : 0x1001e81, + 0x1E57 : 0x1001e57, + 0x1E83 : 0x1001e83, + 0x1E60 : 0x1001e60, + 0x1EF3 : 0x1001ef3, + 0x1E84 : 0x1001e84, + 0x1E85 : 0x1001e85, + 0x1E61 : 0x1001e61, + 0x0174 : 0x1000174, + 0x1E6A : 0x1001e6a, + 0x0176 : 0x1000176, + 0x0175 : 0x1000175, + 0x1E6B : 0x1001e6b, + 0x0177 : 0x1000177, + 0x0152 : 0x13bc, + 0x0153 : 0x13bd, + 0x0178 : 0x13be, + 0x203E : 0x047e, + 0x3002 : 0x04a1, + 0x300C : 0x04a2, + 0x300D : 0x04a3, + 0x3001 : 0x04a4, + 0x30FB : 0x04a5, + 0x30F2 : 0x04a6, + 0x30A1 : 0x04a7, + 0x30A3 : 0x04a8, + 0x30A5 : 0x04a9, + 0x30A7 : 0x04aa, + 0x30A9 : 0x04ab, + 0x30E3 : 0x04ac, + 0x30E5 : 0x04ad, + 0x30E7 : 0x04ae, + 0x30C3 : 0x04af, + 0x30FC : 0x04b0, + 0x30A2 : 0x04b1, + 0x30A4 : 0x04b2, + 0x30A6 : 0x04b3, + 0x30A8 : 0x04b4, + 0x30AA : 0x04b5, + 0x30AB : 0x04b6, + 0x30AD : 0x04b7, + 0x30AF : 0x04b8, + 0x30B1 : 0x04b9, + 0x30B3 : 0x04ba, + 0x30B5 : 0x04bb, + 0x30B7 : 0x04bc, + 0x30B9 : 0x04bd, + 0x30BB : 0x04be, + 0x30BD : 0x04bf, + 0x30BF : 0x04c0, + 0x30C1 : 0x04c1, + 0x30C4 : 0x04c2, + 0x30C6 : 0x04c3, + 0x30C8 : 0x04c4, + 0x30CA : 0x04c5, + 0x30CB : 0x04c6, + 0x30CC : 0x04c7, + 0x30CD : 0x04c8, + 0x30CE : 0x04c9, + 0x30CF : 0x04ca, + 0x30D2 : 0x04cb, + 0x30D5 : 0x04cc, + 0x30D8 : 0x04cd, + 0x30DB : 0x04ce, + 0x30DE : 0x04cf, + 0x30DF : 0x04d0, + 0x30E0 : 0x04d1, + 0x30E1 : 0x04d2, + 0x30E2 : 0x04d3, + 0x30E4 : 0x04d4, + 0x30E6 : 0x04d5, + 0x30E8 : 0x04d6, + 0x30E9 : 0x04d7, + 0x30EA : 0x04d8, + 0x30EB : 0x04d9, + 0x30EC : 0x04da, + 0x30ED : 0x04db, + 0x30EF : 0x04dc, + 0x30F3 : 0x04dd, + 0x309B : 0x04de, + 0x309C : 0x04df, + 0x06F0 : 0x10006f0, + 0x06F1 : 0x10006f1, + 0x06F2 : 0x10006f2, + 0x06F3 : 0x10006f3, + 0x06F4 : 0x10006f4, + 0x06F5 : 0x10006f5, + 0x06F6 : 0x10006f6, + 0x06F7 : 0x10006f7, + 0x06F8 : 0x10006f8, + 0x06F9 : 0x10006f9, + 0x066A : 0x100066a, + 0x0670 : 0x1000670, + 0x0679 : 0x1000679, + 0x067E : 0x100067e, + 0x0686 : 0x1000686, + 0x0688 : 0x1000688, + 0x0691 : 0x1000691, + 0x060C : 0x05ac, + 0x06D4 : 0x10006d4, + 0x0660 : 0x1000660, + 0x0661 : 0x1000661, + 0x0662 : 0x1000662, + 0x0663 : 0x1000663, + 0x0664 : 0x1000664, + 0x0665 : 0x1000665, + 0x0666 : 0x1000666, + 0x0667 : 0x1000667, + 0x0668 : 0x1000668, + 0x0669 : 0x1000669, + 0x061B : 0x05bb, + 0x061F : 0x05bf, + 0x0621 : 0x05c1, + 0x0622 : 0x05c2, + 0x0623 : 0x05c3, + 0x0624 : 0x05c4, + 0x0625 : 0x05c5, + 0x0626 : 0x05c6, + 0x0627 : 0x05c7, + 0x0628 : 0x05c8, + 0x0629 : 0x05c9, + 0x062A : 0x05ca, + 0x062B : 0x05cb, + 0x062C : 0x05cc, + 0x062D : 0x05cd, + 0x062E : 0x05ce, + 0x062F : 0x05cf, + 0x0630 : 0x05d0, + 0x0631 : 0x05d1, + 0x0632 : 0x05d2, + 0x0633 : 0x05d3, + 0x0634 : 0x05d4, + 0x0635 : 0x05d5, + 0x0636 : 0x05d6, + 0x0637 : 0x05d7, + 0x0638 : 0x05d8, + 0x0639 : 0x05d9, + 0x063A : 0x05da, + 0x0640 : 0x05e0, + 0x0641 : 0x05e1, + 0x0642 : 0x05e2, + 0x0643 : 0x05e3, + 0x0644 : 0x05e4, + 0x0645 : 0x05e5, + 0x0646 : 0x05e6, + 0x0647 : 0x05e7, + 0x0648 : 0x05e8, + 0x0649 : 0x05e9, + 0x064A : 0x05ea, + 0x064B : 0x05eb, + 0x064C : 0x05ec, + 0x064D : 0x05ed, + 0x064E : 0x05ee, + 0x064F : 0x05ef, + 0x0650 : 0x05f0, + 0x0651 : 0x05f1, + 0x0652 : 0x05f2, + 0x0653 : 0x1000653, + 0x0654 : 0x1000654, + 0x0655 : 0x1000655, + 0x0698 : 0x1000698, + 0x06A4 : 0x10006a4, + 0x06A9 : 0x10006a9, + 0x06AF : 0x10006af, + 0x06BA : 0x10006ba, + 0x06BE : 0x10006be, + 0x06CC : 0x10006cc, + 0x06D2 : 0x10006d2, + 0x06C1 : 0x10006c1, + 0x0492 : 0x1000492, + 0x0493 : 0x1000493, + 0x0496 : 0x1000496, + 0x0497 : 0x1000497, + 0x049A : 0x100049a, + 0x049B : 0x100049b, + 0x049C : 0x100049c, + 0x049D : 0x100049d, + 0x04A2 : 0x10004a2, + 0x04A3 : 0x10004a3, + 0x04AE : 0x10004ae, + 0x04AF : 0x10004af, + 0x04B0 : 0x10004b0, + 0x04B1 : 0x10004b1, + 0x04B2 : 0x10004b2, + 0x04B3 : 0x10004b3, + 0x04B6 : 0x10004b6, + 0x04B7 : 0x10004b7, + 0x04B8 : 0x10004b8, + 0x04B9 : 0x10004b9, + 0x04BA : 0x10004ba, + 0x04BB : 0x10004bb, + 0x04D8 : 0x10004d8, + 0x04D9 : 0x10004d9, + 0x04E2 : 0x10004e2, + 0x04E3 : 0x10004e3, + 0x04E8 : 0x10004e8, + 0x04E9 : 0x10004e9, + 0x04EE : 0x10004ee, + 0x04EF : 0x10004ef, + 0x0452 : 0x06a1, + 0x0453 : 0x06a2, + 0x0451 : 0x06a3, + 0x0454 : 0x06a4, + 0x0455 : 0x06a5, + 0x0456 : 0x06a6, + 0x0457 : 0x06a7, + 0x0458 : 0x06a8, + 0x0459 : 0x06a9, + 0x045A : 0x06aa, + 0x045B : 0x06ab, + 0x045C : 0x06ac, + 0x0491 : 0x06ad, + 0x045E : 0x06ae, + 0x045F : 0x06af, + 0x2116 : 0x06b0, + 0x0402 : 0x06b1, + 0x0403 : 0x06b2, + 0x0401 : 0x06b3, + 0x0404 : 0x06b4, + 0x0405 : 0x06b5, + 0x0406 : 0x06b6, + 0x0407 : 0x06b7, + 0x0408 : 0x06b8, + 0x0409 : 0x06b9, + 0x040A : 0x06ba, + 0x040B : 0x06bb, + 0x040C : 0x06bc, + 0x0490 : 0x06bd, + 0x040E : 0x06be, + 0x040F : 0x06bf, + 0x044E : 0x06c0, + 0x0430 : 0x06c1, + 0x0431 : 0x06c2, + 0x0446 : 0x06c3, + 0x0434 : 0x06c4, + 0x0435 : 0x06c5, + 0x0444 : 0x06c6, + 0x0433 : 0x06c7, + 0x0445 : 0x06c8, + 0x0438 : 0x06c9, + 0x0439 : 0x06ca, + 0x043A : 0x06cb, + 0x043B : 0x06cc, + 0x043C : 0x06cd, + 0x043D : 0x06ce, + 0x043E : 0x06cf, + 0x043F : 0x06d0, + 0x044F : 0x06d1, + 0x0440 : 0x06d2, + 0x0441 : 0x06d3, + 0x0442 : 0x06d4, + 0x0443 : 0x06d5, + 0x0436 : 0x06d6, + 0x0432 : 0x06d7, + 0x044C : 0x06d8, + 0x044B : 0x06d9, + 0x0437 : 0x06da, + 0x0448 : 0x06db, + 0x044D : 0x06dc, + 0x0449 : 0x06dd, + 0x0447 : 0x06de, + 0x044A : 0x06df, + 0x042E : 0x06e0, + 0x0410 : 0x06e1, + 0x0411 : 0x06e2, + 0x0426 : 0x06e3, + 0x0414 : 0x06e4, + 0x0415 : 0x06e5, + 0x0424 : 0x06e6, + 0x0413 : 0x06e7, + 0x0425 : 0x06e8, + 0x0418 : 0x06e9, + 0x0419 : 0x06ea, + 0x041A : 0x06eb, + 0x041B : 0x06ec, + 0x041C : 0x06ed, + 0x041D : 0x06ee, + 0x041E : 0x06ef, + 0x041F : 0x06f0, + 0x042F : 0x06f1, + 0x0420 : 0x06f2, + 0x0421 : 0x06f3, + 0x0422 : 0x06f4, + 0x0423 : 0x06f5, + 0x0416 : 0x06f6, + 0x0412 : 0x06f7, + 0x042C : 0x06f8, + 0x042B : 0x06f9, + 0x0417 : 0x06fa, + 0x0428 : 0x06fb, + 0x042D : 0x06fc, + 0x0429 : 0x06fd, + 0x0427 : 0x06fe, + 0x042A : 0x06ff, + 0x0386 : 0x07a1, + 0x0388 : 0x07a2, + 0x0389 : 0x07a3, + 0x038A : 0x07a4, + 0x03AA : 0x07a5, + 0x038C : 0x07a7, + 0x038E : 0x07a8, + 0x03AB : 0x07a9, + 0x038F : 0x07ab, + 0x0385 : 0x07ae, + 0x2015 : 0x07af, + 0x03AC : 0x07b1, + 0x03AD : 0x07b2, + 0x03AE : 0x07b3, + 0x03AF : 0x07b4, + 0x03CA : 0x07b5, + 0x0390 : 0x07b6, + 0x03CC : 0x07b7, + 0x03CD : 0x07b8, + 0x03CB : 0x07b9, + 0x03B0 : 0x07ba, + 0x03CE : 0x07bb, + 0x0391 : 0x07c1, + 0x0392 : 0x07c2, + 0x0393 : 0x07c3, + 0x0394 : 0x07c4, + 0x0395 : 0x07c5, + 0x0396 : 0x07c6, + 0x0397 : 0x07c7, + 0x0398 : 0x07c8, + 0x0399 : 0x07c9, + 0x039A : 0x07ca, + 0x039B : 0x07cb, + 0x039C : 0x07cc, + 0x039D : 0x07cd, + 0x039E : 0x07ce, + 0x039F : 0x07cf, + 0x03A0 : 0x07d0, + 0x03A1 : 0x07d1, + 0x03A3 : 0x07d2, + 0x03A4 : 0x07d4, + 0x03A5 : 0x07d5, + 0x03A6 : 0x07d6, + 0x03A7 : 0x07d7, + 0x03A8 : 0x07d8, + 0x03A9 : 0x07d9, + 0x03B1 : 0x07e1, + 0x03B2 : 0x07e2, + 0x03B3 : 0x07e3, + 0x03B4 : 0x07e4, + 0x03B5 : 0x07e5, + 0x03B6 : 0x07e6, + 0x03B7 : 0x07e7, + 0x03B8 : 0x07e8, + 0x03B9 : 0x07e9, + 0x03BA : 0x07ea, + 0x03BB : 0x07eb, + 0x03BC : 0x07ec, + 0x03BD : 0x07ed, + 0x03BE : 0x07ee, + 0x03BF : 0x07ef, + 0x03C0 : 0x07f0, + 0x03C1 : 0x07f1, + 0x03C3 : 0x07f2, + 0x03C2 : 0x07f3, + 0x03C4 : 0x07f4, + 0x03C5 : 0x07f5, + 0x03C6 : 0x07f6, + 0x03C7 : 0x07f7, + 0x03C8 : 0x07f8, + 0x03C9 : 0x07f9, + 0x23B7 : 0x08a1, + 0x2320 : 0x08a4, + 0x2321 : 0x08a5, + 0x23A1 : 0x08a7, + 0x23A3 : 0x08a8, + 0x23A4 : 0x08a9, + 0x23A6 : 0x08aa, + 0x239B : 0x08ab, + 0x239D : 0x08ac, + 0x239E : 0x08ad, + 0x23A0 : 0x08ae, + 0x23A8 : 0x08af, + 0x23AC : 0x08b0, + 0x2264 : 0x08bc, + 0x2260 : 0x08bd, + 0x2265 : 0x08be, + 0x222B : 0x08bf, + 0x2234 : 0x08c0, + 0x221D : 0x08c1, + 0x221E : 0x08c2, + 0x2207 : 0x08c5, + 0x223C : 0x08c8, + 0x2243 : 0x08c9, + 0x21D4 : 0x08cd, + 0x21D2 : 0x08ce, + 0x2261 : 0x08cf, + 0x221A : 0x08d6, + 0x2282 : 0x08da, + 0x2283 : 0x08db, + 0x2229 : 0x08dc, + 0x222A : 0x08dd, + 0x2227 : 0x08de, + 0x2228 : 0x08df, + 0x2202 : 0x08ef, + 0x0192 : 0x08f6, + 0x2190 : 0x08fb, + 0x2191 : 0x08fc, + 0x2192 : 0x08fd, + 0x2193 : 0x08fe, + 0x25C6 : 0x09e0, + 0x2592 : 0x09e1, + 0x2409 : 0x09e2, + 0x240C : 0x09e3, + 0x240D : 0x09e4, + 0x240A : 0x09e5, + 0x2424 : 0x09e8, + 0x240B : 0x09e9, + 0x2518 : 0x09ea, + 0x2510 : 0x09eb, + 0x250C : 0x09ec, + 0x2514 : 0x09ed, + 0x253C : 0x09ee, + 0x23BA : 0x09ef, + 0x23BB : 0x09f0, + 0x2500 : 0x09f1, + 0x23BC : 0x09f2, + 0x23BD : 0x09f3, + 0x251C : 0x09f4, + 0x2524 : 0x09f5, + 0x2534 : 0x09f6, + 0x252C : 0x09f7, + 0x2502 : 0x09f8, + 0x2003 : 0x0aa1, + 0x2002 : 0x0aa2, + 0x2004 : 0x0aa3, + 0x2005 : 0x0aa4, + 0x2007 : 0x0aa5, + 0x2008 : 0x0aa6, + 0x2009 : 0x0aa7, + 0x200A : 0x0aa8, + 0x2014 : 0x0aa9, + 0x2013 : 0x0aaa, + 0x2026 : 0x0aae, + 0x2025 : 0x0aaf, + 0x2153 : 0x0ab0, + 0x2154 : 0x0ab1, + 0x2155 : 0x0ab2, + 0x2156 : 0x0ab3, + 0x2157 : 0x0ab4, + 0x2158 : 0x0ab5, + 0x2159 : 0x0ab6, + 0x215A : 0x0ab7, + 0x2105 : 0x0ab8, + 0x2012 : 0x0abb, + 0x215B : 0x0ac3, + 0x215C : 0x0ac4, + 0x215D : 0x0ac5, + 0x215E : 0x0ac6, + 0x2122 : 0x0ac9, + 0x2018 : 0x0ad0, + 0x2019 : 0x0ad1, + 0x201C : 0x0ad2, + 0x201D : 0x0ad3, + 0x211E : 0x0ad4, + 0x2032 : 0x0ad6, + 0x2033 : 0x0ad7, + 0x271D : 0x0ad9, + 0x2663 : 0x0aec, + 0x2666 : 0x0aed, + 0x2665 : 0x0aee, + 0x2720 : 0x0af0, + 0x2020 : 0x0af1, + 0x2021 : 0x0af2, + 0x2713 : 0x0af3, + 0x2717 : 0x0af4, + 0x266F : 0x0af5, + 0x266D : 0x0af6, + 0x2642 : 0x0af7, + 0x2640 : 0x0af8, + 0x260E : 0x0af9, + 0x2315 : 0x0afa, + 0x2117 : 0x0afb, + 0x2038 : 0x0afc, + 0x201A : 0x0afd, + 0x201E : 0x0afe, + 0x22A4 : 0x0bc2, + 0x230A : 0x0bc4, + 0x2218 : 0x0bca, + 0x2395 : 0x0bcc, + 0x22A5 : 0x0bce, + 0x25CB : 0x0bcf, + 0x2308 : 0x0bd3, + 0x22A3 : 0x0bdc, + 0x22A2 : 0x0bfc, + 0x2017 : 0x0cdf, + 0x05D0 : 0x0ce0, + 0x05D1 : 0x0ce1, + 0x05D2 : 0x0ce2, + 0x05D3 : 0x0ce3, + 0x05D4 : 0x0ce4, + 0x05D5 : 0x0ce5, + 0x05D6 : 0x0ce6, + 0x05D7 : 0x0ce7, + 0x05D8 : 0x0ce8, + 0x05D9 : 0x0ce9, + 0x05DA : 0x0cea, + 0x05DB : 0x0ceb, + 0x05DC : 0x0cec, + 0x05DD : 0x0ced, + 0x05DE : 0x0cee, + 0x05DF : 0x0cef, + 0x05E0 : 0x0cf0, + 0x05E1 : 0x0cf1, + 0x05E2 : 0x0cf2, + 0x05E3 : 0x0cf3, + 0x05E4 : 0x0cf4, + 0x05E5 : 0x0cf5, + 0x05E6 : 0x0cf6, + 0x05E7 : 0x0cf7, + 0x05E8 : 0x0cf8, + 0x05E9 : 0x0cf9, + 0x05EA : 0x0cfa, + 0x0E01 : 0x0da1, + 0x0E02 : 0x0da2, + 0x0E03 : 0x0da3, + 0x0E04 : 0x0da4, + 0x0E05 : 0x0da5, + 0x0E06 : 0x0da6, + 0x0E07 : 0x0da7, + 0x0E08 : 0x0da8, + 0x0E09 : 0x0da9, + 0x0E0A : 0x0daa, + 0x0E0B : 0x0dab, + 0x0E0C : 0x0dac, + 0x0E0D : 0x0dad, + 0x0E0E : 0x0dae, + 0x0E0F : 0x0daf, + 0x0E10 : 0x0db0, + 0x0E11 : 0x0db1, + 0x0E12 : 0x0db2, + 0x0E13 : 0x0db3, + 0x0E14 : 0x0db4, + 0x0E15 : 0x0db5, + 0x0E16 : 0x0db6, + 0x0E17 : 0x0db7, + 0x0E18 : 0x0db8, + 0x0E19 : 0x0db9, + 0x0E1A : 0x0dba, + 0x0E1B : 0x0dbb, + 0x0E1C : 0x0dbc, + 0x0E1D : 0x0dbd, + 0x0E1E : 0x0dbe, + 0x0E1F : 0x0dbf, + 0x0E20 : 0x0dc0, + 0x0E21 : 0x0dc1, + 0x0E22 : 0x0dc2, + 0x0E23 : 0x0dc3, + 0x0E24 : 0x0dc4, + 0x0E25 : 0x0dc5, + 0x0E26 : 0x0dc6, + 0x0E27 : 0x0dc7, + 0x0E28 : 0x0dc8, + 0x0E29 : 0x0dc9, + 0x0E2A : 0x0dca, + 0x0E2B : 0x0dcb, + 0x0E2C : 0x0dcc, + 0x0E2D : 0x0dcd, + 0x0E2E : 0x0dce, + 0x0E2F : 0x0dcf, + 0x0E30 : 0x0dd0, + 0x0E31 : 0x0dd1, + 0x0E32 : 0x0dd2, + 0x0E33 : 0x0dd3, + 0x0E34 : 0x0dd4, + 0x0E35 : 0x0dd5, + 0x0E36 : 0x0dd6, + 0x0E37 : 0x0dd7, + 0x0E38 : 0x0dd8, + 0x0E39 : 0x0dd9, + 0x0E3A : 0x0dda, + 0x0E3F : 0x0ddf, + 0x0E40 : 0x0de0, + 0x0E41 : 0x0de1, + 0x0E42 : 0x0de2, + 0x0E43 : 0x0de3, + 0x0E44 : 0x0de4, + 0x0E45 : 0x0de5, + 0x0E46 : 0x0de6, + 0x0E47 : 0x0de7, + 0x0E48 : 0x0de8, + 0x0E49 : 0x0de9, + 0x0E4A : 0x0dea, + 0x0E4B : 0x0deb, + 0x0E4C : 0x0dec, + 0x0E4D : 0x0ded, + 0x0E50 : 0x0df0, + 0x0E51 : 0x0df1, + 0x0E52 : 0x0df2, + 0x0E53 : 0x0df3, + 0x0E54 : 0x0df4, + 0x0E55 : 0x0df5, + 0x0E56 : 0x0df6, + 0x0E57 : 0x0df7, + 0x0E58 : 0x0df8, + 0x0E59 : 0x0df9, + 0x0587 : 0x1000587, + 0x0589 : 0x1000589, + 0x055D : 0x100055d, + 0x058A : 0x100058a, + 0x055C : 0x100055c, + 0x055B : 0x100055b, + 0x055E : 0x100055e, + 0x0531 : 0x1000531, + 0x0561 : 0x1000561, + 0x0532 : 0x1000532, + 0x0562 : 0x1000562, + 0x0533 : 0x1000533, + 0x0563 : 0x1000563, + 0x0534 : 0x1000534, + 0x0564 : 0x1000564, + 0x0535 : 0x1000535, + 0x0565 : 0x1000565, + 0x0536 : 0x1000536, + 0x0566 : 0x1000566, + 0x0537 : 0x1000537, + 0x0567 : 0x1000567, + 0x0538 : 0x1000538, + 0x0568 : 0x1000568, + 0x0539 : 0x1000539, + 0x0569 : 0x1000569, + 0x053A : 0x100053a, + 0x056A : 0x100056a, + 0x053B : 0x100053b, + 0x056B : 0x100056b, + 0x053C : 0x100053c, + 0x056C : 0x100056c, + 0x053D : 0x100053d, + 0x056D : 0x100056d, + 0x053E : 0x100053e, + 0x056E : 0x100056e, + 0x053F : 0x100053f, + 0x056F : 0x100056f, + 0x0540 : 0x1000540, + 0x0570 : 0x1000570, + 0x0541 : 0x1000541, + 0x0571 : 0x1000571, + 0x0542 : 0x1000542, + 0x0572 : 0x1000572, + 0x0543 : 0x1000543, + 0x0573 : 0x1000573, + 0x0544 : 0x1000544, + 0x0574 : 0x1000574, + 0x0545 : 0x1000545, + 0x0575 : 0x1000575, + 0x0546 : 0x1000546, + 0x0576 : 0x1000576, + 0x0547 : 0x1000547, + 0x0577 : 0x1000577, + 0x0548 : 0x1000548, + 0x0578 : 0x1000578, + 0x0549 : 0x1000549, + 0x0579 : 0x1000579, + 0x054A : 0x100054a, + 0x057A : 0x100057a, + 0x054B : 0x100054b, + 0x057B : 0x100057b, + 0x054C : 0x100054c, + 0x057C : 0x100057c, + 0x054D : 0x100054d, + 0x057D : 0x100057d, + 0x054E : 0x100054e, + 0x057E : 0x100057e, + 0x054F : 0x100054f, + 0x057F : 0x100057f, + 0x0550 : 0x1000550, + 0x0580 : 0x1000580, + 0x0551 : 0x1000551, + 0x0581 : 0x1000581, + 0x0552 : 0x1000552, + 0x0582 : 0x1000582, + 0x0553 : 0x1000553, + 0x0583 : 0x1000583, + 0x0554 : 0x1000554, + 0x0584 : 0x1000584, + 0x0555 : 0x1000555, + 0x0585 : 0x1000585, + 0x0556 : 0x1000556, + 0x0586 : 0x1000586, + 0x055A : 0x100055a, + 0x10D0 : 0x10010d0, + 0x10D1 : 0x10010d1, + 0x10D2 : 0x10010d2, + 0x10D3 : 0x10010d3, + 0x10D4 : 0x10010d4, + 0x10D5 : 0x10010d5, + 0x10D6 : 0x10010d6, + 0x10D7 : 0x10010d7, + 0x10D8 : 0x10010d8, + 0x10D9 : 0x10010d9, + 0x10DA : 0x10010da, + 0x10DB : 0x10010db, + 0x10DC : 0x10010dc, + 0x10DD : 0x10010dd, + 0x10DE : 0x10010de, + 0x10DF : 0x10010df, + 0x10E0 : 0x10010e0, + 0x10E1 : 0x10010e1, + 0x10E2 : 0x10010e2, + 0x10E3 : 0x10010e3, + 0x10E4 : 0x10010e4, + 0x10E5 : 0x10010e5, + 0x10E6 : 0x10010e6, + 0x10E7 : 0x10010e7, + 0x10E8 : 0x10010e8, + 0x10E9 : 0x10010e9, + 0x10EA : 0x10010ea, + 0x10EB : 0x10010eb, + 0x10EC : 0x10010ec, + 0x10ED : 0x10010ed, + 0x10EE : 0x10010ee, + 0x10EF : 0x10010ef, + 0x10F0 : 0x10010f0, + 0x10F1 : 0x10010f1, + 0x10F2 : 0x10010f2, + 0x10F3 : 0x10010f3, + 0x10F4 : 0x10010f4, + 0x10F5 : 0x10010f5, + 0x10F6 : 0x10010f6, + 0x1E8A : 0x1001e8a, + 0x012C : 0x100012c, + 0x01B5 : 0x10001b5, + 0x01E6 : 0x10001e6, + 0x01D2 : 0x10001d1, + 0x019F : 0x100019f, + 0x1E8B : 0x1001e8b, + 0x012D : 0x100012d, + 0x01B6 : 0x10001b6, + 0x01E7 : 0x10001e7, + 0x01D2 : 0x10001d2, + 0x0275 : 0x1000275, + 0x018F : 0x100018f, + 0x0259 : 0x1000259, + 0x1E36 : 0x1001e36, + 0x1E37 : 0x1001e37, + 0x1EA0 : 0x1001ea0, + 0x1EA1 : 0x1001ea1, + 0x1EA2 : 0x1001ea2, + 0x1EA3 : 0x1001ea3, + 0x1EA4 : 0x1001ea4, + 0x1EA5 : 0x1001ea5, + 0x1EA6 : 0x1001ea6, + 0x1EA7 : 0x1001ea7, + 0x1EA8 : 0x1001ea8, + 0x1EA9 : 0x1001ea9, + 0x1EAA : 0x1001eaa, + 0x1EAB : 0x1001eab, + 0x1EAC : 0x1001eac, + 0x1EAD : 0x1001ead, + 0x1EAE : 0x1001eae, + 0x1EAF : 0x1001eaf, + 0x1EB0 : 0x1001eb0, + 0x1EB1 : 0x1001eb1, + 0x1EB2 : 0x1001eb2, + 0x1EB3 : 0x1001eb3, + 0x1EB4 : 0x1001eb4, + 0x1EB5 : 0x1001eb5, + 0x1EB6 : 0x1001eb6, + 0x1EB7 : 0x1001eb7, + 0x1EB8 : 0x1001eb8, + 0x1EB9 : 0x1001eb9, + 0x1EBA : 0x1001eba, + 0x1EBB : 0x1001ebb, + 0x1EBC : 0x1001ebc, + 0x1EBD : 0x1001ebd, + 0x1EBE : 0x1001ebe, + 0x1EBF : 0x1001ebf, + 0x1EC0 : 0x1001ec0, + 0x1EC1 : 0x1001ec1, + 0x1EC2 : 0x1001ec2, + 0x1EC3 : 0x1001ec3, + 0x1EC4 : 0x1001ec4, + 0x1EC5 : 0x1001ec5, + 0x1EC6 : 0x1001ec6, + 0x1EC7 : 0x1001ec7, + 0x1EC8 : 0x1001ec8, + 0x1EC9 : 0x1001ec9, + 0x1ECA : 0x1001eca, + 0x1ECB : 0x1001ecb, + 0x1ECC : 0x1001ecc, + 0x1ECD : 0x1001ecd, + 0x1ECE : 0x1001ece, + 0x1ECF : 0x1001ecf, + 0x1ED0 : 0x1001ed0, + 0x1ED1 : 0x1001ed1, + 0x1ED2 : 0x1001ed2, + 0x1ED3 : 0x1001ed3, + 0x1ED4 : 0x1001ed4, + 0x1ED5 : 0x1001ed5, + 0x1ED6 : 0x1001ed6, + 0x1ED7 : 0x1001ed7, + 0x1ED8 : 0x1001ed8, + 0x1ED9 : 0x1001ed9, + 0x1EDA : 0x1001eda, + 0x1EDB : 0x1001edb, + 0x1EDC : 0x1001edc, + 0x1EDD : 0x1001edd, + 0x1EDE : 0x1001ede, + 0x1EDF : 0x1001edf, + 0x1EE0 : 0x1001ee0, + 0x1EE1 : 0x1001ee1, + 0x1EE2 : 0x1001ee2, + 0x1EE3 : 0x1001ee3, + 0x1EE4 : 0x1001ee4, + 0x1EE5 : 0x1001ee5, + 0x1EE6 : 0x1001ee6, + 0x1EE7 : 0x1001ee7, + 0x1EE8 : 0x1001ee8, + 0x1EE9 : 0x1001ee9, + 0x1EEA : 0x1001eea, + 0x1EEB : 0x1001eeb, + 0x1EEC : 0x1001eec, + 0x1EED : 0x1001eed, + 0x1EEE : 0x1001eee, + 0x1EEF : 0x1001eef, + 0x1EF0 : 0x1001ef0, + 0x1EF1 : 0x1001ef1, + 0x1EF4 : 0x1001ef4, + 0x1EF5 : 0x1001ef5, + 0x1EF6 : 0x1001ef6, + 0x1EF7 : 0x1001ef7, + 0x1EF8 : 0x1001ef8, + 0x1EF9 : 0x1001ef9, + 0x01A0 : 0x10001a0, + 0x01A1 : 0x10001a1, + 0x01AF : 0x10001af, + 0x01B0 : 0x10001b0, + 0x20A0 : 0x10020a0, + 0x20A1 : 0x10020a1, + 0x20A2 : 0x10020a2, + 0x20A3 : 0x10020a3, + 0x20A4 : 0x10020a4, + 0x20A5 : 0x10020a5, + 0x20A6 : 0x10020a6, + 0x20A7 : 0x10020a7, + 0x20A8 : 0x10020a8, + 0x20A9 : 0x10020a9, + 0x20AA : 0x10020aa, + 0x20AB : 0x10020ab, + 0x20AC : 0x20ac, + 0x2070 : 0x1002070, + 0x2074 : 0x1002074, + 0x2075 : 0x1002075, + 0x2076 : 0x1002076, + 0x2077 : 0x1002077, + 0x2078 : 0x1002078, + 0x2079 : 0x1002079, + 0x2080 : 0x1002080, + 0x2081 : 0x1002081, + 0x2082 : 0x1002082, + 0x2083 : 0x1002083, + 0x2084 : 0x1002084, + 0x2085 : 0x1002085, + 0x2086 : 0x1002086, + 0x2087 : 0x1002087, + 0x2088 : 0x1002088, + 0x2089 : 0x1002089, + 0x2202 : 0x1002202, + 0x2205 : 0x1002205, + 0x2208 : 0x1002208, + 0x2209 : 0x1002209, + 0x220B : 0x100220B, + 0x221A : 0x100221A, + 0x221B : 0x100221B, + 0x221C : 0x100221C, + 0x222C : 0x100222C, + 0x222D : 0x100222D, + 0x2235 : 0x1002235, + 0x2245 : 0x1002248, + 0x2247 : 0x1002247, + 0x2262 : 0x1002262, + 0x2263 : 0x1002263, + 0x2800 : 0x1002800, + 0x2801 : 0x1002801, + 0x2802 : 0x1002802, + 0x2803 : 0x1002803, + 0x2804 : 0x1002804, + 0x2805 : 0x1002805, + 0x2806 : 0x1002806, + 0x2807 : 0x1002807, + 0x2808 : 0x1002808, + 0x2809 : 0x1002809, + 0x280a : 0x100280a, + 0x280b : 0x100280b, + 0x280c : 0x100280c, + 0x280d : 0x100280d, + 0x280e : 0x100280e, + 0x280f : 0x100280f, + 0x2810 : 0x1002810, + 0x2811 : 0x1002811, + 0x2812 : 0x1002812, + 0x2813 : 0x1002813, + 0x2814 : 0x1002814, + 0x2815 : 0x1002815, + 0x2816 : 0x1002816, + 0x2817 : 0x1002817, + 0x2818 : 0x1002818, + 0x2819 : 0x1002819, + 0x281a : 0x100281a, + 0x281b : 0x100281b, + 0x281c : 0x100281c, + 0x281d : 0x100281d, + 0x281e : 0x100281e, + 0x281f : 0x100281f, + 0x2820 : 0x1002820, + 0x2821 : 0x1002821, + 0x2822 : 0x1002822, + 0x2823 : 0x1002823, + 0x2824 : 0x1002824, + 0x2825 : 0x1002825, + 0x2826 : 0x1002826, + 0x2827 : 0x1002827, + 0x2828 : 0x1002828, + 0x2829 : 0x1002829, + 0x282a : 0x100282a, + 0x282b : 0x100282b, + 0x282c : 0x100282c, + 0x282d : 0x100282d, + 0x282e : 0x100282e, + 0x282f : 0x100282f, + 0x2830 : 0x1002830, + 0x2831 : 0x1002831, + 0x2832 : 0x1002832, + 0x2833 : 0x1002833, + 0x2834 : 0x1002834, + 0x2835 : 0x1002835, + 0x2836 : 0x1002836, + 0x2837 : 0x1002837, + 0x2838 : 0x1002838, + 0x2839 : 0x1002839, + 0x283a : 0x100283a, + 0x283b : 0x100283b, + 0x283c : 0x100283c, + 0x283d : 0x100283d, + 0x283e : 0x100283e, + 0x283f : 0x100283f, + 0x2840 : 0x1002840, + 0x2841 : 0x1002841, + 0x2842 : 0x1002842, + 0x2843 : 0x1002843, + 0x2844 : 0x1002844, + 0x2845 : 0x1002845, + 0x2846 : 0x1002846, + 0x2847 : 0x1002847, + 0x2848 : 0x1002848, + 0x2849 : 0x1002849, + 0x284a : 0x100284a, + 0x284b : 0x100284b, + 0x284c : 0x100284c, + 0x284d : 0x100284d, + 0x284e : 0x100284e, + 0x284f : 0x100284f, + 0x2850 : 0x1002850, + 0x2851 : 0x1002851, + 0x2852 : 0x1002852, + 0x2853 : 0x1002853, + 0x2854 : 0x1002854, + 0x2855 : 0x1002855, + 0x2856 : 0x1002856, + 0x2857 : 0x1002857, + 0x2858 : 0x1002858, + 0x2859 : 0x1002859, + 0x285a : 0x100285a, + 0x285b : 0x100285b, + 0x285c : 0x100285c, + 0x285d : 0x100285d, + 0x285e : 0x100285e, + 0x285f : 0x100285f, + 0x2860 : 0x1002860, + 0x2861 : 0x1002861, + 0x2862 : 0x1002862, + 0x2863 : 0x1002863, + 0x2864 : 0x1002864, + 0x2865 : 0x1002865, + 0x2866 : 0x1002866, + 0x2867 : 0x1002867, + 0x2868 : 0x1002868, + 0x2869 : 0x1002869, + 0x286a : 0x100286a, + 0x286b : 0x100286b, + 0x286c : 0x100286c, + 0x286d : 0x100286d, + 0x286e : 0x100286e, + 0x286f : 0x100286f, + 0x2870 : 0x1002870, + 0x2871 : 0x1002871, + 0x2872 : 0x1002872, + 0x2873 : 0x1002873, + 0x2874 : 0x1002874, + 0x2875 : 0x1002875, + 0x2876 : 0x1002876, + 0x2877 : 0x1002877, + 0x2878 : 0x1002878, + 0x2879 : 0x1002879, + 0x287a : 0x100287a, + 0x287b : 0x100287b, + 0x287c : 0x100287c, + 0x287d : 0x100287d, + 0x287e : 0x100287e, + 0x287f : 0x100287f, + 0x2880 : 0x1002880, + 0x2881 : 0x1002881, + 0x2882 : 0x1002882, + 0x2883 : 0x1002883, + 0x2884 : 0x1002884, + 0x2885 : 0x1002885, + 0x2886 : 0x1002886, + 0x2887 : 0x1002887, + 0x2888 : 0x1002888, + 0x2889 : 0x1002889, + 0x288a : 0x100288a, + 0x288b : 0x100288b, + 0x288c : 0x100288c, + 0x288d : 0x100288d, + 0x288e : 0x100288e, + 0x288f : 0x100288f, + 0x2890 : 0x1002890, + 0x2891 : 0x1002891, + 0x2892 : 0x1002892, + 0x2893 : 0x1002893, + 0x2894 : 0x1002894, + 0x2895 : 0x1002895, + 0x2896 : 0x1002896, + 0x2897 : 0x1002897, + 0x2898 : 0x1002898, + 0x2899 : 0x1002899, + 0x289a : 0x100289a, + 0x289b : 0x100289b, + 0x289c : 0x100289c, + 0x289d : 0x100289d, + 0x289e : 0x100289e, + 0x289f : 0x100289f, + 0x28a0 : 0x10028a0, + 0x28a1 : 0x10028a1, + 0x28a2 : 0x10028a2, + 0x28a3 : 0x10028a3, + 0x28a4 : 0x10028a4, + 0x28a5 : 0x10028a5, + 0x28a6 : 0x10028a6, + 0x28a7 : 0x10028a7, + 0x28a8 : 0x10028a8, + 0x28a9 : 0x10028a9, + 0x28aa : 0x10028aa, + 0x28ab : 0x10028ab, + 0x28ac : 0x10028ac, + 0x28ad : 0x10028ad, + 0x28ae : 0x10028ae, + 0x28af : 0x10028af, + 0x28b0 : 0x10028b0, + 0x28b1 : 0x10028b1, + 0x28b2 : 0x10028b2, + 0x28b3 : 0x10028b3, + 0x28b4 : 0x10028b4, + 0x28b5 : 0x10028b5, + 0x28b6 : 0x10028b6, + 0x28b7 : 0x10028b7, + 0x28b8 : 0x10028b8, + 0x28b9 : 0x10028b9, + 0x28ba : 0x10028ba, + 0x28bb : 0x10028bb, + 0x28bc : 0x10028bc, + 0x28bd : 0x10028bd, + 0x28be : 0x10028be, + 0x28bf : 0x10028bf, + 0x28c0 : 0x10028c0, + 0x28c1 : 0x10028c1, + 0x28c2 : 0x10028c2, + 0x28c3 : 0x10028c3, + 0x28c4 : 0x10028c4, + 0x28c5 : 0x10028c5, + 0x28c6 : 0x10028c6, + 0x28c7 : 0x10028c7, + 0x28c8 : 0x10028c8, + 0x28c9 : 0x10028c9, + 0x28ca : 0x10028ca, + 0x28cb : 0x10028cb, + 0x28cc : 0x10028cc, + 0x28cd : 0x10028cd, + 0x28ce : 0x10028ce, + 0x28cf : 0x10028cf, + 0x28d0 : 0x10028d0, + 0x28d1 : 0x10028d1, + 0x28d2 : 0x10028d2, + 0x28d3 : 0x10028d3, + 0x28d4 : 0x10028d4, + 0x28d5 : 0x10028d5, + 0x28d6 : 0x10028d6, + 0x28d7 : 0x10028d7, + 0x28d8 : 0x10028d8, + 0x28d9 : 0x10028d9, + 0x28da : 0x10028da, + 0x28db : 0x10028db, + 0x28dc : 0x10028dc, + 0x28dd : 0x10028dd, + 0x28de : 0x10028de, + 0x28df : 0x10028df, + 0x28e0 : 0x10028e0, + 0x28e1 : 0x10028e1, + 0x28e2 : 0x10028e2, + 0x28e3 : 0x10028e3, + 0x28e4 : 0x10028e4, + 0x28e5 : 0x10028e5, + 0x28e6 : 0x10028e6, + 0x28e7 : 0x10028e7, + 0x28e8 : 0x10028e8, + 0x28e9 : 0x10028e9, + 0x28ea : 0x10028ea, + 0x28eb : 0x10028eb, + 0x28ec : 0x10028ec, + 0x28ed : 0x10028ed, + 0x28ee : 0x10028ee, + 0x28ef : 0x10028ef, + 0x28f0 : 0x10028f0, + 0x28f1 : 0x10028f1, + 0x28f2 : 0x10028f2, + 0x28f3 : 0x10028f3, + 0x28f4 : 0x10028f4, + 0x28f5 : 0x10028f5, + 0x28f6 : 0x10028f6, + 0x28f7 : 0x10028f7, + 0x28f8 : 0x10028f8, + 0x28f9 : 0x10028f9, + 0x28fa : 0x10028fa, + 0x28fb : 0x10028fb, + 0x28fc : 0x10028fc, + 0x28fd : 0x10028fd, + 0x28fe : 0x10028fe, + 0x28ff : 0x10028ff, +}; diff --git a/src/sunstone/public/vendor/noVNC/include/logo.js b/src/sunstone/public/vendor/noVNC/include/logo.js new file mode 100644 index 0000000000..befa598c16 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/logo.js @@ -0,0 +1 @@ +noVNC_logo = {"width": 640, "height": 435, "data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAGzCAYAAAC/y6a9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAStAAAErQBBHTWggAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N13fBvlwQfw3522ZMm2vPdIGCFkA4GyoYyGsCmjk+7dQksHL2/H2/dtC4W2tLTlfelu2VA2lEILFCgQIHEGJCQkdjzkLdmWZGvfvX8oOkmJEy/pNO73/Xz44DtLzz2RT7qfnnXC8uXLZUxDlqfdnUYQhIP+bjbPn+5xhypzrmUf6rGzOc5cjzVduXN9/nTPyfRrMt/jzOcY05U5n3L2f95s/34LPW4m/p6FbLp/73xe+5nKnWuZs/07ZOOcnusx5nucbJU727LneuxslDmdTBxn/2NmusyEuZS7kHMxG/XP5Gf3TOVmQzY+u/PhPMnkMcSsH5WIiIiI8goDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHG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"}; diff --git a/src/sunstone/public/vendor/noVNC/include/plain.css b/src/sunstone/public/vendor/noVNC/include/plain.css new file mode 100644 index 0000000000..fa768fac19 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/plain.css @@ -0,0 +1,97 @@ +#VNC_controls { + overflow: hidden; +} +#VNC_controls ul { + list-style: none; + margin: 0px; + padding: 0px; +} +#VNC_controls li { + float: left; + margin-right: 15px; +} + +#VNC_host { + width: 100px; +} +#VNC_port { + width: 50px; +} +#VNC_password { + width: 80px; +} +#VNC_encrypt { +} +#VNC_connectTimeout { + width: 30px; +} +#VNC_connect_button { + width: 110px; +} + +#VNC_status_bar td { + margin-top: 15px; + padding: 0px; + margin: 0px; +} +#VNC_status_bar div { + font-size: 12px; + margin: 0px; + padding: 0px; +} +.VNC_status_button { + font-size: 10px; + margin: 0px; + padding: 0px; +} +#VNC_status { + text-align: center; +} +#VNC_settings_menu { + display: none; + position: absolute; + width: 12em; + border: 1px solid #888; + background-color: #f0f2f6; + padding: 5px; margin: 3px; + z-index: 100; opacity: 1; + text-align: left; white-space: normal; +} +#VNC_settings_menu ul { + list-style: none; + margin: 0px; + padding: 0px; +} + +.VNC_buttons_right { + text-align: right; +} +.VNC_buttons_left { + text-align: left; +} +.VNC_status_normal { + background: #eee; +} +.VNC_status_error { + background: #f44; +} +.VNC_status_warn { + background: #ff4; +} + +/* Do not set width/height for VNC_screen or VNC_canvas or incorrect + * scaling will occur. Canvas resizes to remote VNC settings */ +#VNC_screen { + text-align: center; + display: table; +} +#VNC_canvas { + background: #eee; +} + +#VNC_clipboard_clear_button { +} +#VNC_clipboard_text { + font-size: 9px; +} + diff --git a/src/sunstone/public/vendor/noVNC/include/playback.js b/src/sunstone/public/vendor/noVNC/include/playback.js new file mode 100644 index 0000000000..22a00a3091 --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/playback.js @@ -0,0 +1,90 @@ +/* + * noVNC: HTML5 VNC client + * Copyright (C) 2011 Joel Martin + * Licensed under LGPL-3 (see LICENSE.LGPL-3) + */ + +"use strict"; +/*jslint browser: true, white: false */ +/*global Util, VNC_frame_data, finish */ + +var rfb, mode, test_state, frame_idx, frame_length, + iteration, iterations, istart_time, + + // Pre-declarations for jslint + send_array, next_iteration, queue_next_packet, do_packet; + +// Override send_array +send_array = function (arr) { + // Stub out send_array +}; + +next_iteration = function () { + if (iteration === 0) { + frame_length = VNC_frame_data.length; + test_state = 'running'; + } else { + rfb.disconnect(); + } + + if (test_state !== 'running') { return; } + + iteration += 1; + if (iteration > iterations) { + finish(); + return; + } + + frame_idx = 0; + istart_time = (new Date()).getTime(); + rfb.connect('test', 0, "bogus"); + + queue_next_packet(); + +}; + +queue_next_packet = function () { + var frame, foffset, toffset, delay; + if (test_state !== 'running') { return; } + + frame = VNC_frame_data[frame_idx]; + while ((frame_idx < frame_length) && (frame.charAt(0) === "}")) { + //Util.Debug("Send frame " + frame_idx); + frame_idx += 1; + frame = VNC_frame_data[frame_idx]; + } + + if (frame === 'EOF') { + Util.Debug("Finished, found EOF"); + next_iteration(); + return; + } + if (frame_idx >= frame_length) { + Util.Debug("Finished, no more frames"); + next_iteration(); + return; + } + + if (mode === 'realtime') { + foffset = frame.slice(1, frame.indexOf('{', 1)); + toffset = (new Date()).getTime() - istart_time; + delay = foffset - toffset; + if (delay < 1) { + delay = 1; + } + + setTimeout(do_packet, delay); + } else { + setTimeout(do_packet, 1); + } +}; + +do_packet = function () { + //Util.Debug("Processing frame: " + frame_idx); + var frame = VNC_frame_data[frame_idx]; + rfb.recv_message({'data' : frame.slice(frame.indexOf('{', 1) + 1)}); + frame_idx += 1; + + queue_next_packet(); +}; + diff --git a/src/sunstone/public/vendor/noVNC/include/rfb.js b/src/sunstone/public/vendor/noVNC/include/rfb.js new file mode 100644 index 0000000000..3c65a5cbea --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/rfb.js @@ -0,0 +1,1511 @@ +/* + * noVNC: HTML5 VNC client + * Copyright (C) 2011 Joel Martin + * Licensed under LGPL-3 (see LICENSE.txt) + * + * See README.md for usage and integration instructions. + */ + +/*jslint white: false, browser: true, bitwise: false, plusplus: false */ +/*global window, Util, Canvas, Keyboard, Mouse, Websock, Websock_native, Base64, DES, noVNC_logo */ + + +function RFB(conf) { + "use strict"; + +conf = conf || {}; // Configuration +var that = {}, // Public API interface + + // Pre-declare private functions used before definitions (jslint) + init_vars, updateState, fail, handle_message, + init_msg, normal_msg, framebufferUpdate, print_stats, + + pixelFormat, clientEncodings, fbUpdateRequest, + keyEvent, pointerEvent, clientCutText, + + extract_data_uri, scan_tight_imgQ, + keyPress, mouseButton, mouseMove, + + checkEvents, // Overridable for testing + + + // + // Private RFB namespace variables + // + rfb_host = '', + rfb_port = 5900, + rfb_password = '', + + rfb_state = 'disconnected', + rfb_version = 0, + rfb_max_version= 3.8, + rfb_auth_scheme= '', + + + // In preference order + encodings = [ + ['COPYRECT', 0x01 ], + ['TIGHT_PNG', -260 ], + ['HEXTILE', 0x05 ], + ['RRE', 0x02 ], + ['RAW', 0x00 ], + ['DesktopSize', -223 ], + ['Cursor', -239 ], + + // Psuedo-encoding settings + ['JPEG_quality_lo', -32 ], + //['JPEG_quality_hi', -23 ], + ['compress_lo', -255 ] + //['compress_hi', -247 ] + ], + + encHandlers = {}, + encNames = {}, + encStats = {}, // [rectCnt, rectCntTot] + + ws = null, // Websock object + canvas = null, // Canvas object + keyboard = null, // Keyboard input handler object + mouse = null, // Mouse input handler object + sendTimer = null, // Send Queue check timer + connTimer = null, // connection timer + disconnTimer = null, // disconnection timer + msgTimer = null, // queued handle_message timer + + // Frame buffer update state + FBU = { + rects : 0, + subrects : 0, // RRE + lines : 0, // RAW + tiles : 0, // HEXTILE + bytes : 0, + x : 0, + y : 0, + width : 0, + height : 0, + encoding : 0, + subencoding : -1, + background : null, + imgQ : [] // TIGHT_PNG image queue + }, + + fb_Bpp = 4, + fb_depth = 3, + fb_width = 0, + fb_height = 0, + fb_name = "", + + scan_imgQ_rate = 100, + last_req_time = 0, + rre_chunk_sz = 100, + + timing = { + last_fbu : 0, + fbu_total : 0, + fbu_total_cnt : 0, + full_fbu_total : 0, + full_fbu_cnt : 0, + + fbu_rt_start : 0, + fbu_rt_total : 0, + fbu_rt_cnt : 0 + }, + + test_mode = false, + + /* Mouse state */ + mouse_buttonMask = 0, + mouse_arr = []; + + +// +// Configuration settings +// +function cdef(v, type, defval, desc) { + Util.conf_default(conf, that, v, type, defval, desc); } + +cdef('target', 'str', null, 'VNC viewport rendering Canvas'); +cdef('focusContainer', 'dom', document, 'Area that traps keyboard input'); + +cdef('encrypt', 'bool', false, 'Use TLS/SSL/wss encryption'); +cdef('true_color', 'bool', true, 'Request true color pixel data'); +cdef('local_cursor', 'bool', false, 'Request locally rendered cursor'); +cdef('shared', 'bool', true, 'Request shared mode'); + +if (Websock_native) { + cdef('connectTimeout', 'int', 2, 'Time (s) to wait for connection'); +} else { + cdef('connectTimeout', 'int', 5, 'Time (s) to wait for connection'); +} +cdef('disconnectTimeout', 'int', 3, 'Time (s) to wait for disconnection'); +cdef('check_rate', 'int', 217, 'Timing (ms) of send/receive check'); +cdef('fbu_req_rate', 'int', 1413, 'Timing (ms) of frameBufferUpdate requests'); + +cdef('updateState', + 'func', function() { Util.Debug("updateState stub"); }, + 'callback: state update'); +cdef('clipboardReceive', + 'func', function() { Util.Debug("clipboardReceive stub"); }, + 'callback: clipboard contents received'); + + +// Override/add some specific getters/setters +that.set_local_cursor = function(cursor) { + if ((!cursor) || (cursor in {'0':1, 'no':1, 'false':1})) { + conf.local_cursor = false; + } else { + if (canvas.get_cursor_uri()) { + conf.local_cursor = true; + } else { + Util.Warn("Browser does not support local cursor"); + } + } +}; + +that.get_canvas = function() { + return canvas; +}; +that.get_keyboard = function() { + return keyboard; +}; +that.get_mouse = function() { + return mouse; +}; + + + + + + +// +// Setup routines +// + +// Create the public API interface and initialize +function constructor() { + var i, rmode; + Util.Debug(">> RFB.constructor"); + + // Create lookup tables based encoding number + for (i=0; i < encodings.length; i+=1) { + encHandlers[encodings[i][1]] = encHandlers[encodings[i][0]]; + encNames[encodings[i][1]] = encodings[i][0]; + encStats[encodings[i][1]] = [0, 0]; + } + // Initialize canvas, mouse and keyboard + try { + canvas = new Canvas({'target': conf.target}); + keyboard = new Keyboard({'target': conf.focusContainer, + 'keyPress': keyPress}); + mouse = new Mouse({'target': conf.target, + 'mouseButton': mouseButton, + 'mouseMove': mouseMove}); + } catch (exc) { + Util.Error("Canvas exception: " + exc); + updateState('fatal', "No working Canvas"); + } + rmode = canvas.get_render_mode(); + + init_vars(); + + /* Check web-socket-js if no builtin WebSocket support */ + if (Websock_native) { + Util.Info("Using native WebSockets"); + updateState('loaded', 'noVNC ready: native WebSockets, ' + rmode); + } else { + Util.Warn("Using web-socket-js bridge. Flash version: " + + Util.Flash.version); + if ((! Util.Flash) || + (Util.Flash.version < 9)) { + updateState('fatal', "WebSockets or Adobe Flash<\/a> is required"); + } else if (document.location.href.substr(0, 7) === "file://") { + updateState('fatal', + "'file://' URL is incompatible with Adobe Flash"); + } else { + updateState('loaded', 'noVNC ready: WebSockets emulation, ' + rmode); + } + } + + Util.Debug("<< RFB.constructor"); + return that; // Return the public API interface +} + +function connect() { + Util.Debug(">> RFB.connect"); + + var uri = ""; + if (conf.encrypt) { + uri = "wss://"; + } else { + uri = "ws://"; + } + uri += rfb_host + ":" + rfb_port + "/"; + Util.Info("connecting to " + uri); + ws.open(uri); + + Util.Debug("<< RFB.connect"); +} + +init_vars = function() { + var i; + + /* Reset state */ + ws = new Websock(); + ws.init(); + + ws.on('message', handle_message); + ws.on('open', function() { + if (rfb_state === "connect") { + updateState('ProtocolVersion', "Starting VNC handshake"); + } else { + fail("Got unexpected WebSockets connection"); + } + }); + ws.on('close', function() { + if (rfb_state === 'disconnect') { + updateState('disconnected', 'VNC disconnected'); + } else if (rfb_state === 'ProtocolVersion') { + fail('Failed to connect to server'); + } else if (rfb_state in {'failed':1, 'disconnected':1}) { + Util.Error("Received onclose while disconnected"); + } else { + fail('Server disconnected'); + } + }); + ws.on('error', function(e) { + fail("WebSock error: " + e); + }); + + FBU.rects = 0; + FBU.subrects = 0; // RRE and HEXTILE + FBU.lines = 0; // RAW + FBU.tiles = 0; // HEXTILE + FBU.imgQ = []; // TIGHT_PNG image queue + mouse_buttonMask = 0; + mouse_arr = []; + + // Clear the per connection encoding stats + for (i=0; i < encodings.length; i+=1) { + encStats[encodings[i][1]][0] = 0; + } +}; + +// Print statistics +print_stats = function() { + var i, s; + Util.Info("Encoding stats for this connection:"); + for (i=0; i < encodings.length; i+=1) { + s = encStats[encodings[i][1]]; + if ((s[0] + s[1]) > 0) { + Util.Info(" " + encodings[i][0] + ": " + + s[0] + " rects"); + } + } + Util.Info("Encoding stats since page load:"); + for (i=0; i < encodings.length; i+=1) { + s = encStats[encodings[i][1]]; + if ((s[0] + s[1]) > 0) { + Util.Info(" " + encodings[i][0] + ": " + + s[1] + " rects"); + } + } +}; + +// +// Utility routines +// + + +/* + * Running states: + * disconnected - idle state + * normal - connected + * + * Page states: + * loaded - page load, equivalent to disconnected + * connect - starting initialization + * disconnect - starting disconnect + * failed - abnormal transition to disconnected + * fatal - failed to load page, or fatal error + * + * VNC initialization states: + * ProtocolVersion + * Security + * Authentication + * password - waiting for password, not part of RFB + * SecurityResult + * ClientInitialization - not triggered by server message + * ServerInitialization + */ +updateState = function(state, statusMsg) { + var func, cmsg, oldstate = rfb_state; + + if (state === oldstate) { + /* Already here, ignore */ + Util.Debug("Already in state '" + state + "', ignoring."); + return; + } + + /* + * These are disconnected states. A previous connect may + * asynchronously cause a connection so make sure we are closed. + */ + if (state in {'disconnected':1, 'loaded':1, 'connect':1, + 'disconnect':1, 'failed':1, 'fatal':1}) { + if (sendTimer) { + clearInterval(sendTimer); + sendTimer = null; + } + + if (msgTimer) { + clearInterval(msgTimer); + msgTimer = null; + } + + if (canvas && canvas.getContext()) { + keyboard.ungrab(); + mouse.ungrab(); + canvas.defaultCursor(); + if (Util.get_logging() !== 'debug') { + canvas.clear(); + } + + if ((Util.get_logging() !== 'debug') || + (state === 'loaded')) { + // Show noVNC logo on load and when disconnected if + // debug is off + if (typeof noVNC_logo !== 'undefined' && noVNC_logo) { + canvas.resize(noVNC_logo.width, noVNC_logo.height); + canvas.blitStringImage(noVNC_logo.data, 0, 0); + } + } + } + + ws.close(); + } + + if (oldstate === 'fatal') { + Util.Error("Fatal error, cannot continue"); + } + + if ((state === 'failed') || (state === 'fatal')) { + func = Util.Error; + } else { + func = Util.Warn; + } + + if ((oldstate === 'failed') && (state === 'disconnected')) { + // Do disconnect action, but stay in failed state. + rfb_state = 'failed'; + } else { + rfb_state = state; + } + + cmsg = typeof(statusMsg) !== 'undefined' ? (" Msg: " + statusMsg) : ""; + func("New state '" + rfb_state + "', was '" + oldstate + "'." + cmsg); + + if (connTimer && (rfb_state !== 'connect')) { + Util.Debug("Clearing connect timer"); + clearInterval(connTimer); + connTimer = null; + } + + if (disconnTimer && (rfb_state !== 'disconnect')) { + Util.Debug("Clearing disconnect timer"); + clearInterval(disconnTimer); + disconnTimer = null; + } + + switch (state) { + case 'normal': + if ((oldstate === 'disconnected') || (oldstate === 'failed')) { + Util.Error("Invalid transition from 'disconnected' or 'failed' to 'normal'"); + } + + break; + + + case 'connect': + + connTimer = setTimeout(function () { + fail("Connect timeout"); + }, conf.connectTimeout * 1000); + + init_vars(); + connect(); + + // WebSocket.onopen transitions to 'ProtocolVersion' + break; + + + case 'disconnect': + + if (! test_mode) { + disconnTimer = setTimeout(function () { + fail("Disconnect timeout"); + }, conf.disconnectTimeout * 1000); + } + + print_stats(); + + // WebSocket.onclose transitions to 'disconnected' + break; + + + case 'failed': + if (oldstate === 'disconnected') { + Util.Error("Invalid transition from 'disconnected' to 'failed'"); + } + if (oldstate === 'normal') { + Util.Error("Error while connected."); + } + if (oldstate === 'init') { + Util.Error("Error while initializing."); + } + + // Make sure we transition to disconnected + setTimeout(function() { updateState('disconnected'); }, 50); + + break; + + + default: + // No state change action to take + + } + + if ((oldstate === 'failed') && (state === 'disconnected')) { + // Leave the failed message + conf.updateState(that, state, oldstate); + } else { + conf.updateState(that, state, oldstate, statusMsg); + } +}; + +fail = function(msg) { + updateState('failed', msg); + return false; +}; + +handle_message = function() { + //Util.Debug(">> handle_message ws.rQlen(): " + ws.rQlen()); + //Util.Debug("ws.rQslice(0,20): " + ws.rQslice(0,20) + " (" + ws.rQlen() + ")"); + if (ws.rQlen() === 0) { + Util.Warn("handle_message called on empty receive queue"); + return; + } + switch (rfb_state) { + case 'disconnected': + case 'failed': + Util.Error("Got data while disconnected"); + break; + case 'normal': + if (normal_msg() && ws.rQlen() > 0) { + // true means we can continue processing + // Give other events a chance to run + if (msgTimer === null) { + Util.Debug("More data to process, creating timer"); + msgTimer = setTimeout(function () { + msgTimer = null; + handle_message(); + }, 10); + } else { + Util.Debug("More data to process, existing timer"); + } + } + break; + default: + init_msg(); + break; + } +}; + + +function genDES(password, challenge) { + var i, passwd = []; + for (i=0; i < password.length; i += 1) { + passwd.push(password.charCodeAt(i)); + } + return (new DES(passwd)).encrypt(challenge); +} + +function flushClient() { + if (mouse_arr.length > 0) { + //send(mouse_arr.concat(fbUpdateRequest(1))); + ws.send(mouse_arr); + setTimeout(function() { + ws.send(fbUpdateRequest(1)); + }, 50); + + mouse_arr = []; + return true; + } else { + return false; + } +} + +// overridable for testing +checkEvents = function() { + var now; + if (rfb_state === 'normal') { + if (! flushClient()) { + now = new Date().getTime(); + if (now > last_req_time + conf.fbu_req_rate) { + last_req_time = now; + ws.send(fbUpdateRequest(1)); + } + } + } + setTimeout(checkEvents, conf.check_rate); +}; + +keyPress = function(keysym, down) { + var arr; + arr = keyEvent(keysym, down); + arr = arr.concat(fbUpdateRequest(1)); + ws.send(arr); +}; + +mouseButton = function(x, y, down, bmask) { + if (down) { + mouse_buttonMask |= bmask; + } else { + mouse_buttonMask ^= bmask; + } + mouse_arr = mouse_arr.concat( pointerEvent(x, y) ); + flushClient(); +}; + +mouseMove = function(x, y) { + //Util.Debug('>> mouseMove ' + x + "," + y); + mouse_arr = mouse_arr.concat( pointerEvent(x, y) ); +}; + + +// +// Server message handlers +// + +// RFB/VNC initialisation message handler +init_msg = function() { + //Util.Debug(">> init_msg [rfb_state '" + rfb_state + "']"); + + var strlen, reason, length, sversion, cversion, + i, types, num_types, challenge, response, bpp, depth, + big_endian, true_color, name_length; + + //Util.Debug("ws.rQ (" + ws.rQlen() + ") " + ws.rQslice(0)); + switch (rfb_state) { + + case 'ProtocolVersion' : + if (ws.rQlen() < 12) { + return fail("Incomplete protocol version"); + } + sversion = ws.rQshiftStr(12).substr(4,7); + Util.Info("Server ProtocolVersion: " + sversion); + switch (sversion) { + case "003.003": rfb_version = 3.3; break; + case "003.006": rfb_version = 3.3; break; // UltraVNC + case "003.007": rfb_version = 3.7; break; + case "003.008": rfb_version = 3.8; break; + default: + return fail("Invalid server version " + sversion); + } + if (rfb_version > rfb_max_version) { + rfb_version = rfb_max_version; + } + + if (! test_mode) { + sendTimer = setInterval(function() { + // Send updates either at a rate of one update + // every 50ms, or whatever slower rate the network + // can handle. + ws.flush(); + }, 50); + } + + cversion = "00" + parseInt(rfb_version,10) + + ".00" + ((rfb_version * 10) % 10); + ws.send_string("RFB " + cversion + "\n"); + updateState('Security', "Sent ProtocolVersion: " + cversion); + break; + + case 'Security' : + if (rfb_version >= 3.7) { + // Server sends supported list, client decides + num_types = ws.rQshift8(); + if (ws.rQwait("security type", num_types, 1)) { return false; } + if (num_types === 0) { + strlen = ws.rQshift32(); + reason = ws.rQshiftStr(strlen); + return fail("Security failure: " + reason); + } + rfb_auth_scheme = 0; + types = ws.rQshiftBytes(num_types); + Util.Debug("Server security types: " + types); + for (i=0; i < types.length; i+=1) { + if ((types[i] > rfb_auth_scheme) && (types[i] < 3)) { + rfb_auth_scheme = types[i]; + } + } + if (rfb_auth_scheme === 0) { + return fail("Unsupported security types: " + types); + } + + ws.send([rfb_auth_scheme]); + } else { + // Server decides + if (ws.rQwait("security scheme", 4)) { return false; } + rfb_auth_scheme = ws.rQshift32(); + } + updateState('Authentication', + "Authenticating using scheme: " + rfb_auth_scheme); + init_msg(); // Recursive fallthrough (workaround JSLint complaint) + break; + + // Triggered by fallthough, not by server message + case 'Authentication' : + //Util.Debug("Security auth scheme: " + rfb_auth_scheme); + switch (rfb_auth_scheme) { + case 0: // connection failed + if (ws.rQwait("auth reason", 4)) { return false; } + strlen = ws.rQshift32(); + reason = ws.rQshiftStr(strlen); + return fail("Auth failure: " + reason); + case 1: // no authentication + if (rfb_version >= 3.8) { + updateState('SecurityResult'); + return; + } + // Fall through to ClientInitialisation + break; + case 2: // VNC authentication + if (rfb_password.length === 0) { + updateState('password', "Password Required"); + return; + } + if (ws.rQwait("auth challenge", 16)) { return false; } + challenge = ws.rQshiftBytes(16); + //Util.Debug("Password: " + rfb_password); + //Util.Debug("Challenge: " + challenge + + // " (" + challenge.length + ")"); + response = genDES(rfb_password, challenge); + //Util.Debug("Response: " + response + + // " (" + response.length + ")"); + + //Util.Debug("Sending DES encrypted auth response"); + ws.send(response); + updateState('SecurityResult'); + return; + default: + fail("Unsupported auth scheme: " + rfb_auth_scheme); + return; + } + updateState('ClientInitialisation', "No auth required"); + init_msg(); // Recursive fallthrough (workaround JSLint complaint) + break; + + case 'SecurityResult' : + if (ws.rQwait("VNC auth response ", 4)) { return false; } + switch (ws.rQshift32()) { + case 0: // OK + // Fall through to ClientInitialisation + break; + case 1: // failed + if (rfb_version >= 3.8) { + length = ws.rQshift32(); + if (ws.rQwait("SecurityResult reason", length, 8)) { + return false; + } + reason = ws.rQshiftStr(length); + fail(reason); + } else { + fail("Authentication failed"); + } + return; + case 2: // too-many + return fail("Too many auth attempts"); + } + updateState('ClientInitialisation', "Authentication OK"); + init_msg(); // Recursive fallthrough (workaround JSLint complaint) + break; + + // Triggered by fallthough, not by server message + case 'ClientInitialisation' : + ws.send([conf.shared ? 1 : 0]); // ClientInitialisation + updateState('ServerInitialisation', "Authentication OK"); + break; + + case 'ServerInitialisation' : + if (ws.rQwait("server initialization", 24)) { return false; } + + /* Screen size */ + fb_width = ws.rQshift16(); + fb_height = ws.rQshift16(); + + /* PIXEL_FORMAT */ + bpp = ws.rQshift8(); + depth = ws.rQshift8(); + big_endian = ws.rQshift8(); + true_color = ws.rQshift8(); + + Util.Info("Screen: " + fb_width + "x" + fb_height + + ", bpp: " + bpp + ", depth: " + depth + + ", big_endian: " + big_endian + + ", true_color: " + true_color); + + /* Connection name/title */ + ws.rQshiftStr(12); + name_length = ws.rQshift32(); + fb_name = ws.rQshiftStr(name_length); + + canvas.resize(fb_width, fb_height, conf.true_color); + keyboard.grab(); + mouse.grab(); + + if (conf.true_color) { + fb_Bpp = 4; + fb_depth = 3; + } else { + fb_Bpp = 1; + fb_depth = 1; + } + + response = pixelFormat(); + response = response.concat(clientEncodings()); + response = response.concat(fbUpdateRequest(0)); + timing.fbu_rt_start = (new Date()).getTime(); + ws.send(response); + + /* Start pushing/polling */ + setTimeout(checkEvents, conf.check_rate); + setTimeout(scan_tight_imgQ, scan_imgQ_rate); + + if (conf.encrypt) { + updateState('normal', "Connected (encrypted) to: " + fb_name); + } else { + updateState('normal', "Connected (unencrypted) to: " + fb_name); + } + break; + } + //Util.Debug("<< init_msg"); +}; + + +/* Normal RFB/VNC server message handler */ +normal_msg = function() { + //Util.Debug(">> normal_msg"); + + var ret = true, msg_type, length, + c, first_colour, num_colours, red, green, blue; + + if (FBU.rects > 0) { + msg_type = 0; + } else { + msg_type = ws.rQshift8(); + } + switch (msg_type) { + case 0: // FramebufferUpdate + ret = framebufferUpdate(); // false means need more data + break; + case 1: // SetColourMapEntries + Util.Debug("SetColourMapEntries"); + ws.rQshift8(); // Padding + first_colour = ws.rQshift16(); // First colour + num_colours = ws.rQshift16(); + for (c=0; c < num_colours; c+=1) { + red = ws.rQshift16(); + //Util.Debug("red before: " + red); + red = parseInt(red / 256, 10); + //Util.Debug("red after: " + red); + green = parseInt(ws.rQshift16() / 256, 10); + blue = parseInt(ws.rQshift16() / 256, 10); + canvas.set_colourMap([red, green, blue], first_colour + c); + } + Util.Info("Registered " + num_colours + " colourMap entries"); + //Util.Debug("colourMap: " + canvas.get_colourMap()); + break; + case 2: // Bell + Util.Warn("Bell (unsupported)"); + break; + case 3: // ServerCutText + Util.Debug("ServerCutText"); + if (ws.rQwait("ServerCutText header", 7, 1)) { return false; } + ws.rQshiftBytes(3); // Padding + length = ws.rQshift32(); + if (ws.rQwait("ServerCutText", length, 8)) { return false; } + + conf.clipboardReceive(that, ws.rQshiftStr(length)); + break; + default: + fail("Disconnected: illegal server message type " + msg_type); + Util.Debug("ws.rQslice(0,30):" + ws.rQslice(0,30)); + break; + } + //Util.Debug("<< normal_msg"); + return ret; +}; + +framebufferUpdate = function() { + var now, hdr, fbu_rt_diff, ret = true; + + if (FBU.rects === 0) { + //Util.Debug("New FBU: ws.rQslice(0,20): " + ws.rQslice(0,20)); + if (ws.rQwait("FBU header", 3)) { + ws.rQunshift8(0); // FBU msg_type + return false; + } + ws.rQshift8(); // padding + FBU.rects = ws.rQshift16(); + //Util.Debug("FramebufferUpdate, rects:" + FBU.rects); + FBU.bytes = 0; + timing.cur_fbu = 0; + if (timing.fbu_rt_start > 0) { + now = (new Date()).getTime(); + Util.Info("First FBU latency: " + (now - timing.fbu_rt_start)); + } + } + + while (FBU.rects > 0) { + if (rfb_state !== "normal") { + return false; + } + if (ws.rQwait("FBU", FBU.bytes)) { return false; } + if (FBU.bytes === 0) { + if (ws.rQwait("rect header", 12)) { return false; } + /* New FramebufferUpdate */ + + hdr = ws.rQshiftBytes(12); + FBU.x = (hdr[0] << 8) + hdr[1]; + FBU.y = (hdr[2] << 8) + hdr[3]; + FBU.width = (hdr[4] << 8) + hdr[5]; + FBU.height = (hdr[6] << 8) + hdr[7]; + FBU.encoding = parseInt((hdr[8] << 24) + (hdr[9] << 16) + + (hdr[10] << 8) + hdr[11], 10); + + if (encNames[FBU.encoding]) { + // Debug: + /* + var msg = "FramebufferUpdate rects:" + FBU.rects; + msg += " x: " + FBU.x + " y: " + FBU.y; + msg += " width: " + FBU.width + " height: " + FBU.height; + msg += " encoding:" + FBU.encoding; + msg += "(" + encNames[FBU.encoding] + ")"; + msg += ", ws.rQlen(): " + ws.rQlen(); + Util.Debug(msg); + */ + } else { + fail("Disconnected: unsupported encoding " + + FBU.encoding); + return false; + } + } + + timing.last_fbu = (new Date()).getTime(); + + ret = encHandlers[FBU.encoding](); + + now = (new Date()).getTime(); + timing.cur_fbu += (now - timing.last_fbu); + + if (ret) { + encStats[FBU.encoding][0] += 1; + encStats[FBU.encoding][1] += 1; + } + + if (FBU.rects === 0) { + if (((FBU.width === fb_width) && + (FBU.height === fb_height)) || + (timing.fbu_rt_start > 0)) { + timing.full_fbu_total += timing.cur_fbu; + timing.full_fbu_cnt += 1; + Util.Info("Timing of full FBU, cur: " + + timing.cur_fbu + ", total: " + + timing.full_fbu_total + ", cnt: " + + timing.full_fbu_cnt + ", avg: " + + (timing.full_fbu_total / + timing.full_fbu_cnt)); + } + if (timing.fbu_rt_start > 0) { + fbu_rt_diff = now - timing.fbu_rt_start; + timing.fbu_rt_total += fbu_rt_diff; + timing.fbu_rt_cnt += 1; + Util.Info("full FBU round-trip, cur: " + + fbu_rt_diff + ", total: " + + timing.fbu_rt_total + ", cnt: " + + timing.fbu_rt_cnt + ", avg: " + + (timing.fbu_rt_total / + timing.fbu_rt_cnt)); + timing.fbu_rt_start = 0; + } + } + if (! ret) { + return ret; // false ret means need more data + } + } + return true; // We finished this FBU +}; + +// +// FramebufferUpdate encodings +// + +encHandlers.RAW = function display_raw() { + //Util.Debug(">> display_raw (" + ws.rQlen() + " bytes)"); + + var cur_y, cur_height; + + if (FBU.lines === 0) { + FBU.lines = FBU.height; + } + FBU.bytes = FBU.width * fb_Bpp; // At least a line + if (ws.rQwait("RAW", FBU.bytes)) { return false; } + cur_y = FBU.y + (FBU.height - FBU.lines); + cur_height = Math.min(FBU.lines, + Math.floor(ws.rQlen()/(FBU.width * fb_Bpp))); + canvas.blitImage(FBU.x, cur_y, FBU.width, cur_height, + ws.get_rQ(), ws.get_rQi()); + ws.rQshiftBytes(FBU.width * cur_height * fb_Bpp); + FBU.lines -= cur_height; + + if (FBU.lines > 0) { + FBU.bytes = FBU.width * fb_Bpp; // At least another line + } else { + FBU.rects -= 1; + FBU.bytes = 0; + } + //Util.Debug("<< display_raw (" + ws.rQlen() + " bytes)"); + return true; +}; + +encHandlers.COPYRECT = function display_copy_rect() { + //Util.Debug(">> display_copy_rect"); + + var old_x, old_y; + + if (ws.rQwait("COPYRECT", 4)) { return false; } + old_x = ws.rQshift16(); + old_y = ws.rQshift16(); + canvas.copyImage(old_x, old_y, FBU.x, FBU.y, FBU.width, FBU.height); + FBU.rects -= 1; + FBU.bytes = 0; + return true; +}; + +encHandlers.RRE = function display_rre() { + //Util.Debug(">> display_rre (" + ws.rQlen() + " bytes)"); + var color, x, y, width, height, chunk; + + if (FBU.subrects === 0) { + if (ws.rQwait("RRE", 4+fb_Bpp)) { return false; } + FBU.subrects = ws.rQshift32(); + color = ws.rQshiftBytes(fb_Bpp); // Background + canvas.fillRect(FBU.x, FBU.y, FBU.width, FBU.height, color); + } + while ((FBU.subrects > 0) && (ws.rQlen() >= (fb_Bpp + 8))) { + color = ws.rQshiftBytes(fb_Bpp); + x = ws.rQshift16(); + y = ws.rQshift16(); + width = ws.rQshift16(); + height = ws.rQshift16(); + canvas.fillRect(FBU.x + x, FBU.y + y, width, height, color); + FBU.subrects -= 1; + } + //Util.Debug(" display_rre: rects: " + FBU.rects + + // ", FBU.subrects: " + FBU.subrects); + + if (FBU.subrects > 0) { + chunk = Math.min(rre_chunk_sz, FBU.subrects); + FBU.bytes = (fb_Bpp + 8) * chunk; + } else { + FBU.rects -= 1; + FBU.bytes = 0; + } + //Util.Debug("<< display_rre, FBU.bytes: " + FBU.bytes); + return true; +}; + +encHandlers.HEXTILE = function display_hextile() { + //Util.Debug(">> display_hextile"); + var subencoding, subrects, tile, color, cur_tile, + tile_x, x, w, tile_y, y, h, xy, s, sx, sy, wh, sw, sh, + rQ = ws.get_rQ(), rQi = ws.get_rQi(); + + if (FBU.tiles === 0) { + FBU.tiles_x = Math.ceil(FBU.width/16); + FBU.tiles_y = Math.ceil(FBU.height/16); + FBU.total_tiles = FBU.tiles_x * FBU.tiles_y; + FBU.tiles = FBU.total_tiles; + } + + /* FBU.bytes comes in as 1, ws.rQlen() at least 1 */ + while (FBU.tiles > 0) { + FBU.bytes = 1; + if (ws.rQwait("HEXTILE subencoding", FBU.bytes)) { return false; } + subencoding = rQ[rQi]; // Peek + if (subencoding > 30) { // Raw + fail("Disconnected: illegal hextile subencoding " + subencoding); + //Util.Debug("ws.rQslice(0,30):" + ws.rQslice(0,30)); + return false; + } + subrects = 0; + cur_tile = FBU.total_tiles - FBU.tiles; + tile_x = cur_tile % FBU.tiles_x; + tile_y = Math.floor(cur_tile / FBU.tiles_x); + x = FBU.x + tile_x * 16; + y = FBU.y + tile_y * 16; + w = Math.min(16, (FBU.x + FBU.width) - x); + h = Math.min(16, (FBU.y + FBU.height) - y); + + /* Figure out how much we are expecting */ + if (subencoding & 0x01) { // Raw + //Util.Debug(" Raw subencoding"); + FBU.bytes += w * h * fb_Bpp; + } else { + if (subencoding & 0x02) { // Background + FBU.bytes += fb_Bpp; + } + if (subencoding & 0x04) { // Foreground + FBU.bytes += fb_Bpp; + } + if (subencoding & 0x08) { // AnySubrects + FBU.bytes += 1; // Since we aren't shifting it off + if (ws.rQwait("hextile subrects header", FBU.bytes)) { return false; } + subrects = rQ[rQi + FBU.bytes-1]; // Peek + if (subencoding & 0x10) { // SubrectsColoured + FBU.bytes += subrects * (fb_Bpp + 2); + } else { + FBU.bytes += subrects * 2; + } + } + } + + /* + Util.Debug(" tile:" + cur_tile + "/" + (FBU.total_tiles - 1) + + " (" + tile_x + "," + tile_y + ")" + + " [" + x + "," + y + "]@" + w + "x" + h + + ", subenc:" + subencoding + + "(last: " + FBU.lastsubencoding + "), subrects:" + + subrects + + ", ws.rQlen():" + ws.rQlen() + ", FBU.bytes:" + FBU.bytes + + " last:" + ws.rQslice(FBU.bytes-10, FBU.bytes) + + " next:" + ws.rQslice(FBU.bytes-1, FBU.bytes+10)); + */ + if (ws.rQwait("hextile", FBU.bytes)) { return false; } + + /* We know the encoding and have a whole tile */ + FBU.subencoding = rQ[rQi]; + rQi += 1; + if (FBU.subencoding === 0) { + if (FBU.lastsubencoding & 0x01) { + /* Weird: ignore blanks after RAW */ + Util.Debug(" Ignoring blank after RAW"); + } else { + canvas.fillRect(x, y, w, h, FBU.background); + } + } else if (FBU.subencoding & 0x01) { // Raw + canvas.blitImage(x, y, w, h, rQ, rQi); + rQi += FBU.bytes - 1; + } else { + if (FBU.subencoding & 0x02) { // Background + FBU.background = rQ.slice(rQi, rQi + fb_Bpp); + rQi += fb_Bpp; + } + if (FBU.subencoding & 0x04) { // Foreground + FBU.foreground = rQ.slice(rQi, rQi + fb_Bpp); + rQi += fb_Bpp; + } + + tile = canvas.getTile(x, y, w, h, FBU.background); + if (FBU.subencoding & 0x08) { // AnySubrects + subrects = rQ[rQi]; + rQi += 1; + for (s = 0; s < subrects; s += 1) { + if (FBU.subencoding & 0x10) { // SubrectsColoured + color = rQ.slice(rQi, rQi + fb_Bpp); + rQi += fb_Bpp; + } else { + color = FBU.foreground; + } + xy = rQ[rQi]; + rQi += 1; + sx = (xy >> 4); + sy = (xy & 0x0f); + + wh = rQ[rQi]; + rQi += 1; + sw = (wh >> 4) + 1; + sh = (wh & 0x0f) + 1; + + canvas.setSubTile(tile, sx, sy, sw, sh, color); + } + } + canvas.putTile(tile); + } + ws.set_rQi(rQi); + FBU.lastsubencoding = FBU.subencoding; + FBU.bytes = 0; + FBU.tiles -= 1; + } + + if (FBU.tiles === 0) { + FBU.rects -= 1; + } + + //Util.Debug("<< display_hextile"); + return true; +}; + + +encHandlers.TIGHT_PNG = function display_tight_png() { + //Util.Debug(">> display_tight_png"); + var ctl, cmode, clength, getCLength, color, img; + //Util.Debug(" FBU.rects: " + FBU.rects); + //Util.Debug(" starting ws.rQslice(0,20): " + ws.rQslice(0,20) + " (" + ws.rQlen() + ")"); + + FBU.bytes = 1; // compression-control byte + if (ws.rQwait("TIGHT compression-control", FBU.bytes)) { return false; } + + // Get 'compact length' header and data size + getCLength = function (arr) { + var header = 1, data = 0; + data += arr[0] & 0x7f; + if (arr[0] & 0x80) { + header += 1; + data += (arr[1] & 0x7f) << 7; + if (arr[1] & 0x80) { + header += 1; + data += arr[2] << 14; + } + } + return [header, data]; + }; + + ctl = ws.rQpeek8(); + switch (ctl >> 4) { + case 0x08: cmode = "fill"; break; + case 0x09: cmode = "jpeg"; break; + case 0x0A: cmode = "png"; break; + default: throw("Illegal basic compression received, ctl: " + ctl); + } + switch (cmode) { + // fill uses fb_depth because TPIXELs drop the padding byte + case "fill": FBU.bytes += fb_depth; break; // TPIXEL + case "jpeg": FBU.bytes += 3; break; // max clength + case "png": FBU.bytes += 3; break; // max clength + } + + if (ws.rQwait("TIGHT " + cmode, FBU.bytes)) { return false; } + + //Util.Debug(" ws.rQslice(0,20): " + ws.rQslice(0,20) + " (" + ws.rQlen() + ")"); + //Util.Debug(" cmode: " + cmode); + + // Determine FBU.bytes + switch (cmode) { + case "fill": + ws.rQshift8(); // shift off ctl + color = ws.rQshiftBytes(fb_depth); + canvas.fillRect(FBU.x, FBU.y, FBU.width, FBU.height, color); + break; + case "jpeg": + case "png": + clength = getCLength(ws.rQslice(1, 4)); + FBU.bytes = 1 + clength[0] + clength[1]; // ctl + clength size + jpeg-data + if (ws.rQwait("TIGHT " + cmode, FBU.bytes)) { return false; } + + // We have everything, render it + //Util.Debug(" png, ws.rQlen(): " + ws.rQlen() + ", clength[0]: " + clength[0] + ", clength[1]: " + clength[1]); + ws.rQshiftBytes(1 + clength[0]); // shift off ctl + compact length + img = new Image(); + img.onload = scan_tight_imgQ; + FBU.imgQ.push([img, FBU.x, FBU.y]); + img.src = "data:image/" + cmode + + extract_data_uri(ws.rQshiftBytes(clength[1])); + img = null; + break; + } + FBU.bytes = 0; + FBU.rects -= 1; + //Util.Debug(" ending ws.rQslice(0,20): " + ws.rQslice(0,20) + " (" + ws.rQlen() + ")"); + //Util.Debug("<< display_tight_png"); + return true; +}; + +extract_data_uri = function(arr) { + //var i, stra = []; + //for (i=0; i< arr.length; i += 1) { + // stra.push(String.fromCharCode(arr[i])); + //} + //return "," + escape(stra.join('')); + return ";base64," + Base64.encode(arr); +}; + +scan_tight_imgQ = function() { + var img, imgQ, ctx; + ctx = canvas.getContext(); + if (rfb_state === 'normal') { + imgQ = FBU.imgQ; + while ((imgQ.length > 0) && (imgQ[0][0].complete)) { + img = imgQ.shift(); + ctx.drawImage(img[0], img[1], img[2]); + } + setTimeout(scan_tight_imgQ, scan_imgQ_rate); + } +}; + +encHandlers.DesktopSize = function set_desktopsize() { + Util.Debug(">> set_desktopsize"); + fb_width = FBU.width; + fb_height = FBU.height; + canvas.clear(); + canvas.resize(fb_width, fb_height); + timing.fbu_rt_start = (new Date()).getTime(); + // Send a new non-incremental request + ws.send(fbUpdateRequest(0)); + + FBU.bytes = 0; + FBU.rects -= 1; + + Util.Debug("<< set_desktopsize"); + return true; +}; + +encHandlers.Cursor = function set_cursor() { + var x, y, w, h, pixelslength, masklength; + //Util.Debug(">> set_cursor"); + x = FBU.x; // hotspot-x + y = FBU.y; // hotspot-y + w = FBU.width; + h = FBU.height; + + pixelslength = w * h * fb_Bpp; + masklength = Math.floor((w + 7) / 8) * h; + + FBU.bytes = pixelslength + masklength; + if (ws.rQwait("cursor encoding", FBU.bytes)) { return false; } + + //Util.Debug(" set_cursor, x: " + x + ", y: " + y + ", w: " + w + ", h: " + h); + + canvas.changeCursor(ws.rQshiftBytes(pixelslength), + ws.rQshiftBytes(masklength), + x, y, w, h); + + FBU.bytes = 0; + FBU.rects -= 1; + + //Util.Debug("<< set_cursor"); + return true; +}; + +encHandlers.JPEG_quality_lo = function set_jpeg_quality() { + Util.Error("Server sent jpeg_quality pseudo-encoding"); +}; + +encHandlers.compress_lo = function set_compress_level() { + Util.Error("Server sent compress level pseudo-encoding"); +}; + +/* + * Client message routines + */ + +pixelFormat = function() { + //Util.Debug(">> pixelFormat"); + var arr; + arr = [0]; // msg-type + arr.push8(0); // padding + arr.push8(0); // padding + arr.push8(0); // padding + + arr.push8(fb_Bpp * 8); // bits-per-pixel + arr.push8(fb_depth * 8); // depth + arr.push8(0); // little-endian + arr.push8(conf.true_color ? 1 : 0); // true-color + + arr.push16(255); // red-max + arr.push16(255); // green-max + arr.push16(255); // blue-max + arr.push8(0); // red-shift + arr.push8(8); // green-shift + arr.push8(16); // blue-shift + + arr.push8(0); // padding + arr.push8(0); // padding + arr.push8(0); // padding + //Util.Debug("<< pixelFormat"); + return arr; +}; + +clientEncodings = function() { + //Util.Debug(">> clientEncodings"); + var arr, i, encList = []; + + for (i=0; i> fbUpdateRequest"); + if (!x) { x = 0; } + if (!y) { y = 0; } + if (!xw) { xw = fb_width; } + if (!yw) { yw = fb_height; } + var arr; + arr = [3]; // msg-type + arr.push8(incremental); + arr.push16(x); + arr.push16(y); + arr.push16(xw); + arr.push16(yw); + //Util.Debug("<< fbUpdateRequest"); + return arr; +}; + +keyEvent = function(keysym, down) { + //Util.Debug(">> keyEvent, keysym: " + keysym + ", down: " + down); + var arr; + arr = [4]; // msg-type + arr.push8(down); + arr.push16(0); + arr.push32(keysym); + //Util.Debug("<< keyEvent"); + return arr; +}; + +pointerEvent = function(x, y) { + //Util.Debug(">> pointerEvent, x,y: " + x + "," + y + + // " , mask: " + mouse_buttonMask); + var arr; + arr = [5]; // msg-type + arr.push8(mouse_buttonMask); + arr.push16(x); + arr.push16(y); + //Util.Debug("<< pointerEvent"); + return arr; +}; + +clientCutText = function(text) { + //Util.Debug(">> clientCutText"); + var arr, i, n; + arr = [6]; // msg-type + arr.push8(0); // padding + arr.push8(0); // padding + arr.push8(0); // padding + arr.push32(text.length); + n = text.length; + for (i=0; i < n; i+=1) { + arr.push(text.charCodeAt(i)); + } + //Util.Debug("<< clientCutText:" + arr); + return arr; +}; + + + +// +// Public API interface functions +// + +that.connect = function(host, port, password) { + //Util.Debug(">> connect"); + + rfb_host = host; + rfb_port = port; + rfb_password = (password !== undefined) ? password : ""; + + if ((!rfb_host) || (!rfb_port)) { + return fail("Must set host and port"); + } + + updateState('connect'); + //Util.Debug("<< connect"); + +}; + +that.disconnect = function() { + //Util.Debug(">> disconnect"); + updateState('disconnect', 'Disconnecting'); + //Util.Debug("<< disconnect"); +}; + +that.sendPassword = function(passwd) { + rfb_password = passwd; + rfb_state = "Authentication"; + setTimeout(init_msg, 1); +}; + +that.sendCtrlAltDel = function() { + if (rfb_state !== "normal") { return false; } + Util.Info("Sending Ctrl-Alt-Del"); + var arr = []; + arr = arr.concat(keyEvent(0xFFE3, 1)); // Control + arr = arr.concat(keyEvent(0xFFE9, 1)); // Alt + arr = arr.concat(keyEvent(0xFFFF, 1)); // Delete + arr = arr.concat(keyEvent(0xFFFF, 0)); // Delete + arr = arr.concat(keyEvent(0xFFE9, 0)); // Alt + arr = arr.concat(keyEvent(0xFFE3, 0)); // Control + arr = arr.concat(fbUpdateRequest(1)); + ws.send(arr); +}; + +// Send a key press. If 'down' is not specified then send a down key +// followed by an up key. +that.sendKey = function(code, down) { + if (rfb_state !== "normal") { return false; } + var arr = []; + if (typeof down !== 'undefined') { + Util.Info("Sending key code (" + (down ? "down" : "up") + "): " + code); + arr = arr.concat(keyEvent(code, down ? 1 : 0)); + } else { + Util.Info("Sending key code (down + up): " + code); + arr = arr.concat(keyEvent(code, 1)); + arr = arr.concat(keyEvent(code, 0)); + } + arr = arr.concat(fbUpdateRequest(1)); + ws.send(arr); +}; + +that.clipboardPasteFrom = function(text) { + if (rfb_state !== "normal") { return; } + //Util.Debug(">> clipboardPasteFrom: " + text.substr(0,40) + "..."); + ws.send(clientCutText(text)); + //Util.Debug("<< clipboardPasteFrom"); +}; + +that.testMode = function(override_send) { + // Overridable internal functions for testing + test_mode = true; + // TODO figure out what to do here + ws.send = override_send; + that.recv_message = ws.recv_message; // Expose it + + checkEvents = function () { /* Stub Out */ }; + that.connect = function(host, port, password) { + rfb_host = host; + rfb_port = port; + rfb_password = password; + updateState('ProtocolVersion', "Starting VNC handshake"); + }; +}; + + +return constructor(); // Return the public API interface + +} // End of RFB() diff --git a/src/sunstone/public/vendor/noVNC/include/ui.js b/src/sunstone/public/vendor/noVNC/include/ui.js new file mode 100644 index 0000000000..3e3042034e --- /dev/null +++ b/src/sunstone/public/vendor/noVNC/include/ui.js @@ -0,0 +1,423 @@ +/* + * noVNC: HTML5 VNC client + * Copyright (C) 2011 Joel Martin + * Licensed under LGPL-3 (see LICENSE.txt) + * + * See README.md for usage and integration instructions. + */ + +"use strict"; +/*jslint white: false, browser: true */ +/*global window, $D, Util, WebUtil, RFB, Canvas, Element, Fx */ + +var UI = { + +settingsOpen : false, + +// Render default UI and initialize settings menu +load: function(target) { + var html = '', i, sheet, sheets, llevels; + + /* Populate the 'target' DOM element with default UI */ + if (!target) { + target = $D('vnc'); + } else if (typeof target === 'string') { + target = $D(target); + } + + if ((!document.createElement('canvas').getContext) && + window.ActiveXObject) { + // Suggest Chrome frame for Internet Explorer users + html += '

    '; + target.innerHTML = html; + return; + } + + html += '
    '; + html += '