Exim version x.yz .... configuration file is TESTSUITE/test-config admin user ┌considering: primary_hostname: $primary_hostname ├──expanding: primary_hostname: $primary_hostname └─────result: primary_hostname: myhost.test.ex ┌considering: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ┌considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ├──expanding: abcd └─────result: abcd ┌considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} ├──expanding: \N^([ab]+)(\w+)$\N └─────result: ^([ab]+)(\w+)$ ├──condition: match{abcd}{\N^([ab]+)(\w+)$\N} ├─────result: true ┌considering: $2$1}fail} ├──expanding: $2$1 └─────result: cdab ├──expanding: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} └─────result: match: cdab ┌considering: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ┌considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ├──expanding: wxyz └─────result: wxyz ┌considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} ├──expanding: \N^([ab]+)(\w+)$\N └─────result: ^([ab]+)(\w+)$ ├──condition: match{wxyz}{\N^([ab]+)(\w+)$\N} ├─────result: false ┌───scanning: $2$1}fail} ├──expanding: $2$1 ├─────result: └───skipping: result is not used ├failed to expand: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} ├───error message: "if" failed and "fail" requested └failure was forced ┌considering: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} ┌considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} ├──expanding: 1 └─────result: 1 ┌considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}} ├──expanding: 1 └─────result: 1 ├──condition: eq {1}{1} ├─────result: true ┌considering: yes}{${lookup{xx}lsearch{/non/exist}}}} ├──expanding: yes └─────result: yes ┌───scanning: ${lookup{xx}lsearch{/non/exist}}}} ┌───scanning: xx}lsearch{/non/exist}}}} ├──expanding: xx ├─────result: xx └───skipping: result is not used ┌───scanning: /non/exist}}}} ├──expanding: /non/exist ├─────result: /non/exist └───skipping: result is not used ├──expanding: ${lookup{xx}lsearch{/non/exist}} ├─────result: └───skipping: result is not used ├──expanding: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} └─────result: yes ┌considering: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} ┌considering: a.b.c}{a.b.c}{yes}{no}} ├──expanding: a.b.c └─────result: a.b.c ┌considering: a.b.c}{yes}{no}} ├──expanding: a.b.c └─────result: a.b.c LOG: MAIN PANIC no @ found in the subject of an address list match: subject="a.b.c" pattern="a.b.c" ├──condition: match_address{a.b.c}{a.b.c} ├─────result: false ┌───scanning: yes}{no}} ├──expanding: yes ├─────result: yes └───skipping: result is not used ┌considering: no}} ├──expanding: no └─────result: no ├──expanding: a.b.c └─────result: match_address: no >>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... configuration file is TESTSUITE/test-config admin user /considering: primary_hostname: $primary_hostname |--expanding: primary_hostname: $primary_hostname \_____result: primary_hostname: myhost.test.ex /considering: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} /considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |--expanding: abcd \_____result: abcd /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} |--expanding: \N^([ab]+)(\w+)$\N \_____result: ^([ab]+)(\w+)$ |--condition: match{abcd}{\N^([ab]+)(\w+)$\N} |-----result: true /considering: $2$1}fail} |--expanding: $2$1 \_____result: cdab |--expanding: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail} \_____result: match: cdab /considering: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} /considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |--expanding: wxyz \_____result: wxyz /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail} |--expanding: \N^([ab]+)(\w+)$\N \_____result: ^([ab]+)(\w+)$ |--condition: match{wxyz}{\N^([ab]+)(\w+)$\N} |-----result: false /---scanning: $2$1}fail} |--expanding: $2$1 |-----result: \___skipping: result is not used |failed to expand: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail} |---error message: "if" failed and "fail" requested \failure was forced /considering: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} /considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} |--expanding: 1 \_____result: 1 /considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}} |--expanding: 1 \_____result: 1 |--condition: eq {1}{1} |-----result: true /considering: yes}{${lookup{xx}lsearch{/non/exist}}}} |--expanding: yes \_____result: yes /---scanning: ${lookup{xx}lsearch{/non/exist}}}} /---scanning: xx}lsearch{/non/exist}}}} |--expanding: xx |-----result: xx \___skipping: result is not used /---scanning: /non/exist}}}} |--expanding: /non/exist |-----result: /non/exist \___skipping: result is not used |--expanding: ${lookup{xx}lsearch{/non/exist}} |-----result: \___skipping: result is not used |--expanding: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}} \_____result: yes /considering: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}} /considering: a.b.c}{a.b.c}{yes}{no}} |--expanding: a.b.c \_____result: a.b.c /considering: a.b.c}{yes}{no}} |--expanding: a.b.c \_____result: a.b.c LOG: MAIN PANIC no @ found in the subject of an address list match: subject="a.b.c" pattern="a.b.c" |--condition: match_address{a.b.c}{a.b.c} |-----result: false /---scanning: yes}{no}} |--expanding: yes |-----result: yes \___skipping: result is not used /considering: no}} |--expanding: no \_____result: no |--expanding: a.b.c \_____result: match_address: no >>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... configuration file is TESTSUITE/test-config admin user ┌considering: -oMa sender_host_address = $sender_host_address ├──expanding: -oMa sender_host_address = $sender_host_address └─────result: -oMa sender_host_address = V4NET.0.0.1 ┌considering: sender_host_port = $sender_host_port ├──expanding: sender_host_port = $sender_host_port └─────result: sender_host_port = 1234 ┌considering: -oMaa sender_host_authenticated = $sender_host_authenticated ├──expanding: -oMaa sender_host_authenticated = $sender_host_authenticated └─────result: -oMaa sender_host_authenticated = AAA ┌considering: -oMai authenticated_id = $authenticated_id ├──expanding: -oMai authenticated_id = $authenticated_id └─────result: -oMai authenticated_id = philip ┌considering: -oMas authenticated_sender = $authenticated_sender ├──expanding: -oMas authenticated_sender = $authenticated_sender └─────result: -oMas authenticated_sender = xx@yy.zz ┌considering: -oMi interface_address = $interface_address ├──expanding: -oMi interface_address = $interface_address └─────result: -oMi interface_address = 1.1.1.1 ┌considering: interface_port = $interface_port ├──expanding: interface_port = $interface_port └─────result: interface_port = 99 ┌considering: -oMr received_protocol = $received_protocol ├──expanding: -oMr received_protocol = $received_protocol └─────result: -oMr received_protocol = special ┌considering: -oMt sender_ident = $sender_ident ├──expanding: -oMt sender_ident = $sender_ident └─────result: -oMt sender_ident = me >>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>> 1999-03-02 09:44:33 no host name found for IP address V4NET.11.12.13 Exim version x.yz .... configuration file is TESTSUITE/test-config admin user ┌considering: -oMa sender_host_address = $sender_host_address ├──expanding: -oMa sender_host_address = $sender_host_address └─────result: -oMa sender_host_address = V4NET.0.0.1 ┌considering: sender_host_port = $sender_host_port ├──expanding: sender_host_port = $sender_host_port └─────result: sender_host_port = 1234 ┌considering: -oMaa sender_host_authenticated = $sender_host_authenticated ├──expanding: -oMaa sender_host_authenticated = $sender_host_authenticated └─────result: -oMaa sender_host_authenticated = AAA ┌considering: -oMai authenticated_id = $authenticated_id ├──expanding: -oMai authenticated_id = $authenticated_id └─────result: -oMai authenticated_id = philip ┌considering: -oMas authenticated_sender = $authenticated_sender ├──expanding: -oMas authenticated_sender = $authenticated_sender └─────result: -oMas authenticated_sender = xx@yy.zz ┌considering: -oMi interface_address = $interface_address ├──expanding: -oMi interface_address = $interface_address └─────result: -oMi interface_address = 1.1.1.1 ┌considering: interface_port = $interface_port ├──expanding: interface_port = $interface_port └─────result: interface_port = 99 ┌considering: -oMr received_protocol = $received_protocol ├──expanding: -oMr received_protocol = $received_protocol └─────result: -oMr received_protocol = special ┌considering: ----> No lookup yet: ${if eq{black}{white}{$sender_host_name}{No}} ┌considering: black}{white}{$sender_host_name}{No}} ├──expanding: black └─────result: black ┌considering: white}{$sender_host_name}{No}} ├──expanding: white └─────result: white ├──condition: eq{black}{white} ├─────result: false ┌───scanning: $sender_host_name}{No}} ├──expanding: $sender_host_name ├─────result: └───skipping: result is not used ┌considering: No}} ├──expanding: No └─────result: No ├──expanding: ----> No lookup yet: ${if eq{black}{white}{$sender_host_name}{No}} └─────result: ----> No lookup yet: No ┌considering: -oMs sender_host_name = $sender_host_name looking up host name for V4NET.0.0.1 IP address lookup yielded "ten-1.test.ex" ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx checking addresses for ten-1.test.ex V4NET.0.0.1 OK sender_fullhost = ten-1.test.ex [V4NET.0.0.1] sender_rcvhost = ten-1.test.ex ([V4NET.0.0.1] ident=me) ├──expanding: -oMs sender_host_name = $sender_host_name └─────result: -oMs sender_host_name = ten-1.test.ex ┌considering: -oMt sender_ident = $sender_ident ├──expanding: -oMt sender_ident = $sender_ident └─────result: -oMt sender_ident = me >>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... changed uid/gid: forcing real = effective uid=uuuu gid=CALLER_GID pid=pppp configuration file is TESTSUITE/test-config admin user changed uid/gid: privilege not needed uid=EXIM_UID gid=EXIM_GID pid=pppp originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME sender address = CALLER@myhost.test.ex sender_fullhost = [V4NET.0.0.1] sender_rcvhost = [V4NET.0.0.1] host in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from [V4NET.0.0.1] host in host_lookup? no (option unset) set_process_info: pppp handling incoming connection from [V4NET.0.0.1] host in host_reject_connection? no (option unset) host in sender_unqualified_hosts? no (option unset) host in recipient_unqualified_hosts? no (option unset) host in helo_verify_hosts? no (option unset) host in helo_try_verify_hosts? no (option unset) host in helo_accept_junk_hosts? no (option unset) using ACL "connect1" processing "deny" check hosts = <\n partial-lsearch;TESTSUITE/aux-fixed/0002.lsearch \n 1.2.3.4 sender host name required, to match against partial-lsearch;TESTSUITE/aux-fixed/0002.lsearch looking up host name for V4NET.0.0.1 DNS lookup of 1.0.0.V4NET.in-addr.arpa (PTR) using fakens DNS lookup of 1.0.0.V4NET.in-addr.arpa (PTR) succeeded IP address lookup yielded "ten-1.test.ex" DNS lookup of ten-1.test.ex (A) using fakens DNS lookup of ten-1.test.ex (A) succeeded ten-1.test.ex V4NET.0.0.1 mx=-1 sort=xx checking addresses for ten-1.test.ex Forward DNS security status: unverified V4NET.0.0.1 OK sender_fullhost = ten-1.test.ex [V4NET.0.0.1] sender_rcvhost = ten-1.test.ex ([V4NET.0.0.1]) search_open: lsearch "TESTSUITE/aux-fixed/0002.lsearch" search_find: file="TESTSUITE/aux-fixed/0002.lsearch" key="ten-1.test.ex" partial=2 affix=*. starflags=0 LRU list: 0TESTSUITE/aux-fixed/0002.lsearch End internal_search_find: file="TESTSUITE/aux-fixed/0002.lsearch" type=lsearch key="ten-1.test.ex" file lookup required for ten-1.test.ex in TESTSUITE/aux-fixed/0002.lsearch lookup yielded: host in "< partial-lsearch;TESTSUITE/aux-fixed/0002.lsearch 1.2.3.4"? yes (matched "partial-lsearch;TESTSUITE/aux-fixed/0002.lsearch") deny: condition test succeeded in ACL "connect1" end of ACL "connect1": DENY SMTP>> 550 Administrative prohibition LOG: connection_reject MAIN REJECT H=ten-1.test.ex [V4NET.0.0.1] rejected connection in "connect" ACL search_tidyup called >>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... changed uid/gid: forcing real = effective uid=uuuu gid=CALLER_GID pid=pppp configuration file is TESTSUITE/test-config admin user changed uid/gid: privilege not needed uid=EXIM_UID gid=EXIM_GID pid=pppp originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME sender address = CALLER@myhost.test.ex sender_fullhost = [V4NET.0.0.2] sender_rcvhost = [V4NET.0.0.2] host in hosts_connection_nolog? no (option unset) LOG: smtp_connection MAIN SMTP connection from [V4NET.0.0.2] host in host_lookup? no (option unset) set_process_info: pppp handling incoming connection from [V4NET.0.0.2] host in host_reject_connection? no (option unset) host in sender_unqualified_hosts? no (option unset) host in recipient_unqualified_hosts? no (option unset) host in helo_verify_hosts? no (option unset) host in helo_try_verify_hosts? no (option unset) host in helo_accept_junk_hosts? no (option unset) using ACL "connect2" processing "deny" check hosts = net-lsearch;TESTSUITE/aux-fixed/0002.lsearch search_open: lsearch "TESTSUITE/aux-fixed/0002.lsearch" search_find: file="TESTSUITE/aux-fixed/0002.lsearch" key="V4NET.0.0.2" partial=-1 affix=NULL starflags=0 LRU list: 0TESTSUITE/aux-fixed/0002.lsearch End internal_search_find: file="TESTSUITE/aux-fixed/0002.lsearch" type=lsearch key="V4NET.0.0.2" file lookup required for V4NET.0.0.2 in TESTSUITE/aux-fixed/0002.lsearch lookup failed host in "net-lsearch;TESTSUITE/aux-fixed/0002.lsearch"? no (end of list) deny: condition test failed in ACL "connect2" end of ACL "connect2": implicit DENY SMTP>> 550 Administrative prohibition LOG: connection_reject MAIN REJECT H=[V4NET.0.0.2] rejected connection in "connect" ACL search_tidyup called >>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> >>> host in hosts_connection_nolog? no (option unset) >>> host in host_lookup? no (option unset) >>> host in host_reject_connection? no (option unset) >>> host in sender_unqualified_hosts? no (option unset) >>> host in recipient_unqualified_hosts? no (option unset) >>> host in helo_verify_hosts? no (option unset) >>> host in helo_try_verify_hosts? no (option unset) >>> host in helo_accept_junk_hosts? no (option unset) >>> using ACL "connect0" >>> processing "accept" >>> accept: condition test succeeded in ACL "connect0" >>> end of ACL "connect0": ACCEPT >>> processing "accept" >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> using ACL "check_data" >>> processing "warn" >>> check logwrite = Subject is: "$h_subject:" >>> = Subject is: "" LOG: 10HmaX-0005vi-00 Subject is: "" >>> warn: condition test succeeded in ACL "check_data" >>> processing "deny" >>> message: reply_address=<$reply_address> >>> deny: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": DENY LOG: 10HmaX-0005vi-00 H=[V4NET.0.0.0] F=<> rejected after DATA: reply_address=<> >>> processing "accept" >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) >>> using ACL "check_data" >>> processing "warn" >>> check logwrite = Subject is: "$h_subject:" >>> = Subject is: "" LOG: 10HmaY-0005vi-00 Subject is: "" >>> warn: condition test succeeded in ACL "check_data" >>> processing "deny" >>> message: reply_address=<$reply_address> >>> deny: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": DENY LOG: 10HmaY-0005vi-00 H=[V4NET.0.0.0] F=<> rejected after DATA: reply_address= >>> processing "accept" >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) >>> using ACL "check_data" >>> processing "warn" >>> check logwrite = Subject is: "$h_subject:" >>> = Subject is: "" LOG: 10HmaZ-0005vi-00 Subject is: "" >>> warn: condition test succeeded in ACL "check_data" >>> processing "deny" >>> message: reply_address=<$reply_address> >>> deny: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": DENY LOG: 10HmaZ-0005vi-00 H=[V4NET.0.0.0] F=<> rejected after DATA: reply_address= >>> processing "accept" >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) >>> using ACL "check_data" >>> processing "warn" >>> check logwrite = Subject is: "$h_subject:" >>> = Subject is: "" LOG: 10HmbA-0005vi-00 Subject is: "" >>> warn: condition test succeeded in ACL "check_data" >>> processing "deny" >>> message: reply_address=<$reply_address> >>> deny: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": DENY LOG: 10HmbA-0005vi-00 H=[V4NET.0.0.0] F=<> rejected after DATA: reply_address=<> >>> processing "accept" >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) >>> using ACL "check_data" >>> processing "warn" >>> check logwrite = Subject is: "$h_subject:" >>> = Subject is: "" LOG: 10HmbB-0005vi-00 Subject is: "" >>> warn: condition test succeeded in ACL "check_data" >>> processing "deny" >>> message: reply_address=<$reply_address> >>> deny: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": DENY LOG: 10HmbB-0005vi-00 H=[V4NET.0.0.0] F=<> rejected after DATA: reply_address= >>> host in hosts_connection_nolog? no (option unset) >>> host in host_lookup? no (option unset) >>> host in host_reject_connection? no (option unset) >>> host in sender_unqualified_hosts? no (option unset) >>> host in recipient_unqualified_hosts? no (option unset) >>> host in helo_verify_hosts? no (option unset) >>> host in helo_try_verify_hosts? no (option unset) >>> host in helo_accept_junk_hosts? no (option unset) >>> using ACL "connect0" >>> processing "accept" >>> accept: condition test succeeded in ACL "connect0" >>> end of ACL "connect0": ACCEPT >>> processing "accept" >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) >>> using ACL "check_data" >>> processing "warn" >>> check logwrite = Subject is: "$h_subject:" >>> = Subject is: "=?iso-8859-8?Q?_here_we_go=3A_a_string_that_is_going_to_be_encoded=3A_it_will_go_over_the_75-char_limit_by_a_long_way=3B_in_fact_this_one_will_go_over_the_150_character_limit?=" LOG: 10HmbC-0005vi-00 Subject is: "=?iso-8859-8?Q?_here_we_go=3A_a_string_that_is_going_to_be_encoded=3A_it_will_go_over_the_75-char_limit_by_a_long_way=3B_in_fact_this_one_will_go_over_the_150_character_limit?=" >>> warn: condition test succeeded in ACL "check_data" >>> processing "deny" >>> message: reply_address=<$reply_address> >>> deny: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": DENY LOG: 10HmbC-0005vi-00 H=[V4NET.0.0.0] F=<> rejected after DATA: reply_address=<> >>> host in hosts_connection_nolog? no (option unset) >>> host in host_lookup? no (option unset) >>> host in host_reject_connection? no (option unset) >>> host in sender_unqualified_hosts? no (option unset) >>> host in recipient_unqualified_hosts? no (option unset) >>> host in helo_verify_hosts? no (option unset) >>> host in helo_try_verify_hosts? no (option unset) >>> host in helo_accept_junk_hosts? no (option unset) >>> using ACL "connect0" >>> processing "accept" >>> accept: condition test succeeded in ACL "connect0" >>> end of ACL "connect0": ACCEPT >>> processing "accept" >>> accept: condition test succeeded in inline ACL >>> end of inline ACL: ACCEPT >>> host in ignore_fromline_hosts? no (option unset) >>> using ACL "check_data" >>> processing "warn" >>> check logwrite = Subject is: "$h_subject:" >>> = Subject is: " here we go: a string that is going to be encoded: it will go over the 75-char limit by a long way; in fact this one will go over the 150 character limit" LOG: 10HmbD-0005vi-00 Subject is: " here we go: a string that is going to be encoded: it will go over the 75-char limit by a long way; in fact this one will go over the 150 character limit" >>> warn: condition test succeeded in ACL "check_data" >>> processing "deny" >>> message: reply_address=<$reply_address> >>> deny: condition test succeeded in ACL "check_data" >>> end of ACL "check_data": DENY LOG: 10HmbD-0005vi-00 H=[V4NET.0.0.0] F=<> rejected after DATA: reply_address=<> Exim version x.yz .... changed uid/gid: -C, -D, -be or -bf forces real uid uid=CALLER_UID gid=CALLER_GID pid=pppp configuration file is TESTSUITE/test-config admin user originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME sender address = CALLER@myhost.test.ex 1.2.3.4 in "1.2.3"? no (malformed IPv4 address or address mask) 1.2.3.4 in "1.2.3.4/abc"? no (malformed IPv4 address or address mask) search_tidyup called >>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>>