AƱadido cliente en python jorjor
authordanigm <danigm@arch_box>
Thu, 12 Jun 2008 21:13:14 +0000 (23:13 +0200)
committerdanigm <danigm@arch_box>
Thu, 12 Jun 2008 21:13:14 +0000 (23:13 +0200)
python/cliente.py [new file with mode: 0644]
python/clienteSubastas_i.py [new file with mode: 0644]
python/server.ior [new file with mode: 0644]
python/subastas.idl [new file with mode: 0644]
python/subastas/__init__.py [new file with mode: 0644]
python/subastas__POA/__init__.py [new file with mode: 0644]
python/subastas_idl.py [new file with mode: 0644]
server.ior

diff --git a/python/cliente.py b/python/cliente.py
new file mode 100644 (file)
index 0000000..7099199
--- /dev/null
@@ -0,0 +1,97 @@
+#!/usr/bin/python
+
+import sys
+import CORBA, subastas
+import PortableServer
+from clienteSubastas_i import *
+
+orb = CORBA.ORB_init()
+ior = open('../server.ior').readline()
+
+gestor_subasta = orb.string_to_object(ior)
+
+poa = orb.resolve_initial_references("RootPOA")
+poa._get_the_POAManager().activate()
+
+
+def crear_cliente(id, poa):
+    cl = clienteSubastas_i(id)
+    cl1 = poa.servant_to_reference(cl)
+    return cl1
+
+subastas = gestor_subasta.localizarSubasta('')
+try:
+    nombre = sys.argv[1]
+except:
+    nombre = raw_input("nombre del cliente: ")
+cl = crear_cliente(nombre, poa)
+
+while True:
+    comando = raw_input(">>")
+    if comando.split()[0] == 'salir':
+        break
+    elif comando.split()[0] == 'inscribir':
+        subasta = subastas[int(comando.split()[1])]
+        subasta.inscribirCliente(cl)
+    elif comando.split()[0] == 'pujar':
+        subasta = subastas[int(comando.split()[1])]
+        valor = float(comando.split()[2])
+        if subasta.pujar(valor, cl):
+            print "Vas ganando"
+        else: 
+            print "No es suficiente"
+    elif comando.split()[0] == 'ultima':
+        subasta = subastas[int(comando.split()[1])]
+        subasta.ultimaPuja(cl)
+        print "Has dejado de pujar"
+
+    elif comando.split()[0] == 'buscar':
+        try:
+            desc = comando.split()[1]
+        except:
+            desc = ''
+        subastas = gestor_subasta.localizarSubasta(desc)
+        for i,s in enumerate(subastas):
+            print i, s._get_descripcion(), s._get_estado()
+
+    elif comando.split()[0] == 'ganador':
+        subasta = subastas[int(comando.split()[1])]
+        print subasta.ganador()._get_identificacion()
+
+    elif comando.split()[0] == 'ganador_prov':
+        subasta = subastas[int(comando.split()[1])]
+        print subasta._get_ganador_provisional()._get_identificacion()
+
+    elif comando.split()[0] == 'estado':
+        subasta = subastas[int(comando.split()[1])]
+        print subasta._get_estado()
+
+    elif comando.split()[0] == 'valor':
+        subasta = subastas[int(comando.split()[1])]
+        print subasta._get_valor()
+
+    elif comando.split()[0] == 'clientes':
+        subasta = subastas[int(comando.split()[1])]
+        clientes = subasta._get_clientes()
+        for i, c in enumerate(clientes):
+            print i, c._get_identificacion()
+
+    elif comando.split()[0] == 'help':
+        help_str = '''
+        COMANDOS DISPONIBLES
+        --------------------
+        buscar desc -> muestra la lista de subastas
+        ganador id -> muestra el ganador de una subasta
+        inscribir id -> te inscribe en una puja
+        pujar id cantidad -> puja cantidad en la puja con id
+        ultima id -> dejas de pujar en la puja id
+        ganador_prov id -> muestra el ganador provisional
+        estado id -> muestra el estado de una puja
+        valor id -> muestra el valor actual de una puja
+        clientes id -> muestra los clientes que hay en una puja
+        salir -> sale del cliente
+        help -> muestra esta ayuda
+
+        '''
+        print help_str
+
diff --git a/python/clienteSubastas_i.py b/python/clienteSubastas_i.py
new file mode 100644 (file)
index 0000000..4d6f66a
--- /dev/null
@@ -0,0 +1,15 @@
+import subastas__POA
+
+class clienteSubastas_i(subastas__POA.clienteSubastas):
+    def __init__(self, id):
+        self.identificacion = id
+    
+    def finSubasta(self):
+        pass
+
+    def nuevoValor(self, valor):
+        print "NUEVO VALOR: ", valor
+
+    def _get_identificacion(self):
+        return self.identificacion
+
diff --git a/python/server.ior b/python/server.ior
new file mode 100644 (file)
index 0000000..6ec2662
--- /dev/null
@@ -0,0 +1 @@
+IOR:000000000000002049444c3a73756261737461732f676573746f7253756261737461733a312e3000000000010000000000000082000102000000000a3132372e302e302e3100ad0a00000031afabcb00000000207e88189f00000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
diff --git a/python/subastas.idl b/python/subastas.idl
new file mode 100644 (file)
index 0000000..b3f8563
--- /dev/null
@@ -0,0 +1,46 @@
+module subastas{
+
+
+    interface clienteSubastas{
+        readonly attribute string identificacion;
+        void finSubasta();
+        void nuevoValor(in float valor);
+    };
+
+    typedef sequence<clienteSubastas> lista_clientes;
+    interface coordinadorSubasta{
+        /** 
+         * coordinadorSubasta: interfaz de objetos que gestionan el
+         * desarrollo de la subasta de cada bien subastado por la empresa.
+
+         * La subasta pasara por tres estados:
+         *  Inscripcion
+         *  Abierta
+         *  Cerrada
+         * 
+         */
+        
+        readonly attribute clienteSubastas ganador_provisional;
+        readonly attribute lista_clientes clientes;
+
+        readonly attribute float valor;
+        readonly attribute string descripcion;
+        // Inscripcion -> Abierta -> Cerrada
+        readonly attribute string estado;
+
+        void inscribirCliente(in clienteSubastas cl);
+        void abrirSubasta();
+        boolean pujar(in float cantidad, in clienteSubastas cl);
+        void ultimaPuja(in clienteSubastas cl);
+        clienteSubastas ganador();
+        void cerrarSubasta();
+    };
+
+    typedef sequence<coordinadorSubasta> lista_subastas;
+    interface gestorSubastas{
+        coordinadorSubasta crearSubasta(in float valor, in string desc, in long tiempo);
+        void destruirSubasta(in coordinadorSubasta cs);
+        lista_subastas localizarSubasta(in string palabra);
+    };
+
+};
diff --git a/python/subastas/__init__.py b/python/subastas/__init__.py
new file mode 100644 (file)
index 0000000..6bfb7a2
--- /dev/null
@@ -0,0 +1,13 @@
+# DO NOT EDIT THIS FILE!
+#
+# Python module subastas generated by omniidl
+
+import omniORB
+omniORB.updateModule("subastas")
+
+# ** 1. Stub files contributing to this module
+import subastas_idl
+
+# ** 2. Sub-modules
+
+# ** 3. End
diff --git a/python/subastas__POA/__init__.py b/python/subastas__POA/__init__.py
new file mode 100644 (file)
index 0000000..d347cda
--- /dev/null
@@ -0,0 +1,13 @@
+# DO NOT EDIT THIS FILE!
+#
+# Python module subastas__POA generated by omniidl
+
+import omniORB
+omniORB.updateModule("subastas__POA")
+
+# ** 1. Stub files contributing to this module
+import subastas_idl
+
+# ** 2. Sub-modules
+
+# ** 3. End
diff --git a/python/subastas_idl.py b/python/subastas_idl.py
new file mode 100644 (file)
index 0000000..1d4bc44
--- /dev/null
@@ -0,0 +1,255 @@
+# Python stubs generated by omniidl from subastas.idl
+
+import omniORB, _omnipy
+from omniORB import CORBA, PortableServer
+_0_CORBA = CORBA
+
+_omnipy.checkVersion(3,0, __file__)
+
+
+#
+# Start of module "subastas"
+#
+__name__ = "subastas"
+_0_subastas = omniORB.openModule("subastas", r"subastas.idl")
+_0_subastas__POA = omniORB.openModule("subastas__POA", r"subastas.idl")
+
+
+# interface clienteSubastas
+_0_subastas._d_clienteSubastas = (omniORB.tcInternal.tv_objref, "IDL:subastas/clienteSubastas:1.0", "clienteSubastas")
+omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"] = _0_subastas._d_clienteSubastas
+_0_subastas.clienteSubastas = omniORB.newEmptyClass()
+class clienteSubastas :
+    _NP_RepositoryId = _0_subastas._d_clienteSubastas[1]
+
+    def __init__(self, *args, **kw):
+        raise RuntimeError("Cannot construct objects of this type.")
+
+    _nil = CORBA.Object._nil
+
+
+_0_subastas.clienteSubastas = clienteSubastas
+_0_subastas._tc_clienteSubastas = omniORB.tcInternal.createTypeCode(_0_subastas._d_clienteSubastas)
+omniORB.registerType(clienteSubastas._NP_RepositoryId, _0_subastas._d_clienteSubastas, _0_subastas._tc_clienteSubastas)
+
+# clienteSubastas operations and attributes
+clienteSubastas._d__get_identificacion = ((),((omniORB.tcInternal.tv_string,0),),None)
+clienteSubastas._d_finSubasta = ((), (), None)
+clienteSubastas._d_nuevoValor = ((omniORB.tcInternal.tv_float, ), (), None)
+
+# clienteSubastas object reference
+class _objref_clienteSubastas (CORBA.Object):
+    _NP_RepositoryId = clienteSubastas._NP_RepositoryId
+
+    def __init__(self):
+        CORBA.Object.__init__(self)
+
+    def _get_identificacion(self, *args):
+        return _omnipy.invoke(self, "_get_identificacion", _0_subastas.clienteSubastas._d__get_identificacion, args)
+
+    def finSubasta(self, *args):
+        return _omnipy.invoke(self, "finSubasta", _0_subastas.clienteSubastas._d_finSubasta, args)
+
+    def nuevoValor(self, *args):
+        return _omnipy.invoke(self, "nuevoValor", _0_subastas.clienteSubastas._d_nuevoValor, args)
+
+    __methods__ = ["_get_identificacion", "finSubasta", "nuevoValor"] + CORBA.Object.__methods__
+
+omniORB.registerObjref(clienteSubastas._NP_RepositoryId, _objref_clienteSubastas)
+_0_subastas._objref_clienteSubastas = _objref_clienteSubastas
+del clienteSubastas, _objref_clienteSubastas
+
+# clienteSubastas skeleton
+__name__ = "subastas__POA"
+class clienteSubastas (PortableServer.Servant):
+    _NP_RepositoryId = _0_subastas.clienteSubastas._NP_RepositoryId
+
+
+    _omni_op_d = {"_get_identificacion": _0_subastas.clienteSubastas._d__get_identificacion, "finSubasta": _0_subastas.clienteSubastas._d_finSubasta, "nuevoValor": _0_subastas.clienteSubastas._d_nuevoValor}
+
+clienteSubastas._omni_skeleton = clienteSubastas
+_0_subastas__POA.clienteSubastas = clienteSubastas
+omniORB.registerSkeleton(clienteSubastas._NP_RepositoryId, clienteSubastas)
+del clienteSubastas
+__name__ = "subastas"
+
+# typedef ... lista_clientes
+class lista_clientes:
+    _NP_RepositoryId = "IDL:subastas/lista_clientes:1.0"
+    def __init__(self, *args, **kw):
+        raise RuntimeError("Cannot construct objects of this type.")
+_0_subastas.lista_clientes = lista_clientes
+_0_subastas._d_lista_clientes  = (omniORB.tcInternal.tv_sequence, omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"], 0)
+_0_subastas._ad_lista_clientes = (omniORB.tcInternal.tv_alias, lista_clientes._NP_RepositoryId, "lista_clientes", (omniORB.tcInternal.tv_sequence, omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"], 0))
+_0_subastas._tc_lista_clientes = omniORB.tcInternal.createTypeCode(_0_subastas._ad_lista_clientes)
+omniORB.registerType(lista_clientes._NP_RepositoryId, _0_subastas._ad_lista_clientes, _0_subastas._tc_lista_clientes)
+del lista_clientes
+
+# interface coordinadorSubasta
+_0_subastas._d_coordinadorSubasta = (omniORB.tcInternal.tv_objref, "IDL:subastas/coordinadorSubasta:1.0", "coordinadorSubasta")
+omniORB.typeMapping["IDL:subastas/coordinadorSubasta:1.0"] = _0_subastas._d_coordinadorSubasta
+_0_subastas.coordinadorSubasta = omniORB.newEmptyClass()
+class coordinadorSubasta :
+    _NP_RepositoryId = _0_subastas._d_coordinadorSubasta[1]
+
+    def __init__(self, *args, **kw):
+        raise RuntimeError("Cannot construct objects of this type.")
+
+    _nil = CORBA.Object._nil
+
+
+_0_subastas.coordinadorSubasta = coordinadorSubasta
+_0_subastas._tc_coordinadorSubasta = omniORB.tcInternal.createTypeCode(_0_subastas._d_coordinadorSubasta)
+omniORB.registerType(coordinadorSubasta._NP_RepositoryId, _0_subastas._d_coordinadorSubasta, _0_subastas._tc_coordinadorSubasta)
+
+# coordinadorSubasta operations and attributes
+coordinadorSubasta._d__get_ganador_provisional = ((),(omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"],),None)
+coordinadorSubasta._d__get_clientes = ((),(omniORB.typeMapping["IDL:subastas/lista_clientes:1.0"],),None)
+coordinadorSubasta._d__get_valor = ((),(omniORB.tcInternal.tv_float,),None)
+coordinadorSubasta._d__get_descripcion = ((),((omniORB.tcInternal.tv_string,0),),None)
+coordinadorSubasta._d__get_estado = ((),((omniORB.tcInternal.tv_string,0),),None)
+coordinadorSubasta._d_inscribirCliente = ((omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"], ), (), None)
+coordinadorSubasta._d_abrirSubasta = ((), (), None)
+coordinadorSubasta._d_pujar = ((omniORB.tcInternal.tv_float, omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"]), (omniORB.tcInternal.tv_boolean, ), None)
+coordinadorSubasta._d_ultimaPuja = ((omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"], ), (), None)
+coordinadorSubasta._d_ganador = ((), (omniORB.typeMapping["IDL:subastas/clienteSubastas:1.0"], ), None)
+coordinadorSubasta._d_cerrarSubasta = ((), (), None)
+
+# coordinadorSubasta object reference
+class _objref_coordinadorSubasta (CORBA.Object):
+    _NP_RepositoryId = coordinadorSubasta._NP_RepositoryId
+
+    def __init__(self):
+        CORBA.Object.__init__(self)
+
+    def _get_ganador_provisional(self, *args):
+        return _omnipy.invoke(self, "_get_ganador_provisional", _0_subastas.coordinadorSubasta._d__get_ganador_provisional, args)
+
+    def _get_clientes(self, *args):
+        return _omnipy.invoke(self, "_get_clientes", _0_subastas.coordinadorSubasta._d__get_clientes, args)
+
+    def _get_valor(self, *args):
+        return _omnipy.invoke(self, "_get_valor", _0_subastas.coordinadorSubasta._d__get_valor, args)
+
+    def _get_descripcion(self, *args):
+        return _omnipy.invoke(self, "_get_descripcion", _0_subastas.coordinadorSubasta._d__get_descripcion, args)
+
+    def _get_estado(self, *args):
+        return _omnipy.invoke(self, "_get_estado", _0_subastas.coordinadorSubasta._d__get_estado, args)
+
+    def inscribirCliente(self, *args):
+        return _omnipy.invoke(self, "inscribirCliente", _0_subastas.coordinadorSubasta._d_inscribirCliente, args)
+
+    def abrirSubasta(self, *args):
+        return _omnipy.invoke(self, "abrirSubasta", _0_subastas.coordinadorSubasta._d_abrirSubasta, args)
+
+    def pujar(self, *args):
+        return _omnipy.invoke(self, "pujar", _0_subastas.coordinadorSubasta._d_pujar, args)
+
+    def ultimaPuja(self, *args):
+        return _omnipy.invoke(self, "ultimaPuja", _0_subastas.coordinadorSubasta._d_ultimaPuja, args)
+
+    def ganador(self, *args):
+        return _omnipy.invoke(self, "ganador", _0_subastas.coordinadorSubasta._d_ganador, args)
+
+    def cerrarSubasta(self, *args):
+        return _omnipy.invoke(self, "cerrarSubasta", _0_subastas.coordinadorSubasta._d_cerrarSubasta, args)
+
+    __methods__ = ["_get_ganador_provisional", "_get_clientes", "_get_valor", "_get_descripcion", "_get_estado", "inscribirCliente", "abrirSubasta", "pujar", "ultimaPuja", "ganador", "cerrarSubasta"] + CORBA.Object.__methods__
+
+omniORB.registerObjref(coordinadorSubasta._NP_RepositoryId, _objref_coordinadorSubasta)
+_0_subastas._objref_coordinadorSubasta = _objref_coordinadorSubasta
+del coordinadorSubasta, _objref_coordinadorSubasta
+
+# coordinadorSubasta skeleton
+__name__ = "subastas__POA"
+class coordinadorSubasta (PortableServer.Servant):
+    _NP_RepositoryId = _0_subastas.coordinadorSubasta._NP_RepositoryId
+
+
+    _omni_op_d = {"_get_ganador_provisional": _0_subastas.coordinadorSubasta._d__get_ganador_provisional, "_get_clientes": _0_subastas.coordinadorSubasta._d__get_clientes, "_get_valor": _0_subastas.coordinadorSubasta._d__get_valor, "_get_descripcion": _0_subastas.coordinadorSubasta._d__get_descripcion, "_get_estado": _0_subastas.coordinadorSubasta._d__get_estado, "inscribirCliente": _0_subastas.coordinadorSubasta._d_inscribirCliente, "abrirSubasta": _0_subastas.coordinadorSubasta._d_abrirSubasta, "pujar": _0_subastas.coordinadorSubasta._d_pujar, "ultimaPuja": _0_subastas.coordinadorSubasta._d_ultimaPuja, "ganador": _0_subastas.coordinadorSubasta._d_ganador, "cerrarSubasta": _0_subastas.coordinadorSubasta._d_cerrarSubasta}
+
+coordinadorSubasta._omni_skeleton = coordinadorSubasta
+_0_subastas__POA.coordinadorSubasta = coordinadorSubasta
+omniORB.registerSkeleton(coordinadorSubasta._NP_RepositoryId, coordinadorSubasta)
+del coordinadorSubasta
+__name__ = "subastas"
+
+# typedef ... lista_subastas
+class lista_subastas:
+    _NP_RepositoryId = "IDL:subastas/lista_subastas:1.0"
+    def __init__(self, *args, **kw):
+        raise RuntimeError("Cannot construct objects of this type.")
+_0_subastas.lista_subastas = lista_subastas
+_0_subastas._d_lista_subastas  = (omniORB.tcInternal.tv_sequence, omniORB.typeMapping["IDL:subastas/coordinadorSubasta:1.0"], 0)
+_0_subastas._ad_lista_subastas = (omniORB.tcInternal.tv_alias, lista_subastas._NP_RepositoryId, "lista_subastas", (omniORB.tcInternal.tv_sequence, omniORB.typeMapping["IDL:subastas/coordinadorSubasta:1.0"], 0))
+_0_subastas._tc_lista_subastas = omniORB.tcInternal.createTypeCode(_0_subastas._ad_lista_subastas)
+omniORB.registerType(lista_subastas._NP_RepositoryId, _0_subastas._ad_lista_subastas, _0_subastas._tc_lista_subastas)
+del lista_subastas
+
+# interface gestorSubastas
+_0_subastas._d_gestorSubastas = (omniORB.tcInternal.tv_objref, "IDL:subastas/gestorSubastas:1.0", "gestorSubastas")
+omniORB.typeMapping["IDL:subastas/gestorSubastas:1.0"] = _0_subastas._d_gestorSubastas
+_0_subastas.gestorSubastas = omniORB.newEmptyClass()
+class gestorSubastas :
+    _NP_RepositoryId = _0_subastas._d_gestorSubastas[1]
+
+    def __init__(self, *args, **kw):
+        raise RuntimeError("Cannot construct objects of this type.")
+
+    _nil = CORBA.Object._nil
+
+
+_0_subastas.gestorSubastas = gestorSubastas
+_0_subastas._tc_gestorSubastas = omniORB.tcInternal.createTypeCode(_0_subastas._d_gestorSubastas)
+omniORB.registerType(gestorSubastas._NP_RepositoryId, _0_subastas._d_gestorSubastas, _0_subastas._tc_gestorSubastas)
+
+# gestorSubastas operations and attributes
+gestorSubastas._d_crearSubasta = ((omniORB.tcInternal.tv_float, (omniORB.tcInternal.tv_string,0), omniORB.tcInternal.tv_long), (omniORB.typeMapping["IDL:subastas/coordinadorSubasta:1.0"], ), None)
+gestorSubastas._d_destruirSubasta = ((omniORB.typeMapping["IDL:subastas/coordinadorSubasta:1.0"], ), (), None)
+gestorSubastas._d_localizarSubasta = (((omniORB.tcInternal.tv_string,0), ), (omniORB.typeMapping["IDL:subastas/lista_subastas:1.0"], ), None)
+
+# gestorSubastas object reference
+class _objref_gestorSubastas (CORBA.Object):
+    _NP_RepositoryId = gestorSubastas._NP_RepositoryId
+
+    def __init__(self):
+        CORBA.Object.__init__(self)
+
+    def crearSubasta(self, *args):
+        return _omnipy.invoke(self, "crearSubasta", _0_subastas.gestorSubastas._d_crearSubasta, args)
+
+    def destruirSubasta(self, *args):
+        return _omnipy.invoke(self, "destruirSubasta", _0_subastas.gestorSubastas._d_destruirSubasta, args)
+
+    def localizarSubasta(self, *args):
+        return _omnipy.invoke(self, "localizarSubasta", _0_subastas.gestorSubastas._d_localizarSubasta, args)
+
+    __methods__ = ["crearSubasta", "destruirSubasta", "localizarSubasta"] + CORBA.Object.__methods__
+
+omniORB.registerObjref(gestorSubastas._NP_RepositoryId, _objref_gestorSubastas)
+_0_subastas._objref_gestorSubastas = _objref_gestorSubastas
+del gestorSubastas, _objref_gestorSubastas
+
+# gestorSubastas skeleton
+__name__ = "subastas__POA"
+class gestorSubastas (PortableServer.Servant):
+    _NP_RepositoryId = _0_subastas.gestorSubastas._NP_RepositoryId
+
+
+    _omni_op_d = {"crearSubasta": _0_subastas.gestorSubastas._d_crearSubasta, "destruirSubasta": _0_subastas.gestorSubastas._d_destruirSubasta, "localizarSubasta": _0_subastas.gestorSubastas._d_localizarSubasta}
+
+gestorSubastas._omni_skeleton = gestorSubastas
+_0_subastas__POA.gestorSubastas = gestorSubastas
+omniORB.registerSkeleton(gestorSubastas._NP_RepositoryId, gestorSubastas)
+del gestorSubastas
+__name__ = "subastas"
+
+#
+# End of module "subastas"
+#
+__name__ = "subastas_idl"
+
+_exported_modules = ( "subastas", )
+
+# The end.
index cbe0af4..6ec2662 100644 (file)
@@ -1 +1 @@
-IOR:000000000000002049444c3a73756261737461732f676573746f7253756261737461733a312e3000000000010000000000000082000102000000000a3132372e302e302e3100cafc00000031afabcb00000000207e0b55f200000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
+IOR:000000000000002049444c3a73756261737461732f676573746f7253756261737461733a312e3000000000010000000000000082000102000000000a3132372e302e302e3100ad0a00000031afabcb00000000207e88189f00000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002