↑ Up

Prover9---2026-6A.UNS-CRf.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : Prover9---2026-6A
% Problem  : SWV290-2 : TPTP v9.3.1. Released v3.2.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : prover9 -casc 300 -f /export/starexec/sandbox/benchmark/theBenchmark.p

% Computer : n006.cluster.edu
% Model    : x86_64 x86_64
% CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory   : 8046.5625MB
% OS       : Linux 6.8.0-71-generic
% CPULimit : 300s
% WCLimit  : 300s
% DateTime : Sun Sep 27 09:07:17 AM UTC 2026

% Result   : Unsatisfiable 0.11s 0.60s
% Output   : CNFRefutation 0.11s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :    9
%            Number of leaves      :   10
% Syntax   : Number of formulae    :   31 (  17 unt;   0 def)
%            Number of atoms       :   56 (   0 equ)
%            Maximal formula atoms :    5 (   1 avg)
%            Number of connectives :   54 (  29   ~;  25   |;   0   &)
%                                         (   0 <=>;   0  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   12 (   3 avg)
%            Maximal term depth    :   11 (   2 avg)
%            Number of predicates  :    2 (   1 usr;   1 prp; 0-3 aty)
%            Number of functors    :   28 (  28 usr;  15 con; 0-3 aty)
%            Number of variables   :   49 (   8 sgn  19   !;   0   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(cls_conjecture_0,axiom,
    c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(v_X_H,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent),
    file('theBenchmark.p',cls_conjecture_0) ).

cnf(c_1,plain,
    c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(v_X_H,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent),
    inference(clausify,[status(thm)],[cls_conjecture_0]) ).

fof(cls_conjecture_1,axiom,
    c_in(c_Event_Oevent_OGets(v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_X,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent),
    file('theBenchmark.p',cls_conjecture_1) ).

cnf(c_2,plain,
    c_in(c_Event_Oevent_OGets(v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_X,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent),
    inference(clausify,[status(thm)],[cls_conjecture_1]) ).

fof(cls_conjecture_2,axiom,
    ~ c_in(v_B,c_Event_Obad,tc_Message_Oagent),
    file('theBenchmark.p',cls_conjecture_2) ).

cnf(c_3,plain,
    ~ c_in(v_B,c_Event_Obad,tc_Message_Oagent),
    inference(clausify,[status(thm)],[cls_conjecture_2]) ).

fof(cls_conjecture_3,axiom,
    c_in(v_evs,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)),
    file('theBenchmark.p',cls_conjecture_3) ).

cnf(c_4,plain,
    c_in(v_evs,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)),
    inference(clausify,[status(thm)],[cls_conjecture_3]) ).

fof(cls_conjecture_4,axiom,
    ~ c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent),
    file('theBenchmark.p',cls_conjecture_4) ).

cnf(c_5,plain,
    ~ c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent),
    inference(clausify,[status(thm)],[cls_conjecture_4]) ).

fof(cls_Event_OSays__imp__analz__Spy__dest_0,axiom,
    ! [VAR_0,VAR_1,VAR_2,VAR_3] :
      ( c_in(VAR_2,c_Message_Oanalz(c_Event_Oknows(c_Message_Oagent_OSpy,VAR_3)),tc_Message_Omsg)
      | ~ c_in(c_Event_Oevent_OSays(VAR_0,VAR_1,VAR_2),c_List_Oset(VAR_3,tc_Event_Oevent),tc_Event_Oevent) ),
    file('theBenchmark.p',cls_Event_OSays__imp__analz__Spy__dest_0) ).

cnf(c_6,plain,
    ( c_in(C,c_Message_Oanalz(c_Event_Oknows(c_Message_Oagent_OSpy,D)),tc_Message_Omsg)
    | ~ c_in(c_Event_Oevent_OSays(A,B,C),c_List_Oset(D,tc_Event_Oevent),tc_Event_Oevent) ),
    inference(clausify,[status(thm)],[cls_Event_OSays__imp__analz__Spy__dest_0]) ).

fof(cls_Message_OMPair__analz_0,axiom,
    ! [VAR_0,VAR_1,VAR_2] :
      ( c_in(VAR_1,c_Message_Oanalz(VAR_2),tc_Message_Omsg)
      | ~ c_in(c_Message_Omsg_OMPair(VAR_0,VAR_1),c_Message_Oanalz(VAR_2),tc_Message_Omsg) ),
    file('theBenchmark.p',cls_Message_OMPair__analz_0) ).

cnf(c_7,plain,
    ( c_in(B,c_Message_Oanalz(C),tc_Message_Omsg)
    | ~ c_in(c_Message_Omsg_OMPair(A,B),c_Message_Oanalz(C),tc_Message_Omsg) ),
    inference(clausify,[status(thm)],[cls_Message_OMPair__analz_0]) ).

fof(cls_Message_Oanalz__into__parts__dest_0,axiom,
    ! [VAR_0,VAR_1] :
      ( c_in(VAR_0,c_Message_Oparts(VAR_1),tc_Message_Omsg)
      | ~ c_in(VAR_0,c_Message_Oanalz(VAR_1),tc_Message_Omsg) ),
    file('theBenchmark.p',cls_Message_Oanalz__into__parts__dest_0) ).

cnf(c_8,plain,
    ( c_in(A,c_Message_Oparts(B),tc_Message_Omsg)
    | ~ c_in(A,c_Message_Oanalz(B),tc_Message_Omsg) ),
    inference(clausify,[status(thm)],[cls_Message_Oanalz__into__parts__dest_0]) ).

fof(cls_OtwayRees_OGets__imp__Says__dest_0,axiom,
    ! [VAR_0,VAR_1,VAR_2] :
      ( c_in(c_Event_Oevent_OSays(v_sko__usf(VAR_1,VAR_2,VAR_0),VAR_1,VAR_2),c_List_Oset(VAR_0,tc_Event_Oevent),tc_Event_Oevent)
      | ~ c_in(c_Event_Oevent_OGets(VAR_1,VAR_2),c_List_Oset(VAR_0,tc_Event_Oevent),tc_Event_Oevent)
      | ~ c_in(VAR_0,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)) ),
    file('theBenchmark.p',cls_OtwayRees_OGets__imp__Says__dest_0) ).

cnf(c_9,plain,
    ( c_in(c_Event_Oevent_OSays(v_sko__usf(B,C,A),B,C),c_List_Oset(A,tc_Event_Oevent),tc_Event_Oevent)
    | ~ c_in(c_Event_Oevent_OGets(B,C),c_List_Oset(A,tc_Event_Oevent),tc_Event_Oevent)
    | ~ c_in(A,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)) ),
    inference(clausify,[status(thm)],[cls_OtwayRees_OGets__imp__Says__dest_0]) ).

fof(cls_OtwayRees_ONB__Crypt__imp__Server__msg_0,axiom,
    ! [VAR_0,VAR_1,VAR_2,VAR_3,VAR_4,VAR_5,VAR_6] :
      ( c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,VAR_1,c_Message_Omsg_OMPair(VAR_2,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(VAR_3),c_Message_Omsg_OMPair(VAR_2,c_Message_Omsg_OKey(VAR_6))),c_Message_Omsg_OCrypt(c_Public_OshrK(VAR_1),c_Message_Omsg_OMPair(VAR_5,c_Message_Omsg_OKey(VAR_6)))))),c_List_Oset(VAR_0,tc_Event_Oevent),tc_Event_Oevent)
      | c_in(VAR_1,c_Event_Obad,tc_Message_Oagent)
      | ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(VAR_1),c_Message_Omsg_OMPair(VAR_5,c_Message_Omsg_OKey(VAR_6))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,VAR_0)),tc_Message_Omsg)
      | ~ c_in(c_Event_Oevent_OSays(VAR_1,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(VAR_2,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(VAR_3),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(VAR_1),c_Message_Omsg_OMPair(VAR_4,c_Message_Omsg_OCrypt(c_Public_OshrK(VAR_1),c_Message_Omsg_OMPair(VAR_2,c_Message_Omsg_OMPair(VAR_5,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(VAR_3),c_Message_Omsg_OAgent(VAR_1)))))))))),c_List_Oset(VAR_0,tc_Event_Oevent),tc_Event_Oevent)
      | ~ c_in(VAR_0,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)) ),
    file('theBenchmark.p',cls_OtwayRees_ONB__Crypt__imp__Server__msg_0) ).

cnf(c_10,plain,
    ( c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,B,c_Message_Omsg_OMPair(C,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(D),c_Message_Omsg_OMPair(C,c_Message_Omsg_OKey(V6))),c_Message_Omsg_OCrypt(c_Public_OshrK(B),c_Message_Omsg_OMPair(F,c_Message_Omsg_OKey(V6)))))),c_List_Oset(A,tc_Event_Oevent),tc_Event_Oevent)
    | c_in(B,c_Event_Obad,tc_Message_Oagent)
    | ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(B),c_Message_Omsg_OMPair(F,c_Message_Omsg_OKey(V6))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,A)),tc_Message_Omsg)
    | ~ c_in(c_Event_Oevent_OSays(B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(C,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(D),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(B),c_Message_Omsg_OMPair(E,c_Message_Omsg_OCrypt(c_Public_OshrK(B),c_Message_Omsg_OMPair(C,c_Message_Omsg_OMPair(F,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(D),c_Message_Omsg_OAgent(B)))))))))),c_List_Oset(A,tc_Event_Oevent),tc_Event_Oevent)
    | ~ c_in(A,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)) ),
    inference(clausify,[status(thm)],[cls_OtwayRees_ONB__Crypt__imp__Server__msg_0]) ).

cnf(c_32,plain,
    ( c_in(c_Event_Oevent_OSays(v_sko__usf(v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_X,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))))),v_evs),v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_X,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent)
    | ~ c_in(v_evs,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)) ),
    inference(resolve,[status(thm)],[c_9,c_2]) ).

cnf(c_13,plain,
    c_in(c_Event_Oevent_OSays(v_sko__usf(v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_X,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))))),v_evs),v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_X,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent),
    inference(resolve,[status(thm)],[c_4,c_32]) ).

cnf(c_33,plain,
    ( c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,A,c_Message_Omsg_OMPair(B,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(C),c_Message_Omsg_OMPair(B,c_Message_Omsg_OKey(F))),c_Message_Omsg_OCrypt(c_Public_OshrK(A),c_Message_Omsg_OMPair(E,c_Message_Omsg_OKey(F)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent)
    | c_in(A,c_Event_Obad,tc_Message_Oagent)
    | ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(A),c_Message_Omsg_OMPair(E,c_Message_Omsg_OKey(F))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg)
    | ~ c_in(c_Event_Oevent_OSays(A,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(B,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(C),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(A),c_Message_Omsg_OMPair(D,c_Message_Omsg_OCrypt(c_Public_OshrK(A),c_Message_Omsg_OMPair(B,c_Message_Omsg_OMPair(E,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(C),c_Message_Omsg_OAgent(A)))))))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent) ),
    inference(resolve,[status(thm)],[c_10,c_4]) ).

cnf(c_34,plain,
    ( c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(A))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(A)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent)
    | c_in(v_B,c_Event_Obad,tc_Message_Oagent)
    | ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(A))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg) ),
    inference(resolve,[status(thm)],[c_33,c_1]) ).

cnf(c_35,plain,
    ( c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(A))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(A)))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent)
    | ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(A))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg) ),
    inference(resolve,[status(thm)],[c_34,c_3]) ).

cnf(c_16,plain,
    ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg),
    inference(resolve,[status(thm)],[c_35,c_5]) ).

cnf(c_19,plain,
    ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oanalz(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg),
    inference(resolve,[status(thm)],[c_8,c_16]) ).

cnf(c_20,plain,
    ~ c_in(c_Message_Omsg_OMPair(A,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))),c_Message_Oanalz(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg),
    inference(resolve,[status(thm)],[c_7,c_19]) ).

cnf(c_22,plain,
    ~ c_in(c_Message_Omsg_OMPair(A,c_Message_Omsg_OMPair(B,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))))),c_Message_Oanalz(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg),
    inference(resolve,[status(thm)],[c_7,c_20]) ).

cnf(c_36,plain,
    c_in(c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_X,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))))),c_Message_Oanalz(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs)),tc_Message_Omsg),
    inference(resolve,[status(thm)],[c_13,c_6]) ).

cnf(c_31,plain,
    $false,
    inference(resolve,[status(thm)],[c_22,c_36]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03  % Problem  : SWV290-2 : TPTP v9.3.1. Released v3.2.0.
% 0.00/0.04  % Command  : prover9 -casc 300 -f /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.11/0.58  % Computer : n006.cluster.edu
% 0.11/0.58  % Model    : x86_64 x86_64
% 0.11/0.58  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.11/0.58  % Memory   : 8046.5625MB
% 0.11/0.58  % OS       : Linux 6.8.0-71-generic
% 0.11/0.58  % CPULimit : 300
% 0.11/0.58  % WCLimit  : 300
% 0.11/0.58  % DateTime : Sat Sep 26 13:27:57 UTC 2026
% 0.11/0.59  % CPUTime  : 
% 0.11/0.59  % Prover9 (64) version 2026-6A, July 2026, CASC-J13.
% 0.11/0.59  % Process 1374287 was started by sandbox on n006,
% 0.11/0.59  % Sat Sep 26 13:27:57 2026
% 0.11/0.59  % The command was "/export/starexec/sandbox/solver/bin/prover9 -casc 300 -f /export/starexec/sandbox/benchmark/theBenchmark.p".
% 0.11/0.59  
% 0.11/0.59  % From the command line: assign(max_seconds, 300).
% 0.11/0.60  
% 0.11/0.60  % SZS status Unsatisfiable for theBenchmark
% 0.11/0.60  
% 0.11/0.60  % Proof 1 at 0.00 (+ 0.00) seconds.
% 0.11/0.60  % Length of proof is 16.
% 0.11/0.60  % Level of proof is 5.
% 0.11/0.60  % Maximum clause weight is 77.000.
% 0.11/0.60  % Given clauses 20.
% 0.11/0.60  
% 0.11/0.60  % SZS output start CNFRefutation for theBenchmark
% See solution above
%------------------------------------------------------------------------------