Index: simulation/raw/10_bjt_amp_tr.html =================================================================== --- simulation/raw/10_bjt_amp_tr.html (revision 7859) +++ simulation/raw/10_bjt_amp_tr.html (revision 7860) @@ -13,7 +13,7 @@ spice command symbol.

- +
Click the image to get the sch-rnd sheet

Index: simulation/raw/10_bjt_amp_tr.rs =================================================================== --- simulation/raw/10_bjt_amp_tr.rs (revision 7859) +++ simulation/raw/10_bjt_amp_tr.rs (revision 7860) @@ -79,7 +79,7 @@ } ha:group.2 { uuid=60PZRPnx0Y9mYJZvZgYAAAAJ; src_uuid=iNOQfJpO6hT/HFDFGjoAAAAh; - x=40000; y=120000; + x=20000; y=100000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAAK; src_uuid=iNOQfJpO6hT/HFDFGjoAAAAi; @@ -125,6 +125,7 @@ } ha:group.3 { uuid=60PZRPnx0Y9mYJZvZgYAAAAM; + x=-20000; y=-20000; li:objects { ha:line.1 { x1=40000; y1=120000; x2=32000; y2=120000; stroke=wire; } ha:text.2 { x1=33000; y1=120000; dyntext=1; stroke=wire; text=%../A.name%; floater=1; } @@ -135,19 +136,14 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.4 { - li:conn { - /2/3/1 - /2/2/2/1 - } - } ha:group.5 { uuid=60PZRPnx0Y9mYJZvZgYAAAAN; + x=-20000; y=-20000; li:objects { - ha:line.1 { x1=60000; y1=120000; x2=108000; y2=120000; stroke=wire; } - ha:line.3 { x1=84000; y1=120000; x2=84000; y2=120000; stroke=junction; } - ha:line.4 { x1=84000; y1=100000; x2=84000; y2=140000; stroke=wire; } - ha:text.5 { x1=92000; y1=120000; dyntext=1; stroke=wire; text=%../A.name%; floater=1; } + ha:line.1 { x1=60000; y1=120000; x2=76000; y2=120000; stroke=wire; } + ha:line.3 { x1=64000; y1=120000; x2=64000; y2=120000; stroke=junction; } + ha:line.4 { x1=64000; y1=100000; x2=64000; y2=140000; stroke=wire; } + ha:text.5 { x1=66000; y1=120000; dyntext=1; stroke=wire; text=%../A.name%; floater=1; } } ha:attrib { name=int_b @@ -154,15 +150,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.6 { - li:conn { - /2/5/1 - /2/2/1/1 - } - } ha:group.7 { uuid=60PZRPnx0Y9mYJZvZgYAAAAU; src_uuid=iNOQfJpO6hT/HFDFGjoAAABC; - x=84000; y=160000; rot=270.000000; + x=44000; y=140000; rot=270.000000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAAV; src_uuid=iNOQfJpO6hT/HFDFGjoAAABD; @@ -213,7 +203,7 @@ } ha:group.9 { uuid=60PZRPnx0Y9mYJZvZgYAAAAa; src_uuid=iNOQfJpO6hT/HFDFGjoAAABC; - x=84000; y=100000; rot=270.000000; + x=44000; y=80000; rot=270.000000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAAb; src_uuid=iNOQfJpO6hT/HFDFGjoAAABD; @@ -262,20 +252,9 @@ value=10k } } - ha:connection.10 { - li:conn { - /2/9/2/1 - /2/5/4 - } - } - ha:connection.11 { - li:conn { - /2/5/4 - /2/7/1/1 - } - } ha:group.14 { uuid=60PZRPnx0Y9mYJZvZgYAAAAr; + x=-52000; y=-20000; li:objects { ha:line.1 { x1=120000; y1=112000; x2=120000; y2=56000; stroke=wire; } } @@ -285,6 +264,7 @@ } ha:group.16 { uuid=60PZRPnx0Y9mYJZvZgYAAAAs; + x=-40000; y=-20000; li:objects { ha:line.1 { x1=84000; y1=80000; x2=84000; y2=56000; stroke=wire; } } @@ -292,15 +272,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.17 { - li:conn { - /2/16/1 - /2/9/1/1 - } - } ha:group.18 { uuid=60PZRPnx0Y9mYJZvZgYAAAAw; src_uuid=iNOQfJpO6hT/HFDFGjoAAABC; - x=120000; y=160000; rot=270.000000; + x=68000; y=140000; rot=270.000000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAAx; src_uuid=iNOQfJpO6hT/HFDFGjoAAABD; @@ -351,11 +325,12 @@ } ha:group.19 { uuid=60PZRPnx0Y9mYJZvZgYAAAAz; + x=-52000; y=-20000; li:objects { ha:line.1 { x1=120000; y1=128000; x2=120000; y2=140000; stroke=wire; } - ha:line.2 { x1=120000; y1=132000; x2=140000; y2=132000; stroke=wire; } + ha:line.2 { x1=120000; y1=132000; x2=132000; y2=132000; stroke=wire; } ha:line.3 { x1=120000; y1=132000; x2=120000; y2=132000; stroke=junction; } - ha:text.4 { x1=128000; y1=132000; dyntext=1; stroke=wire; text=%../A.name%; floater=1; } + ha:text.4 { x1=122000; y1=132000; dyntext=1; stroke=wire; text=%../A.name%; floater=1; } } ha:attrib { name=int_c @@ -362,14 +337,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.21 { - li:conn { - /2/19/1 - /2/18/1/1 - } - } ha:group.22 { uuid=60PZRPnx0Y9mYJZvZgYAAAA0; + x=-40000; y=-20000; li:objects { ha:line.1 { x1=84000; y1=160000; x2=84000; y2=172000; stroke=wire; } } @@ -377,14 +347,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.23 { - li:conn { - /2/22/1 - /2/7/2/1 - } - } ha:group.24 { uuid=60PZRPnx0Y9mYJZvZgYAAAA1; + x=-52000; y=-20000; li:objects { ha:line.1 { x1=120000; y1=160000; x2=120000; y2=172000; stroke=wire; } } @@ -392,15 +357,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.25 { - li:conn { - /2/24/1 - /2/18/2/1 - } - } ha:group.26 { uuid=60PZRPnx0Y9mYJZvZgYAAAA5; src_uuid=iNOQfJpO6hT/HFDFGjoAAAAh; - x=140000; y=132000; + x=80000; y=112000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAA6; src_uuid=iNOQfJpO6hT/HFDFGjoAAAAi; @@ -444,15 +403,9 @@ value=10u } } - ha:connection.27 { - li:conn { - /2/26/2/1 - /2/19/2 - } - } ha:group.28 { uuid=60PZRPnx0Y9mYJZvZgYAAAA/; src_uuid=iNOQfJpO6hT/HFDFGjoAAABC; - x=168000; y=120000; rot=270.000000; + x=108000; y=100000; rot=270.000000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAABA; src_uuid=iNOQfJpO6hT/HFDFGjoAAABD; @@ -503,11 +456,12 @@ } ha:group.29 { uuid=60PZRPnx0Y9mYJZvZgYAAABC; + x=-60000; y=-20000; li:objects { - ha:line.1 { x1=160000; y1=132000; x2=196000; y2=132000; stroke=wire; } + ha:line.1 { x1=160000; y1=132000; x2=176000; y2=132000; stroke=wire; } ha:line.2 { x1=168000; y1=120000; x2=168000; y2=132000; stroke=wire; } ha:line.3 { x1=168000; y1=132000; x2=168000; y2=132000; stroke=junction; } - ha:text.4 { x1=193000; y1=132000; dyntext=1; stroke=wire; text=%../A.name%; floater=1; } + ha:text.4 { x1=173000; y1=132000; dyntext=1; stroke=wire; text=%../A.name%; floater=1; } } ha:attrib { name=out @@ -514,20 +468,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.30 { - li:conn { - /2/29/1 - /2/26/1/1 - } - } - ha:connection.31 { - li:conn { - /2/29/2 - /2/28/2/1 - } - } ha:group.32 { uuid=60PZRPnx0Y9mYJZvZgYAAABD; + x=-60000; y=-20000; li:objects { ha:line.2 { x1=168000; y1=100000; x2=168000; y2=56000; stroke=wire; } } @@ -535,15 +478,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.33 { - li:conn { - /2/28/1/1 - /2/32/2 - } - } ha:group.34 { uuid=60PZRPnx0Y9mYJZvZgYAAABi; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB0; - x=208000; y=84000; rot=270.000000; mirx=1; + x=128000; y=64000; rot=270.000000; mirx=1; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAABj; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB1; @@ -592,7 +529,7 @@ } ha:group.35 { uuid=60PZRPnx0Y9mYJZvZgYAAABo; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB0; - x=32000; y=84000; rot=270.000000; mirx=1; + x=12000; y=64000; rot=270.000000; mirx=1; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAABp; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB1; @@ -641,6 +578,7 @@ } ha:group.36 { uuid=60PZRPnx0Y9mYJZvZgYAAABr; + x=-80000; y=-20000; li:objects { ha:line.1 { x1=208000; y1=64000; x2=208000; y2=56000; stroke=wire; } } @@ -648,15 +586,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.37 { - li:conn { - /2/36/1 - /2/34/1/1 - } - } ha:group.38 { uuid=60PZRPnx0Y9mYJZvZgYAAABs; - x=-212000; y=0; + x=-232000; y=-20000; li:objects { ha:line.1 { x1=244000; y1=64000; x2=244000; y2=56000; stroke=wire; } } @@ -666,6 +598,7 @@ } ha:group.40 { uuid=60PZRPnx0Y9mYJZvZgYAAABt; + x=-80000; y=-20000; li:objects { ha:line.1 { x1=208000; y1=84000; x2=208000; y2=92000; stroke=wire; } } @@ -673,27 +606,9 @@ ha:role = { value=wire-net; prio=0; } } } - ha:connection.41 { - li:conn { - /2/40/1 - /2/34/2/1 - } - } - ha:connection.44 { - li:conn { - /2/38/1 - /2/35/1/1 - } - } - ha:connection.45 { - li:conn { - /2/35/2/1 - /2/3/3 - } - } ha:group.46 { uuid=60PZRPnx0Y9mYJZvZgYAAABz; src_uuid=iNOQfJpO6hT/HFDFGjoAAABm; - x=32000; y=56000; + x=12000; y=36000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAB0; src_uuid=iNOQfJpO6hT/HFDFGjoAAABn; @@ -721,15 +636,9 @@ role=symbol } } - ha:connection.47 { - li:conn { - /2/46/1/1 - /2/38/1 - } - } ha:group.48 { uuid=60PZRPnx0Y9mYJZvZgYAAAB1; src_uuid=iNOQfJpO6hT/HFDFGjoAAABm; - x=84000; y=56000; + x=44000; y=36000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAB2; src_uuid=iNOQfJpO6hT/HFDFGjoAAABn; @@ -757,15 +666,9 @@ role=symbol } } - ha:connection.49 { - li:conn { - /2/48/1/1 - /2/16/1 - } - } ha:group.50 { uuid=60PZRPnx0Y9mYJZvZgYAAAB3; src_uuid=iNOQfJpO6hT/HFDFGjoAAABm; - x=120000; y=56000; + x=68000; y=36000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAB4; src_uuid=iNOQfJpO6hT/HFDFGjoAAABn; @@ -793,15 +696,9 @@ role=symbol } } - ha:connection.51 { - li:conn { - /2/50/1/1 - /2/14/1 - } - } ha:group.52 { uuid=60PZRPnx0Y9mYJZvZgYAAAB5; src_uuid=iNOQfJpO6hT/HFDFGjoAAABm; - x=168000; y=56000; + x=108000; y=36000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAB6; src_uuid=iNOQfJpO6hT/HFDFGjoAAABn; @@ -829,15 +726,9 @@ role=symbol } } - ha:connection.53 { - li:conn { - /2/52/1/1 - /2/32/2 - } - } ha:group.54 { uuid=60PZRPnx0Y9mYJZvZgYAAAB7; src_uuid=iNOQfJpO6hT/HFDFGjoAAABm; - x=208000; y=56000; + x=128000; y=36000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAAB8; src_uuid=iNOQfJpO6hT/HFDFGjoAAABn; @@ -865,15 +756,9 @@ role=symbol } } - ha:connection.55 { - li:conn { - /2/54/1/1 - /2/36/1 - } - } ha:group.56 { uuid=60PZRPnx0Y9mYJZvZgYAAACB; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB6; - x=208000; y=92000; + x=128000; y=72000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAACC; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB7; @@ -900,15 +785,9 @@ role=symbol } } - ha:connection.57 { - li:conn { - /2/56/1/1 - /2/40/1 - } - } ha:group.58 { uuid=60PZRPnx0Y9mYJZvZgYAAACD; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB6; - x=120000; y=172000; + x=68000; y=152000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAACE; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB7; @@ -935,15 +814,9 @@ role=symbol } } - ha:connection.59 { - li:conn { - /2/58/1/1 - /2/24/1 - } - } ha:group.60 { uuid=60PZRPnx0Y9mYJZvZgYAAACF; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB6; - x=84000; y=172000; + x=44000; y=152000; li:objects { ha:group.1 { uuid=60PZRPnx0Y9mYJZvZgYAAACG; src_uuid=iNOQfJpO6hT/HFDFGjoAAAB7; @@ -970,15 +843,9 @@ role=symbol } } - ha:connection.61 { - li:conn { - /2/60/1/1 - /2/22/1 - } - } ha:group.62 { uuid=uo/hkCCyjHkmVGRW0F0AAAA+; src_uuid=TeGEOMuew6iCb2kzckAAAAAD; - x=29000; y=144000; + x=9000; y=124000; li:objects { ha:text.1 { x1=2000; y1=-4000; dyntext=0; stroke=sym-decor; text=raw spice; } ha:text.2 { x1=2000; y1=-8000; dyntext=0; stroke=sym-decor; text=command; } @@ -1006,7 +873,7 @@ } ha:group.70 { uuid=emEhKEkrgdRFzXxchToAAABZ; src_uuid=iNOQfJpO6hT/HFDFGjoAAACK; - x=108000; y=120000; + x=56000; y=100000; li:objects { ha:polygon.1 { li:outline { @@ -1075,28 +942,170 @@ spice/model=bc817 } } - ha:connection.71 { + ha:connection.74 { li:conn { + /2/3/1 + /2/2/2/1 + } + } + ha:connection.75 { + li:conn { + /2/5/1 + /2/2/1/1 + } + } + ha:connection.87 { + li:conn { + /2/35/2/1 + /2/3/3 + } + } + ha:connection.89 { + li:conn { + /2/38/1 + /2/35/1/1 + } + } + ha:connection.91 { + li:conn { + /2/46/1/1 + /2/38/1 + } + } + ha:connection.102 { + li:conn { + /2/7/1/1 + /2/5/4 + } + } + ha:connection.103 { + li:conn { + /2/9/2/1 + /2/5/4 + } + } + ha:connection.104 { + li:conn { + /2/16/1 + /2/9/1/1 + } + } + ha:connection.105 { + li:conn { + /2/22/1 + /2/7/2/1 + } + } + ha:connection.106 { + li:conn { + /2/48/1/1 + /2/16/1 + } + } + ha:connection.107 { + li:conn { + /2/60/1/1 + /2/22/1 + } + } + ha:connection.108 { + li:conn { + /2/19/1 + /2/18/1/1 + } + } + ha:connection.109 { + li:conn { + /2/24/1 + /2/18/2/1 + } + } + ha:connection.116 { + li:conn { + /2/50/1/1 + /2/14/1 + } + } + ha:connection.120 { + li:conn { + /2/58/1/1 + /2/24/1 + } + } + ha:connection.121 { + li:conn { /2/70/2/1 /2/19/1 } } - ha:connection.72 { + ha:connection.122 { li:conn { /2/70/3/1 /2/5/1 } } - ha:connection.73 { + ha:connection.123 { li:conn { /2/70/4/1 /2/14/1 } } + ha:connection.124 { + li:conn { + /2/26/2/1 + /2/19/2 + } + } + ha:connection.125 { + li:conn { + /2/29/1 + /2/26/1/1 + } + } + ha:connection.126 { + li:conn { + /2/29/2 + /2/28/2/1 + } + } + ha:connection.127 { + li:conn { + /2/32/2 + /2/28/1/1 + } + } + ha:connection.130 { + li:conn { + /2/52/1/1 + /2/32/2 + } + } + ha:connection.133 { + li:conn { + /2/36/1 + /2/34/1/1 + } + } + ha:connection.134 { + li:conn { + /2/40/1 + /2/34/2/1 + } + } + ha:connection.135 { + li:conn { + /2/54/1/1 + /2/36/1 + } + } + ha:connection.136 { + li:conn { + /2/56/1/1 + /2/40/1 + } + } } ha:attrib { - drawing_min_height=200000 - drawing_min_width=287000 maintainer= page= print_page=A/4 @@ -1103,12 +1112,4 @@ title= } } - li:sch-rnd-conf-v1 { - ha:overwrite { - ha:editor { - grids_idx = 0 - grid = 1.0240 mm - } - } - } } Index: simulation/raw/10_bjt_amp_tr.svg =================================================================== --- simulation/raw/10_bjt_amp_tr.svg (revision 7859) +++ simulation/raw/10_bjt_amp_tr.svg (revision 7860) @@ -1,1058 +1,1040 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +