From mboxrd@z Thu Jan 1 00:00:00 1970
From: Ian Campbell You domain had been successfully created. There was an error creating your domain. The error was:%s
" % sxp2prettystring( xend_sxp ) )
-
- try:
- server.xend_domain_create( xend_sxp )
- request.write( "
The configuration used is as follows:\n%s
" % sxp2prettystring( xend_sxp ) )
- request.write( "%s
" % str( e ) )
-
- request.write( "
Please Select a Domain
" ) - return None - - GenTabbed.write_BODY( self, request ) - - def write_MENU( self, request ): - domains = [] - - try: - domains = server.xend_domains() - domains.sort() - except: - pass - - request.write( "\nDomain | \n" ) - request.write( "Name | \n" ) - request.write( "State | \n" ) - request.write( "\n" ) - request.write( " | |
%(id)s | \n" % domInfo ) - url = self.urlWriter( "&dom=%(id)s" % domInfo ) - request.write( "%s | \n" % ( url, domInfo['name'] ) ) - request.write( "%(state)5s | \n" % domInfo ) - if domInfo[ 'id' ] != "0": - request.write( "" )
- if domInfo[ 'state' ][ 2 ] == "-":
- request.write( "![]() ![]() ![]() | " % domInfo )
- else:
- request.write( "" ) - request.write( " |
Please Select a Domain
" ) - return None - - self.dict = getDomInfo( self.dom ) - - GeneralTab.write_BODY( self, request ) - -class DomSXPTab( PreTab ): - - def __init__( self, _ ): - self.dom = 0 - PreTab.__init__( self, "" ) - - - def write_BODY( self, request ): - self.dom = getVar('dom', request) - - if self.dom is None: - request.write( "Please Select a Domain
" ) - return None - - try: - domInfo = server.xend_domain( self.dom ) - except: - domInfo = [["Error getting domain details."]] - - self.source = sxp2prettystring( domInfo ) - - PreTab.write_BODY( self, request ) - -class DomActionTab( ActionTab ): - - def __init__( self, _ ): - actions = { "shutdown" : "Shutdown", - "reboot" : "Reboot", - "pause" : "Pause", - "unpause" : "Unpause", - "destroy" : "Destroy" } - ActionTab.__init__( self, actions ) - - def op_shutdown( self, request ): - dom = getVar( 'dom', request ) - if not dom is None and dom != '0': - if DEBUG: print ">DomShutDown %s" % dom - try: - server.xend_domain_shutdown( int( dom ), "poweroff" ) - except: - pass - - def op_reboot( self, request ): - dom = getVar( 'dom', request ) - if not dom is None and dom != '0': - if DEBUG: print ">DomReboot %s" % dom - try: - server.xend_domain_shutdown( int( dom ), "reboot" ) - except: - pass - - def op_pause( self, request ): - dom = getVar( 'dom', request ) - if not dom is None and dom != '0': - if DEBUG: print ">DomPause %s" % dom - try: - server.xend_domain_pause( int( dom ) ) - except: - pass - - def op_unpause( self, request ): - dom = getVar( 'dom', request ) - if not dom is None and dom != '0': - if DEBUG: print ">DomUnpause %s" % dom - try: - server.xend_domain_unpause( int( dom ) ) - except: - pass - - def op_destroy( self, request ): - dom = getVar( 'dom', request ) - if not dom is None and dom != '0': - if DEBUG: print ">DomDestroy %s" % dom - try: - server.xend_domain_destroy(int( dom )) - except: - pass - -class DomDeviceTab( CompositeTab ): - - def __init__( self, urlWriter ): - CompositeTab.__init__( self, [ DomDeviceListTab, DomDeviceOptionsTab, DomDeviceActionTab ], urlWriter ) - -class DomDeviceListTab( NullTab ): - - title = "Device List" - - def __init__( self, _ ): - pass - -class DomDeviceOptionsTab( NullTab ): - - title = "Device Options" - - def __init__( self, _ ): - pass - -class DomDeviceActionTab( ActionTab ): - - def __init__( self, _ ): - ActionTab.__init__( self, { "addvcpu" : "Add VCPU", "addvbd" : "Add VBD", "addvif" : "Add VIF" } ) - -class DomMigrateTab( CompositeTab ): - - def __init__( self, urlWriter ): - CompositeTab.__init__( self, [ DomMigrateExtraTab, DomMigrateActionTab ], urlWriter ) - -class DomMigrateExtraTab( Sheet ): - - def __init__( self, urlWriter ): - Sheet.__init__( self, urlWriter, "Configure Migration", 0) - self.addControl( TickControl('live', 'True', 'Live migrate:') ) - self.addControl( InputControl('rate', '0', 'Rate limit:') ) - self.addControl( InputControl( 'dest', 'host.domain', 'Name or IP address:', ".*") ) - -class DomMigrateActionTab( ActionTab ): - - def __init__( self, _ ): - actions = { "migrate" : "Migrate" } - ActionTab.__init__( self, actions ) - - def op_migrate( self, request ): - try: - domid = int( getVar( 'dom', request ) ) - live = getVar( 'live', request ) - rate = getVar( 'rate', request ) - dest = getVar( 'dest', request ) - dom_sxp = server.xend_domain_migrate( domid, dest, live == 'True', rate ) - success = "Your domain was successfully Migrated.\n" - except Exception, e: - success = "There was an error migrating your domain\n" - dom_sxp = str(e) - -class DomSaveTab( CompositeTab ): - - def __init__( self, urlWriter ): - CompositeTab.__init__( self, [ DomSaveExtraTab, DomSaveActionTab ], urlWriter ) - -class DomSaveExtraTab( Sheet ): - - title = "Save location" - - def __init__( self, urlWriter ): - Sheet.__init__( self, urlWriter, "Save Domain to file", 0 ) - self.addControl( InputControl( 'file', '', 'Suspend file name:', ".*") ) - -class DomSaveActionTab( ActionTab ): - - def __init__( self, _ ): - actions = { "save" : "Save" } - ActionTab.__init__( self, actions ) - - def op_save( self, request ): - - try: - dom_sxp = server.xend_domain_save( config['domid'], config['file'] ) - success = "Your domain was successfully saved.\n" - except Exception, e: - success = "There was an error saving your domain\n" - dom_sxp = str(e) - - try: - dom = int( getVar( 'dom', request ) ) - except: - pass diff --git a/tools/python/xen/sv/GenTabbed.py b/tools/python/xen/sv/GenTabbed.py deleted file mode 100755 index 6631663..0000000 --- a/tools/python/xen/sv/GenTabbed.py +++ /dev/null @@ -1,147 +0,0 @@ -import types - -from xen.sv.HTMLBase import HTMLBase -from xen.sv.util import getVar - -class GenTabbed( HTMLBase ): - - def __init__( self, title, urlWriter, tabStrings, tabObjects ): - HTMLBase.__init__(self) - self.tabStrings = tabStrings - self.tabObjects = tabObjects - self.urlWriter = urlWriter - self.title = title - - def write_BODY( self, request ): - if not self.__dict__.has_key( "tab" ): - try: - self.tab = int( getVar( 'tab', request, 0 ) ) - except: - self.tab = 0 - - request.write( "\nError Rendering Tab
" ) - request.write( "\n%s
" % str( e ) ) - - request.write( "\n" % self.tab ) - - def perform( self, request ): - request.write( "Tab> perform" ) - request.write( "" ) - request.write( self.source ) - request.write( "\n" ) - -class GeneralTab( HTMLBase ): - - def __init__( self, dict, titles ): - HTMLBase.__init__( self ) - self.dict = dict - self.titles = titles - - def write_BODY( self, request ): - - request.write( "\n
%s: | %s |
%s
" % self.title ) - -class ActionTab( HTMLBase ): - - def __init__( self, actions ): - self.actions = actions - HTMLBase.__init__( self ) - - def write_BODY( self, request ): - for item in self.actions.items(): - try: - ((op, attr), title) = item - except: - (op, title) = item - attr = "" - request.write( "\n " % (op, attr, title) ) - -class CompositeTab( HTMLBase ): - - def __init__( self, tabs, urlWriter ): - HTMLBase.__init__( self ) - self.tabs = tabs - self.urlWriter = urlWriter - - def write_BODY( self, request ): - for tab in self.tabs: - tab( self.urlWriter ).write_BODY( request ) - - def perform( self, request ): - for tab in self.tabs: - tab( self.urlWriter ).perform( request ) - -class TabView( HTMLBase ): - - # tab - int, id into tabs of selected tab - # tabs - list of strings, tab names - # urlWriter - - def __init__( self, tab, tabs, urlWriter ): - HTMLBase.__init__(self) - self.tab = tab - self.tabs = tabs - self.urlWriter = urlWriter - - def write_BODY( self, request ): - for i in range( len( self.tabs ) ): - if self.tab == i: - at = " id='activeTab'" - else: - at = "" - request.write( "\nPlease select a module
' ) - else: - module = self.modules[ moduleName ] - module.write_BODY( request ) - - def do_POST( self, request ): - if not self.init_done: - self.init_modules( request ) - self.init_done = True - - moduleName = getVar( 'mod', request ) - if moduleName in self.modules: - self.modules[ moduleName ].perform( request ) - - def urlWriter( self, module, url ): - return lambda x: "%s?mod=%s%s" % ( url, module, x ) diff --git a/tools/python/xen/sv/NodeInfo.py b/tools/python/xen/sv/NodeInfo.py deleted file mode 100755 index f8b47b1..0000000 --- a/tools/python/xen/sv/NodeInfo.py +++ /dev/null @@ -1,73 +0,0 @@ -from xen.xend.XendClient import server - -from xen.sv.util import * -from xen.sv.GenTabbed import * - -class NodeInfo( GenTabbed ): - - def __init__( self, urlWriter ): - GenTabbed.__init__( self, "Node Details", urlWriter, [ 'General', 'Dmesg', 'SXP' ], [ NodeGeneralTab, NodeDmesgTab, NodeSXPTab ] ) - - def write_MENU( self, request ): - request.write( "" % self.urlWriter( '' ) ) - -class NodeGeneralTab( CompositeTab ): - def __init__( self, urlWriter ): - CompositeTab.__init__( self, [ NodeInfoTab, NodeActionTab ], urlWriter ) - -class NodeInfoTab( GeneralTab ): - - def __init__( self, urlWriter ): - - nodeInfo = {} - try: - nodeInfo = sxp2hash( server.xend_node() ) - except: - nodeInfo[ 'system' ] = 'Error getting node info' - - dictTitles = {} - dictTitles[ 'System' ] = 'system' - dictTitles[ 'Hostname' ] = 'host' - dictTitles[ 'Release' ] = 'release' - dictTitles[ 'Version' ] ='version' - dictTitles[ 'Machine' ] = 'machine' - dictTitles[ 'Cores' ] = 'cores' - dictTitles[ 'Hyperthreading' ] = ( 'hyperthreads_per_core', hyperthreadFormatter ) - dictTitles[ 'CPU Speed' ] = ( 'cpu_mhz', cpuFormatter ) - dictTitles[ 'Memory' ] = ( 'memory', memoryFormatter ) - dictTitles[ 'Free Memory' ] = ( 'free_memory', memoryFormatter ) - - GeneralTab.__init__( self, dict=nodeInfo, titles=dictTitles ) - -class NodeDmesgTab( PreTab ): - - def __init__( self, urlWriter ): - try: - dmesg = server.xend_node_get_dmesg() - except: - dmesg = "Error getting node information: XenD not running?" - PreTab.__init__( self, dmesg ) - -class NodeActionTab( ActionTab ): - - def __init__( self, urlWriter ): - ActionTab.__init__( self, { "shutdown" : "shutdown", - "reboot" : "reboot" } ) - - def op_shutdown( self, request ): - if debug: print ">NodeShutDown" - server.xend_node_shutdown() - - def op_reboot( self, request ): - if debug: print ">NodeReboot" - server.xend_node_reboot() - -class NodeSXPTab( PreTab ): - - def __init__( self, urlWriter ): - try: - nodeSXP = sxp2string( server.xend_node() ) - except: - nodeSXP = 'Error getting node sxp' - - PreTab.__init__( self, nodeSXP ) diff --git a/tools/python/xen/sv/RestoreDomain.py b/tools/python/xen/sv/RestoreDomain.py deleted file mode 100755 index b836a43..0000000 --- a/tools/python/xen/sv/RestoreDomain.py +++ /dev/null @@ -1,50 +0,0 @@ -from xen.sv.Wizard import * -from xen.sv.util import * -from xen.sv.GenTabbed import PreTab - -from xen.xm.create import make_config, OptVals - -from xen.xend.XendClient import server - -class RestoreDomain( Wizard ): - def __init__( self, urlWriter ): - - sheets = [ ChooseRestoreDomain, - DoRestore ] - - Wizard.__init__( self, urlWriter, "Restore Domain", sheets ) - - -class ChooseRestoreDomain( Sheet ): - title = "Configure Restore" - - def __init__( self, urlWriter ): - Sheet.__init__( self, urlWriter, "Configure Restore", 0) - - self.addControl( InputControl( 'file', '', - 'Suspend file name:', - ".*") ) - -class DoRestore( Sheet ): - title = "Restore Done" - - def __init__(self, urlWriter ): - Sheet.__init__(self, urlWriter, "Restore Done", 1) - - def write_BODY( self, request, err ): - - if not self.passback: self.parseForm( request ) - config = ssxp2hash ( string2sxp( self.passback ) ) - - try: - dom_sxp = server.xend_domain_restore( config['file'] ) - success = "Your domain was successfully restored.\n" - except Exception, e: - success = "There was an error restoring your domain\n" - dom_sxp = str(e) - - pt = PreTab( success + sxp2prettystring( dom_sxp ) ) - pt.write_BODY( request ) - - request.write( "" % self.passback ) - request.write( "" % self.location ) diff --git a/tools/python/xen/sv/Wizard.py b/tools/python/xen/sv/Wizard.py deleted file mode 100755 index c4ac53b..0000000 --- a/tools/python/xen/sv/Wizard.py +++ /dev/null @@ -1,245 +0,0 @@ -from xen.sv.util import * -from xen.sv.HTMLBase import HTMLBase -from xen.sv.GenTabbed import GenTabbed, ActionTab -from xen.xend import sxp - -import re - -DEBUG = 0 - -class Wizard( GenTabbed ): - - def __init__( self, urlWriter, title, sheets ): - self.title = title - self.sheets = sheets - self.urlWriter = urlWriter - self.offset = 0 - GenTabbed.__init__( self, title, urlWriter, map( lambda x: x.title, sheets ), sheets ) - - def write_MENU( self, request ): - request.write( "" % (self.urlWriter( '' ), self.title) ) - - def write_BODY( self, request ): - GenTabbed.write_BODY( self, request ) - actionTab = ActionTab( { ("tab", str(self.tab-1)) : "< Prev", ("tab", str(self.tab+1)) : "Next >", "finish" : "Finish" } ) - actionTab.write_BODY( request ) - - def perform( self, request ): - try: - action = getVar( 'op', request, 0 ) - if action == "tab": - self.tab = int( getVar( 'args', request ) ) - oldtab = int( getVar( 'tab', request ) ) - if not self.tabObjects[ oldtab ]( self.urlWriter ).validate( request ): - self.tab = oldtab - else: - self.tab = int( getVar( 'tab', request, 0 ) ) - self.tabObjects[ self.tab ]( self.urlWriter ).perform( request ) - getattr( self, "op_" + getVar( "op", request ), None )( request ) - except: - pass - - def op_finish( self, request ): - pass - -class Sheet( HTMLBase ): - - def __init__( self, urlWriter, title, location ): - HTMLBase.__init__( self ) - self.urlWriter = urlWriter - self.fields = [] - self.title = title - self.location = location - self.passback = None - - def parseForm( self, request ): - do_not_parse = [ 'mod', 'op', 'passback' ] - - passed_back = request.args - - temp_passback = passed_back.get( "passback" ) - - if temp_passback is not None and len( temp_passback ) > 0: - temp_passback = temp_passback[ len( temp_passback )-1 ] - else: - temp_passback = "( )" - - last_passback = ssxp2hash( string2sxp( temp_passback ) ) #use special function - will work with no head on sxp - - if DEBUG: print last_passback - - for (key, value) in passed_back.items(): - if key not in do_not_parse: - last_passback[ key ] = value[ len( value ) - 1 ] - - self.passback = sxp2string( hash2sxp( last_passback ) ) #store the sxp - - if DEBUG: print self.passback - - def write_BODY( self, request ): - - if not self.passback: self.parseForm( request ) - - request.write( "%s
" % self.title ) - - previous_values = ssxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference - - request.write( "Text must match pattern:" ) - request.write( " %s
%s
" ) - request.write( " %s
%s
%s
%s
File does not exist: you must enter a valid, absolute file path.
%s
h!R~dyZK`252MJr$}Vps!1#R1^eCaCU9mAdv3fH2p6 zic<9Q_X$ZX+LZt)DAp`Tf}|~EarGj8q;s)&JpSz#+<1bwoyZ51 z$t|C=kARF|*hB>R_3QH46coY?sZ>gb6I#so%@g}EP#sj+z7;!-RTa xS=#9h$Q{f|A@Pr zhQ=+DoSlD9V7juvW0wO0!3?nOOt&pb+j=PS=S&zig;)or2%1!AFDxv$!5@(%hffA? z-Fm=Y7-inTfF!G0;_jgK+ziHM2j}YaH5|L=&1OU8Q)nbuVM8}}e0;n{@rTIN#Va-A zN>vV?354D1&mZ3v`0L*k-?(}jF-mJJ1~IiAU!6B^o`OVvmQen1$n5Z~xY1qJlvXA% zx!wQp#OA&tA9tWqB$kwx_GPRi>#+hOer#%NtN=ZkZ`DP{1?^ooLv(5MG76m6cRyjm zy4p&NRc1_1MqT&N04P0<9OUPB`*cakH=QrQs#4uwAG5Nl+~-0IEgjnFeLc9L__7Lr zKg>!lZFJ5>fJ(gJG1+sEJA@RIcDB9bFq7inQCL(Y#)oH)txBD-uADtKH*UzO{Wh-| ztz&UV(lauK_K_hy7G}8|XwD71eQ>lN(loj8Crl3!(<~d=%XDA7c)@RPRNAr1*9fZ# z!}=Y)%gYU2T5hn8MuGEvUi$j_iKhyXYNGyOn?pp~MV rBuID}g|(aP|`lUEsK8&9l zch?; zcc&`XlU>g2@K`RUeIZP~ZML$sbY(P~!QgV@*jo9zAv~2_qu6wl8fX=R>WQkBHDd0z zoGvVce(F%T54y_j5+HRED $`KkW_*RmVu diff --git a/tools/sv/images/finish.png b/tools/sv/images/finish.png deleted file mode 100755 index 6c5d18a9b7f6091f3a92723f27029b7629ee45e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmV;W1X}xvP) ?bz6rVnQ>h|v4JG-}U-)epM@Im_j|Nm@2<-fSN zxL%5ji(h7CWj&^(q_iEV{_fwue;Gc1{>mdTuC87O^zkGhX88U4H(U)s z0HIh03=SrsZ#s@0J5~yFG0X=rOOV;v04NwiKvh+BmYJDZKG2~*U}69P!~# nx!vO+_3FH!>H HYHMixEHo zvAlo(UW%9$2ueJ1a&io6YHAF8e0*TTK|Tce4(3Aw!TBE`fS7=qm 3f($%7 zJYbiCLIdPe5JoNl@Bx4T0$KK-7=@rB2jm0fvJT`MVC2J#D0~2D&0l~3Vgd%mGh*xm z8T|P1V=(^u^(!b2!149``EwKp;0sBB0Adjq7QPIuLbM5GXprk)y?O=q9k3Vzm-4_Y z15O+uHWB&lEkFRVaB^~90 @6zy!qrbR4`|A;uz5))EpDS_=?BOu$HA1FT_x z5E*swdJBY!u?Xs`Z@`e-0}w! z+BPf&h0F(1i zbl(x{TLPB726|>T$R2 i9B06IPgm=1o!%mB#)1P~K?f&eP~2W*b@0rQ0mP{9_UtG 4m{ftLCLgH# ?bz6rVnQ>h|v4JG-}U-)epM@Im_j|Nm@2<-fSN zxL%5ji(h7CWj&^(q_iEV{_fwue;Gc1{>mdTuC87O^zkGhX88U4H(U)s z0HIh03=SrsZ#s@0J5~yFG0Y&4g&>PS!Gvr%IsnOofU2tMEHg8+e4yGNFfo7tVu2|F z1>K!HcRG$7IZ_JqAxtxf@8smf0P^LoUAw?yAT~At5(fqEjT<-8fDUFgG&D@&;NSqu z0R#}(i6DcYJ$sgZ{P=OOMKG6xG=VfbIyy3FXlQ_3%i!$n43>wv78?MW0SqOEyLay< z0z;}0=5T-jVgeZk)Tn&s%$a6T_#y`p$UtCFFlcLQ!^J?By12LyWg*Dyt5>gf0#mXs z$U=Ys0$X r_Wb#ChAmsRkZmC}iu@itc%TCiKuo}7?)mA{Cjnd$4)QI~*JN7=3LT(_ zSb%1P00a;dFzMSPXFO~Glv43o=;r1I_5m&np}w;R2p}e)A= 6VgwLCOz+>nm%^7xaajmVVJLF)^73E{IXOAOSq4jR{s#ykCZGf}t|ADRg`h+O z%##>$APYgkid;k?1AqVmS@xfS1OO_KB_t#mEG#TA YJbDb0LcRc z5EFWW04n?kY>xE_2?@CX6>I?p!B>#4z%GNfuwcFe(I9bXGwwG~-FjfY^#nRL6I48* zI|v|vSg^SgWB@Q2PXjIW1?Dq#V7z()g)M-zF3> VzaL`3A0 zva<3i4i1h>K=E_J!onY@ xpwqyUVCptEPs#@xDf%aDPJ02qU>9334yg@lCG z0X_JD95Vm{h-8lelN%q9iamDhSkB|ek2M%*2pAa||G2uk76=LoE(RvkPo(Gt2q2O? z2K1B*&@&l8PX#m35ddTGp_i9eiiCv39%A(X1Q5|4117zkO`A3~e*XMfh+%+$ySsZX zu&|jzj9P#IBIq%ohXjEoTiM2q8!H$F0g#uMUu $@A0Vv2q3&3113F*4 TN6!)F+ eMg?*g)t4 znsHu9NeQJY00 ~`?%b&X#+m|*4-i0bkNy1lGl d+Q0I;j&4-i01z-ZGPZXWyk^{Xd905M&^e%+Q~_yI 6E83CrQzl) zV2m9B2p}dlHnwv>#;{3?z|{9cS64R#Ab^+@6%{|Qva;S8M)~ZEm6g>8fB*vbpn*QD z8ZH$zu$1Qp(EtGi_LzWxz-|^6mLcycVB~zz*4CB;u>k@I>@f`ujgLx7O2wZ(eH!Y1 zYqqzy2T#fa1Q2{&QA9*!9S;xBtD&0LfZeYfa&mI(V0?f8f_u!w#N+``q6yfo9+Dp8 z;^Gqa_xFDQ;{yZ`%GkY(jLc$Seq$JF1 7)c5HP8gRrnLzSrHo00aFdAvHm_gJ6nku^#B1x(ju`{t5&%@fBt+b zFyE bP%0BV6P7EWNBO%+u4fjmi!M?v=g{{0(N zINb- h5I~I7Y&xx9zg_@Xp&9{0Tn|`Bg?;(* 2~5JTfdTLq*rU(~20${fje0IBDvD~0odE(206x2i9mk?v%K!iX07*qo IM6N<$f|-xg+W-In diff --git a/tools/sv/images/previous.png b/tools/sv/images/previous.png deleted file mode 100755 index 22292d6e9c8d7aa0c3ee21d9dfa96988178837c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1285 zcmV+g1^W7lP) 8zkT~A4php< z$jJChKtSNBu(0qoAt9kd($dnq*x1 qDtzkXp@1`t3f zma($3G5}oF$3ffWHkT* z1h)(nWIzoZr%s)kc>DJ4G?*AJ05TjT4>AnIhB*ip0#;U5-9TSf0E7P@Ob D6z87N3W z03d)^U~vUZ1ci6+-X+>1XJ=;yRaI5E*ujGb!M+6P1<8XfJbwImDHj*lU0{&T1o;>s zfS5oQy?ggg_v+QFogkMH>mv;f4Y;_rwl;&AnHg9f20-e7LCA3C%$a7OxH8CWfB<3w zx#rTPOAWvz%Ze)@pj)J_u8t!2@#9BO$Y3}W6iTmOzZM0ifl`oV00G1VOxilno;~ve z`H) jlWsl2OAd5h9Ad6s$0h>jjOpOnK5(hAg*#iU+%a<=-jIhNO%pxx@F9vye zd9p2n`3|U78z6u{!S^3q$p9)JU0q! |BEgOitKCGu7Oe!hDHku3kF~&Wq_3m!~&o_ z{{aFB bMd|>EZ2c>X;0Ac}!HOK|Pgi;SIx 0yzTMLffvWs8|3}`{TzCusA>fF~O=9XrtvfP-70zpcz2?9hSjym3JVFT!%qh zSf7BwSqzLCAE4YPkQm4e5C#Y!CM-$yFHmtNFkg5AHLeE+$8V4Z =S7nyxN~45`jWveT|Jo%6?9>silQ&sx9B`+I-y309zwj;4tw0025n zU$0=*>iA=*V^y=r`_OCEf{thW%m9Ef#YhmxUbQ#Q@aANMq{L-pMyK-t#(|U=9*LP8 z9nTBqMIXpY>*u)wfYxKC7lX}z5%cx?cXw2a^kr)b2CiI3c-N8r$#3a(d*;CSgS?8r z);>2YALf5wMF!lc4h|3FVq db)Q%N_e4z#G*U)pr5Y zr^X-V3+YV=lFA7RN)eWq4?80`^YU0T2sph!<))*^jf$&b&At2X^Pi|0Y>*!4fqn)` z`_0{tQGkj$4SoFzazR1CNkRXz{+2iZO<VaDKpbqTbjj>(hDC6-SfX4 zV6oZzcyV!#8 |YiG-q!2JY!|hQHDr9Y2hXjeSsi+wpmI1cfF kKJnzWK z+|rc3Q3OoiOMG_yjM~*2)1*b!>EsQkls9)xoil9k3WFG{(GW=}hB_~QQcMoFSLKz0 z7w?Q5o&nTKG&&YBqao6SQ1Yc^lwlv~Q+0K {)Jx4}Ijhn7rGv FEuSK8q(D+k3FGtgqv451#&lwE$r+>pwgGq6ToI>&5tw^xlLQ7GC)oJ@FvNe z9@>s)S8~v*({)CvlmkgkF*}8i&%5|!r00HJrFOr2*1Si?=ktlVd3l}Gpr%>4Q99Li zT#G?*Q+?0S(mux8dY;n AK(82a??844Dl=XX<8DAeDXa_`OEwC*agLhU$GRD=~ic;J@( zRBHj^M#Mwg`B0C&&Al#)gnIJyIHWs%CwW8nIfr @ uR-?c}kIf y5;`{jYm*-tFYyS6!nw2L=>eDs2DU%sV@(Y7m@NeTP&pIy=ZL$hX=N1+MDrceE z#l^)KR!9iy9e9bz`i5Tl#2OJSQf-)er-z8OZh413FV6UbDvQ+Oj&9~I9~5|KhuTbZ zk??{Tv@zhnx#;u9aUmVE)fXafkk>10V>5yTi`biHEPL$AXX%YHc9@{T%_c=ZeKYIf zm=K2-{Xn47pU!Hn6(3O73>SMs6DsDK7{+9A0t0ou>GFEy5U_W!K1UM^Tj-eM89~31 z+D{zZ2@j&%{P84M3>O{Ld)dbN R+^vXajTzBi3AlbjE*0YRR zzH8O>_&)Q3K_9FtFkYjHkduw7#`PsTD=n<@1rhr4Po@$}-s-o%T}n+@{cQ)IT4@hW z9tsoy5{*6}sXkVLyQwAqyl14ev{Wy{I^(uKmIQNPi_LxkJ)$UE!Qy&f^M+b*)JfTI zRH&iTBUp5_$+}>j#zF)yPAWlJUmxxib5qf(7pPW(5no&_*;4&vLodlkuq=3yAv5T? ztETmP6er!Yc`q}eW=Z9WmYfh%ZKtfYzH=ksgH)#}!z-m<7$YjrVW>y}eWlNB-M^`< z{$jIil7GT$|K3@wtJxZw07 lOOIF|EWO 15KXmt>Xv)3BY_WbBwL(i#d$kkd_ z(6|A0D3u4^-aU9#*D8k2iN#o}hREVKMz _uVgBJ-4UAyxu6n1`;e~0E5=;f?r>C z%h-33X+Se_dOODET*3Udu&}Tuvbh^@$XA#>iTvU2>|70svsu%OPo_2}^h5H&kj`js z)N7p>RaxYk9PB%_(OWwG)IXpdKb^{2Z$+UHF8qx(839`qDdP`xbffp_geqzr8lC~R zd?-tk-WYi={dn}pHyvJ&5{0kO%eiTX4<9x!!4sfVRUbXwHQ8N!7Nyflvf3t`cVqS8 z*|H0*AEHsNh^5xR2Bg%masjFm{^rtfM)wMeQG2?os&_uM{4$qWuHs$CfuMwg2fe?n zt+@k#f@ $y9#Y&CQK?hIS7yIEhT-2AUDTsyAe~C@qk|0CP)J zQ4tSU|8!DN8-Yo@x-P`8pl!$2&?ew)mCP|X4P-?{v>Y Z?$L=K65$<}8}#4_3z6&OpLlh^40AbtG3konk|S{n)I(G4o%9)l9^% zuI5|_5}7aPmmqiV5@X3A1WeZKtE0y5cA-2C<8CFEV36DRZsj#%`7HC-jmu&zmgSS2 zoJ@Aif`P8^uV6*UddVL(npa}w7*erto<0m)+wYEw^}c=?&dRY(2uJ@ +cxr{{&gzh zciUH+6VdiV5gBrbg-;Uch7A+oorq9yL+dRE2Zs|;mRJI0x#Qi-n>?)q9>Y%Z;RKld zxIjFamcFDn>}d@jwF7CUFth9;FHdFKipO9};xk*IB90*OQwOZp?PZ-6nlKI6Ltw@0 zXl{KAW8c2q$e5TZRQjNbmP*e)R$JTuwK=LI9g{t5tgya?>P3tie68>Ngd@|+ gmc3NFEUUx4i6(zNL6mzZVOasH;sjrOt6?-Zmz6zQ3Pdyzu*H?bw4O z%k#2MCkB)GAW|qi)ZEsVw9UoklRX~aMwQLmg@=D6^(H7o0E0JCcf!DV8f~&oW?W|A zm>ib0yp(>8WZ*=nTUlAjuV1$USYRZR!4UUld`5@MqIBSM5%Y7CT4)Cchm5?uCmShF zm6eq@wJt^3Iy*1Ba|W?$kmwL`Y%NyyND}w%o=*I5r{){WUH9QNglU2uFqHrP!I2DB zwM-Vz_x0VIQBcrrFT)!Y2=yVL@G~PU0ZqN!e|1}J>yCTL&ruqB3ejW82gvC#a6U{2 zipN)w$;DKOM3O7+m?fJ;0vI( An-rJx?}v9+!D?Ck9H&w7qlgD@=I zYypM7T=L~@W4(q4^M+hraPkPmAXczb3d+(5J<1!Rmvr^?l44_HlfapGhteiM6rr{a z_Vh*ZoBKZZ*R9hVTFX6bh=(0N4G%vCo|qAheb0#+4t~*neT+!^1`79FId;rVnf|^> zQKd?OrBlfqwV}&j-qiaKnWzEwN7+1H5y;=gke)e{F{6415VbZP`gt9xR46)Ooy7qF zY&mKy>OA;$@U+U6T-tXH0(=D&W%>mtNuHozo_am{?7ZcpDjWrtrxLaO?HZH5SsV+j z$xw$K@!maE3R7eJ8Ak{RPyYP$jIBkc>Y7fp%`vIxoJMsZd+S3e-zn@f6Tt$VB(>hz zJq)0-Ry0jx`}`HrLDZ^Qv}PM+uC%n2Xm4*nH9}?p0l^$kPlmR(Ha#mh_mP*c0F+w< zvJ!?oOmBV!@JOhVpw!3u4hJ{n^`|NY rf}dRs?2 zT>dQng941#E0O}J%V6YLde~wrfzR1`EE|ncBlGU_8qyXLi0$Q-Mg}1vAvi59E!>a- zu=}TVjt$<~?`quEcEW&p@9?6oTV7^n=EGO7v{uiwq^k1u`8yio*AiOs1j_no z@k3Hf6?sydYc|-^v$72H-0T_a&=30H-2=JNC&Z}e#b0y86Z)*?EG&sck{f4dr*m&5 zB8Na2MSRzfh-3ouG^EBhZct8Le;ZnRsl5E5thV;VyIGWjn)IcPhe vZ^RwgRM|TfQ zDy;2%sC;*g-a%Bjh+=5i93~RAK;G~0cfNF;b?BnlAbbal%Yg!6=AgYoD@3uR&S8U` z!y)x?*i(X%pb^;+rt`ewzJAUonn6a95d)l^9rtfMWw}cU;Tf5JLl3;*tE|x@cLB9< zDTESYAt<*NBrh+qIOUT3eVR`F^!7E1CH+l53MWkCd+@`1T;ed1=xcbAzBY(F(0wXZ z7RO?AaD9AKR$rk{eSPZ?KUVaH*LKRPyV$5bPB3lJo(?6A|G7&au+F~a9T=$T_PM9Z z%X&9nGOc$>?bm+`%pJs%V2Fhg-1VS1BRAWHo$Yn7rBGsJmEcbh*_k{w=4E1`k#*>l zl$45zjbXygItanws&XP@LAkdS`hk%fMa(ZPI UNP$-J<2}e;CeMnfAI$EhCZ|B&(dy*7kxl>8WGt4hKO~ z47}(lzqqw*6FYGZeiscTq4iIsqX?9+KER{4`*flluLgp<{%FibH0m_}s;VTytWs+`7_UXt%Q z$A{5nD_ ZNVx>nv|N9InaB)S&Cp??|aI WWjdMF)zwZ2UinpsJB4yH3#C8w<^D>o?Lf(2&>F5_#?*#rs(==2 z3JTP4adB}amACf3cd8hWQf?`%gq9xW2mn~PC&rE9 mxJ#U%TO-C!Md?tm?0DXN~86+;p5Zf;NalGrKKejlm-JXr{~|?-0g4EtuPt$ z(Mdapw(DtY%Zxd>k+u;oGKi+BYA9Ngl?LctCNvsM+J`7Grx$p!Adp=Q5)+Mau#0YQ z`t~{jw&7;wO%Z0eD)4HM7@y^Fx*0X{Gf)xKDG)JWpjmnaX-sOB T{>G@XGWhrWMK4SD33$KoF14P8Wx=_E6clH0U+kp#YS&7$4i~p11$IH zDKafZvKntX43UX4BPC9aERA4>D5mKpKb47J8Ks^w&iS&_{<57%#2s=OqMSl12mv3< zcARGjw>Z#WYzs5f_So&Fpx-Xs#S`LL|BAt0Kg30{eUJ>tuR5X_>cwt2d{JT=$NBp? zG^c;*lUr+hY<2sb27RwD);w47$4}!^iF|{5_?KShiccw~sp%UFfFYBxK&!x=JDaF9 z8eue;1OtW*aKvcWSqY-_H1ywG6FTlRzQ R8R99C|){-L-eeRV%(slOC z% cI(@}BShv2rt`nMxfG!-6l_&8Z8PI;{j*S~b&)#EgfEx67YS{Uy9RUFv feXAVM7;V6O*9ZG8 z{!&*89*9A z7^D~=fLMTTas!!SWMsr(U|_(&!NI}s;K2ii$B!Q~01W^; l#~>M zm6a6(H#av}LRndvK}Sc2;m@Bx3{b!X5I{_Pe0(QFL`1-DLk6Ovq6|z-Obq}3{|8zB z1R#KzfWDg!vgYT{pC}4JVjx8z476!JKmalE@bGK~S}}j$zI_aD-@aw|{P{D(rAwC> zu3x_nb_US213-7r1PCA&kUPZ1#Zw k2`|sbsIsgCv&j12UOiT {S z8H9v{7+6_Z84?l_81(h^8LnKpl6vpny%>N1Vgj0${r&rQR!&Y%1`r0B#K_19X0x-i zgZZ~^-AV-rAf`u;9=U-`fLVzQKw=>GfBg7S7a)L`fbL=knLq$A0R#|}prGK1zkmPY zQ~@%Tg@xq_Kmaj`h=@$br3hrxzkmN2xVgFK0|XFrdV2b;A3uJ`1KnZx;>8Pww{PDv z0K*YX1H+U7Xxjl`IF L+k+r h5~@!|yoBO@aN6B84Iii*l?Gc&UcfB<58_wJn;P*L}{Z{IjgO-&gB z0s eWGrh*j%ZAra%?_LZ*05RRUb0_=9j~}dTY-|iyu3TaG{rfkAudgqIw6rwC z-@kvsrh*g$1Q4^mz5R5cZXS@pmoHx!9z1veR-~`5&+zHfCx*9g-!lCA^@|@MfS7 &CNX@Ab?mnIXOY$ zH2?kk_ldw@VgQB$1JHvEAkTpm0TmzM;NX}E5I`&-lZ1qXQh)yZdFbQEkCCrmzt#ta qCkxOi4}fl83v|v@pxZwI1Q-D0x2PKrYw5%Q0000 VzaL`3A0 zva<3i4i1h>K=E_J!onY@ xpwqyUVCptEPs#@xDf%aDPJ02qU>9334yg@lCG z0X_JD95Vm{h-8lelN%q9iamDhSkB|ek2M%*2pAa||G2uk76=LoE(RvkPo(Gt2q2O? z2K1B*&@&l8PX#m35ddTGp_i9eiiCv39%A(X1Q5|4117zkO`A3~e*XMfh+%+$ySsZX zu&|jzj9P#IBIq%ohXjEoTiM2q8!H$F0g#uMUu $@A0Vv2q3&3113F*4 n@-!$ WGOZ|fB?eq*qb+RT-L8&-$tsZfW ({SA-6#ft0AhmXEmvS{X;W(OVDKEUPZ$lN0Ro5#S{gc2%V2Um2kc~0Gp|hm(EtI& z1Wbkkr%#^_q-Lm*>N!w7M=j3*+rBI>U%nIo2p}e4FW3lJgNsu;BM+eG7=cw*7(f6q z0bAjEwCZAz>bcO+PzFv;PKxaXcD4Kg0*DD1ZJM;~Kat`&U>}PiDk_R%&jDNio&W*F zbp85uTUvJxN%0&zJ3BQz#|RKWOu**9I0GF3IiBO<;v%~Y0SF)_U@5}IKqo*i&w)k- z00Ib9Dzeja%z_lpfl5hGfdcBllA06&0*LAF-@kMpkO2lJ(Q3bZ`2rq4Au-1O0|XE# zDgL3Sr%X&t7|hJfh*AqIu^BdP+C=i85YSJ50RjlvPh|QroIC|ihm4GW0Rjl*vCo6e zQ?FjVBHL5Y82bSbKuo}H`xa_WB~imu8#ivGXiO5=TVV$XASO{!(d(pS=E3eMSZV|a zAQoO;-b;hQQ!ie;VA#BQGgU^9fiZRjAb^;Fb;UU# yftxj{5Q0D(OwARw@t zjAjc40C|X1PyPD!i)x+%M$QLqZEZ;q8z6wd9@Eg!_^70$RQ&1FCyG1;imie26cjYu z+uMUD guk*ymp(EBneCg;1&Ze&w*MLwDQ!?pFdv%TTd6gyu45f2!H^> zm>+X?cHX0^syYdnB>$3_#<6-1)}W<@r=XqD*Xil$81s1m0fco%Gb}7@ija^{H!w6v z&A=$hlGdIA+P5J)I~(iJJU{^9oP*ZX)a+tsXaDl&4{80-@87?JJ$K{A4O)9@C$Ngb zIgtVoKzNr!?Ay0b0_ec!AjeU2e4SG8`Sa(sKu_g_hKAx?4gnBAO!y3Na&mg1tgI{q z@)R&8{tdK;K#>4Se)972srWnv0ssL-^pc~QGiS~P7OSp&e0;K`4z5rG08 fb|h* zWx@OpA3msab8~A`qw$Q(Ltnpsy$!U3MOawaAR;1yq=qa&0Fk{AbM4x-3NK&2ya254 z9su*8J_iQ}12vK;s1ycz=pxWVAA!C5_{7A-2jrLo5I__!on5zX9Y3(Xas}3TwZIk& zC$P3L2gUd6F29g6s!1%YcQ`ePCbe0?;#o{QUd^(b3TqEu94jAVzBToY${kFYxy5 zTO(kI>jAsyVPC#{`3p23)ISmiVjfrz7Z@uqfl2r^FaX{HdldS>07wS5QO`w1MNw_B cGeCd=0K&9|^EfPl`~Uy|07*qoM6N<$f`4^S82|tP diff --git a/tools/sv/images/xen.png b/tools/sv/images/xen.png deleted file mode 100755 index 344c361b3cc1182bf22ab1da590936157f8e851d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10575 zcmW-nc{o)67sv0+oyA~mV<(g~OZHvN2+5L3Xoy@wlSm5L-JwKMDI}F{X|ZN1WC@eK zQjMZyZBxh+BD>%H{^ogR?sNb7Jaf2KoiW zgue{5006bGdu(WK(f$5wo10cGYLfUK0)S~Xkj53l;(!96*!wPDN7lx7W6y;mp3MDQ zGel|hJINXQshxS+m$g+ANfN~HNw@HmPbU;2gvNz3^Q?m7PD9tk`$r<0PR~p?3@Uf4 zUVV96$#&lf%iCFjQpcakENOS-m6X_j5UuszJN@amyN=H%;SOE?mdh6Nj`u|joGEK3 zYjrlW<^=a#`Fp9OaF5|p%iBpRnX1kH)2d;OCBYAlCW>rWFPZl;avVl8*Pe^~N?AMO zrrOBxl{^2} %3i$njZ8h#n1gI|M&ga z{n(HBdmk2k`u)d3uzpA&qYc||NU*S*r^<_b)*3SvCG&bzBsXx6OM%q8jH;5}lCI3d zmKMLJqB34U@Oq;5zfIZc4)2294?oaEZAFZ4ICuRz)jb$u#FGsCUXXtJnZLBxAtFZb zUxKkTx#m&EY_#V5R8;*5S)!k0b9LzFs+rZh%gQigEGL;Ia2RiwZ=}Ow0FPxahv6e` z>TtWiA+6xw)+FTICeXIoEFz| ~9z z5RfFRr9mJ9JPP8{swzTlcqfaG9M|nUd3Uv7lC5;wb=J2gSTZ}U5h?BneCxs>;3ke> zu7gfRC#j7xI(`kn&$ I6?L*m*itzOX!}oI%{Et-`!5w_$(4?6$zklqgkq?` zW3B@2F@|zgQD`^#7}TMKW7`^cIja2Fp{5vX4t(5YJ6+r?LNLp`w`oP^|EO{ptK#nm z<>X_W0xUUEAA+H~Hw3fejHG-2;sK1!l!&7M R`jg;T$9{ zaIU11J{H*>w`h@mf~4vRZGzu6b>^uPTn8ok_9cqiBBf}zY#&pbkbms$+qaEEYSm)d z!0y7EmVg4xC~|Xsj2SR5;MlkmF3=4j|0TRLT}_!nU$d$_*TNIRr;Cj{ 2F9-X2AKb@xVc>_blbT2t6a<2ruf2bDy2t4fw$WFB83R8FgM zeR8S#7g#|nV6Pjd?e+yb^Qr%$L*Ke@7Er7ammKfr*azY5h9#IXyr$vsd(k2{e_Yh+ zb=FX@IAokp%0s9me(yP`lc1bt4Wc zK0=(lwF5Ak9$>|Ox?pED1^o9+3|GTs>2YrAa@Y?Wyo@(RTs$Z%J39cA>*j>03*`2x zU3aiPK9(XP#Wuq$>xm;iT@}7f1XUfVYE7`5OgR1n)MsIJww?wY9mEkS4ZEvAD7tP| z4jUF$0WKf{P%|&a?&A?|w5aC37a{^|8^0^Lxk30`*Dhp2pnvH>9T6&gkKk}l-WRBG zp74Fe`410WHlN4L|1>TVNX kH6ksppUw`Hx`-(coN3 zg{OU=Khp>sm|9}qi99%+uP1IT)4LNhOQe6psrqAN92lI&Qu)xl@S6B2%O3d?c(G&*k~;cRW+MmA>sMcN=j{C1nVAi!zg zh=;z_5nL~6NWwe!9uE(nb)h!B1?FZH>Ls#ksiAu$O(MpGLgwOaR5bq!tJ~TxNA;bM z!UDFJmyd_X0#w-{u8?b2(JM)R7{c@5fWiho1R5EioLu8|60)GisRa+Eq{_pjzpvll zceHZ8X|it;EvU`>MTHw((Uox+N}j|c0j%0h*!}krMa4op8tugqgynVb{?0Ff+SFCf zYiFus7S%D5`r64ZxEYJqTW;M}YZ70PiU`AJJNS7?tZRxor&o5J z6Wd7X-&Imlg1vL+j?1q%H#+c65%Jk308?(Jr+B}zyPMmgn%deufMWWr6{(!bl~q(# z{nf-LvEzA2SlAKEsL4E)>*=zpJpBCLxR6p-?B#!cU-7{iED^z?SM`bOX3>x3V*4@! z{>!_ilVVJDTp!~d!Fdb|@)~S_7b75l|C3QsKZ$zsZ*H3Imr{GTCtcApen~-~tj=<~ zx_Y7;oi3D|SwN9K1i#hZ=ttkgfr}RfhIe0*dzlif5{wtn(QUwZB&@f$w>NNbo0Oit zDfgE tyJU#WG z@}mP4hhF@m?#3jd`|QL%8#yK^2|uECy#cO!r~b=_G35M=!^v;D6V_K2nyRX*n1>Dx zAB1e47xvIN1rMAK9FWjpM=SxF!q+c%JfvnuK-zPGQBg+!8WUF0JC9)enY6Ud*F8Nw zH-v?S%Q&sC=V!m~K1O$u93v1g7z}%aL|(dx#i1Lm(wEIA?E(IzhjEj4_VtNYwgR?5 zjSt~iYjTMlRFU<0WW<*z?}NN9)o2eL2m72>hH`lF^;R(ITUqXk%+qg;p`(k>OG+Fj zh8yDM`0rKZbbQwB?e4CQQ$AxNZaB7 zkApeWZ2X1J3`rsdXfuBz^H|J?U7(|@Y(xcExlf_r_oXo40j$C8cGy6ICuD#PoYK}W zt4zi~Rm*~TPfc0MBrBcwVN-pNcV#rE8vK3|_&UJd-CZ7}lrF8W{ Fjd|jH;%~+n?*mOVqytNOMkwm{Qgv-;p$ov zzdUCf{jD|Kmvu1-EL-e@ed0 }XWKpjUQMUAWF)R|5^A_(-UfT0_>P~1>sf_b!OHJknCTq&BTph{Xj zN5@=MLnBV8vytS)9O-_8J-eMbZpi#2rb6V6gKF}c5>}1I(SUbx-d`=6wd6*bBEvU0 zCKF&CpX@`#Rn$O>Xt0~Fudup4{CjHRv16s!%i5$alW)|x7_NR-`N3z6H?5L3w(2~e z#vFT8`0CZG`t0oNN7e@>?gD578hjGSS9cBvD}Qu_cJ+(aC9^PITXcehgHHk!3B>~8 zVEU!ZuVdYX6})_Wc$V;1XTP X4Q|iB%A)$@#v&=q+j r^s1^ERio1@rd?AA6?^zKg!daZ(~U#NUgh?%Ow; z)zGjmtE&3Ylp`>7iaW@JAO(g1y4zIQ%AQc1Q*SVJ_onsR>qw>`GRhh2RfvT!r$h^L za&mOoUh#xUt>h9dIfs%&=pG+kS1&0#CT2)$$Bv+V`}PTgE4T2K#b8>}&ZLdCsc&r= z*LQf=D6CEonbXu&0&XV8&HYH{7wW(`+8RqpTw6{|OxzED-Qcf&BcEMFRpwLcy3?yb z)X~jjiHI3IN~`A2ixym3S=qq%kCH=5lt4!{RVZ@zzNgqen=J4f0UCd>g+kfS7cmo> zCyT--JaOQMnQReH<@Z#wo2sI!CU?T=$LBbU1yg1~0lx3JF!(by?uJpQD<;3gkej(5 zGF%rQd!UN4*dU5cSmc%^;w31#PyX5tpOw(jS2 SYw2FDsybR^eeRln+!L%!Jd=Z^^FDDxv*(g%NV@n)Bz{=&@Bhx_f$B z$z5WCa45f_SvFvTVQbCTR95~izjR5ESp^cArv;1tHbjiS*MRDi@r;FHm@rQ?o1Gb~ z{Xk)e%>(9|;~X|Yo}#dQJIPWK*VBkqp}sUfJ$>0il3#OAB1j34VjFl6+H|!B8$$=G zAt ?fo#j@j~@jX$7@$P z!^20RZw B( zA#O;NYZq?fJ5XJC=BTGM$fxE3r6yb}C}@;wCGsdlyYt9=CXhAY#mTLw6=_2Uxk0Y3 zT40p(=I@D#^Oet@H35s_zSvWRCJnBl>@({^va)OU?%g{>mZT+fIQY<9e1!_$gZPe> z?jY0$T~qD|IeK*bA?Hk;P~V9mQV5SP!J}}7Hno*2tp(Zn<2*>}oZ+k5IuZ}DajDYx zcEnglPPi$s-&CQr6@g)TQpP$J=|54C(Il#qGAGa;u5($Q)%%S1f}jxf%U6(50cN+b zojqX@ai%_2>R9t8h}I2efLvcyQh#3`k3(C0<)RWdrGiCT-V+^N!&CHvFW7}ODB$3x z>QWHzdEkI5_4r*qW8)E=6Fro}e@Z06NOVkd`&f+cm!W>7db &5<5xkQ(PbY@ k3Z(rJ>rTu3NcAV;c4$pVDkLc8waUTz|LkFdHKz#nc;>omayZ(8GOXZ zFBpc;wY9Z{aH=n _O8v?#UIhEpU1E=zt6Fz4$>>=f_dYC z+ewNbn4-byFXYe5t4{ew$%8o{8~H2&Eo|^HI?Hg?R^MTV&`w?XzUp|s!yry5)@4fG zVBfxSB2k)wull~@(DSAE_6t&zE(I3CccSiMwK^U5?oE^x7TyX>(q^$TSxGO>*-{;S z=&OImKRmo$9rC$(@7o$_or_6;x#@mbc}5Ys>wjj;FP Sy#Hgy}P@Z zMI^2tw@q33KL3x`DI$8sK;DaCaN+iuSqwG}AM*;xdp!)Cl3{u(6_MwNrjXwaYI?Z< zZQv8D_L~OttDF#DL;SL9s$GL{JBnZ7fMfOuXIP#X(k!~&kA NN2dgGqhl$x&b9Vf$3c8gyaL@8aI6L!zHOd4fHVf(&cg z3ove^T`?yUL+TSSM&XBEETOspt0!7~hwMd)rASJtvoWqehPP!Y^DHSzLRl+8&1XnS zxmpJa!5_F!GP-af&$fdyoyMpzr0zG6?KDq7o{|uwcd#IQ1v`vlIX*26wFaQ0+en(B z?ww9Z5-X_eeNRukp!oqXyN2qnkVd|735O~Pf-AwJDIm}iIvPpo zKXFcx8$bQMTMxCp#RFMD {?S)wu-BsDz{-~&^MzB)UTum)4@_T!x z-LJQ|6g8aSsiIR34h|! *Ck#BA_zA zvs8$t!Ovoy7D!8i1s2XJYtl;yIRK(g5LaUh$IyF;{hIwBKD6+cVSA6(B&HXs46{ID zcF^0KF%1tMq>>{t@J079hEBAB@7g|fHcwcb#m`5OVasF3eqZ8rweTE!s31Q<$WRhW z4YgxMCSGpg>%SO?&9O&BM3 ;~XC=jd|V zavfiKof?!ZJ&9tu+Wk4yQJ^|TcLsN0-oye
_g3N2ewId=+6}QY!H%?7X{-}?cf1nBGoL0DM{_1h;La-D)PQ%D37nDT4 zw4F0DGHQZJzvYWVd7yE=xod_x-bPJHn{tiW5^h+|#iLlmGql4V2-`qU&mTy|xAa#X zyADU4DlRSE#Mo}Tj2Z!dHhOz|*KyT5H>ISdlL^W%=3%5jp4;$6>>;v#Ucr=p4ip`x zdWq-hbe3RX_b)`~<+^NjJ CahFe9wS5B=xLL51!1 z#cLKi*9MaxDXili8OXvHWKSTsoxr_o1#uFIi><@j3^sML<(%LZ{uCbgXT!?sY7%zf zVAzGsOj_n4BdFP*P`!BwSXZ$<@5$*L#j0H4g_OK;E6c*nM4@aU>V0{&a2COym4z+n zH;rG?(L6OVTo T8P7lI2X!sgA0ILc z9LuD*VK}(e7jNE7?O+Gz#4i2WYMU-58SY9^aRP3c%?pf$3q#vE 8u*fi^(n!X|AZdS!k?-z zEq^{W#Qme*|0GC1$g8#}STtj<6aNhB*dT3cT04TY<)GBzj#Gi2q&oavSO~)o{T1#z zxXaXCxZTdI!~M+Qi^KFOLdZcMjC)mQ)PH{7#r9u^6c$qrzep(@dq>;Zc{^@#5<^x# z0iG(;1jUSv0m}Tq+}ug-Pr_CxYwbx k)Qi^JiTu3Wv^gr&SZ z3|(?BaC-``46@v>$gzJXwhs=j5p;g}Vy5 j}HVKG{Lk+c5 zRwclasmjj-_O^5^!J)U!r>Cc7;HpjudJa#>{0VIDSk~_($S_W%Ph*Xs?&)`*(s`VF z-i_g%GAO9IWdZgNsH%X|H?`OtQ{oNdv;W_;$X$;`!;ZiU)A~@i3cl_Uu5wDM@{eGj z`7-K?h<8h9AEKWUUDsxlv0i#>0)5~WAavK
ZqaQT$fzl&?hXVq#;uS$XHZXI<8wotG1Jl9a5sAs7_daP=r^(2szsSo;yR-# zdkH_f-n?1IhTyDHjw>q400XAh9Q9dao!Lf!0B1KfH7Rj@T~wX(|H?41dvy7AfZU!< zO)afwD@#k+7<~?z-XhP4Oqp2+Q|sk)2JfT21{p_=b?&~cNS1lg2G734X>NB%j$F+; z+$#nJEdc|6F(81!9lC@Mj$p-ZWoKy6()q`}`cPjt!*c6j$lsGdsik4CM*^a;2gTzs zkRtZ*?%lg;MK!7A_JCm!tF6Y~)ARHE+S=MDj%&`{T~=^rU^uj}zR$yBQHwpRB`qhn z IP=D~LU@t>f|Gj!MKl zwNrO<8Ew%OiU*pI8bUu_+5m6-jixNc-Rpsv?Su^N=F-gB(rd~}N`HC!ELK32DW?fO zl_czcgmbW!I5Cl|i6bwh9ACi&*I+~b`d~ejFCv-wJ^XG+ilwr$@{o&*%dfAaqoW|< zn^k3$95Y;@FeN3$-o~c&6a?l 9pQTQI>s3+;__*b;FH&K-dMfupk6Oi)@qLUkegQI@r zJSr|8-?e*p#|Yb%$0jBADKe_d7OUVYTk3J53XDvTO~K)RNsO~2KyD>}=PvSp9q5m~ zeO7$|RWtqzhn0=i8guLxTCWYh>%KNGFK T8_-2q|IcbuqXHL-8*p; zWtOe%R=0 7D^ilFpJ2b#@LVfYJRzeh zbnJd~92hx(`c5EqKGn@>|0atSE5TS;$BJL`=iKC}`y@2;G6BiBMm AksH7G7^=vjq3*NtW~+b z+!%7%McVIXj Qp>eibMa41RWt=&aWg z8;nHyC|HhNaO<-q($n#O<%`y1#L}+ck+>jo(H^qK_qPa4Zjt}g-5rx*k%&j%y;kfE z4 Mm+ ya9R^9`lVh> zeDz}T#i;gwSdcl1tw)?W1vLJuiZwu`?~|#i={tQrJsgeF-0A3PKejWu)CP)dyOx`~ zD8jI{y3=eT{Tr1OhA?TJmwiL9M8bq>9108#kOM|o<<_vWbft{ntcP%GQOiU58!`9t zSuTQg7PZG!?#ZFR1(WMua?<8-;zzAWy^oPN4DGuUvW+tE*c_=EMQ#$j0*E1Hi7#Kj zj++@BRVKLcnT4g_1y9g=RoP#)upvuL%-~?GbJ{7z+uAgR@Z|Q6zN}BuEDtH5G$9;v zU$8-|8h&iionyC1U=)fQ>@kmhCb0Y;>A|7$Tq$QFyrj*#E8SzgAEP29$c<8=d*68o z(T8@Zs1W3ufvAU4Eb@V)V+(bgYLRLYJjqgh!y-5j-x=6_g6J $zPe@&^ZrJBKcL7Tv{1;QBpLLI`WZ1SsY~wck -m>e z-s`#<#yb!zOOWEWom;kREM30mD)_bAHNyg}#7bdKc!EI@ZwZ)d-^Jm{0PJ{P1?F*G zzeyC`5vcPMV;DAvG46XP(MpRq$I=CiMwU0$S2qzE57tg^Zu+|~aiZNlDIU4WZ?9J1 z>q7Y+9TKe4YyJPQ&N`?y5%=@&N$&dt&`TjcXYZyvQvrX94H13H^l-!KZ}jv;7iS_1 z&v?&rIhdMrvBx2x(>$Xwei<9=xQ_8dD@{&{n5_aI?bw4Q_*+ to~gNVn=I0ALFOcHgp2-|gD(`8L5kfonsl NK+KC93uvEQjX^mZ7s*twsLc}b8v*Zu^Yls1hYE@lA2ptKWOA& zdOFVR`V6WskQ@6q;r2RYU>r4-CuqCKh*7Txa;u#4ezBcdc(WSKVl~S(Fpt@oTsOgK z4VPtjWrK=Npqare7 iz1kN*P506T;S~ zO L40u4vu~<#=HB7HIM&-e; zLa^Zf$D0 lF*AW$t;L?;BluIGZCAn2 zRD9?!;`z<9Dh94^2;)b<1)HsBCFd#J2YaAovzE5DDj8;n7QOyL9&2PDRR&$`uSwjN z>=TOsrH=+FrBr{p0m>}%a?+j=p3q9|m1)P~5M{1!2<0oc^#$*-2N*|dZkEM6IP~Ev zrxm9zbqOr(F6H1BBMlsg|D95++cF^-`~@s6*5KHjz`I=m;v!u+?`?VV=#$hIQN)l= zH7c_Cu!iZ^$}sr=3?9Qx5JUA7aSmsw8=+9)<~FwRid M)rs1Hn`3s^67ItKz}j!9|m4-Pt_CnAA8wtH " ) - -from xen.sv.Main import Main, TwistedAdapter - -main = Main() -request = TwistedAdapter( req ) -main.do_POST( request ) -%> - - - XenSV - - - - - - - -- 1.7.2.5