Profiling results ----------------- Total cpu time observed: 9610ms (out of 9808ms) Number of samples taken: 48 (once every 200ms) ======================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================== [1] 9610(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [7] 100.0% ------------------------------------------------------------------------ ??? [53] 100.0% [2] 1904(19.8%) 0(0.0%) approximate9 ...stversion/src/core/taylor.rkt:12:0 loop [8] 79.0% for-loop [14] 10.5% taylor-sqrt [12] 10.5% ------------------------------------------------------------------------ hash-ref! [60] 100.0% [3] 662(6.9%) 0(0.0%) ??? ...math-testversion/src/core/taylor.rkt:291:26 for-loop [10] 100.0% ------------------------------------------------------------------------ hash-ref! [60] 100.0% [4] 662(6.9%) 0(0.0%) ??? ...math-testversion/src/core/taylor.rkt:301:23 for-loop [9] 100.0% ------------------------------------------------------------------------ matcher [62] 100.0% [5] 614(6.4%) 0(0.0%) ??? ...ath-testversion/src/core/matcher.rkt:130:11 for-loop [11] 100.0% ------------------------------------------------------------------------ hash-ref! [60] 100.0% [6] 446(4.6%) 0(0.0%) ??? ...math-testversion/src/core/taylor.rkt:363:30 ??? [13] 53.8% hash-ref! [60] 46.2% ------------------------------------------------------------------------ ??? [1] 100.0% [7] 9610(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [15] 100.0% ------------------------------------------------------------------------ approximate9 [2] 100.0% [8] 1504(15.7%) 0(0.0%) loop ...gmath-testversion/src/core/taylor.rkt:87:4 ??? [53] 100.0% ------------------------------------------------------------------------ ??? [4] 100.0% [9] 662(6.9%) 0(0.0%) for-loop ...testversion/src/core/taylor.rkt:304:27 hash-ref! [60] 100.0% ------------------------------------------------------------------------ ??? [3] 100.0% [10] 662(6.9%) 0(0.0%) for-loop ...testversion/src/core/taylor.rkt:291:52 hash-ref! [60] 100.0% ------------------------------------------------------------------------ ??? [5] 100.0% [11] 614(6.4%) 0(0.0%) for-loop ...estversion/src/core/matcher.rkt:132:15 matcher [62] 100.0% ------------------------------------------------------------------------ approximate9 [2] 50.0% map [83] 50.0% [12] 400(4.2%) 0(0.0%) taylor-sqrt ...stversion/src/core/taylor.rkt:352:0 hash-ref! [60] 50.0% first-nonzero-exp [16] 50.0% ------------------------------------------------------------------------ ??? [6] 100.0% [13] 240(2.5%) 0(0.0%) ??? ...math-testversion/src/core/taylor.rkt:294:19 hash-ref! [60] 100.0% ------------------------------------------------------------------------ approximate9 [2] 100.0% [14] 200(2.1%) 0(0.0%) for-loop ...-testversion/src/core/taylor.rkt:30:18 taylor [17] 100.0% ------------------------------------------------------------------------ profile-thunk16 [7] 100.0% [15] 9610(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [18] 100.0% ------------------------------------------------------------------------ taylor-sqrt [12] 100.0% [16] 200(2.1%) 0(0.0%) first-nonzero-exp ...ion/src/core/taylor.rkt:266:0 hash-ref! [60] 100.0% ------------------------------------------------------------------------ for-loop [14] 100.0% [17] 200(2.1%) 0(0.0%) taylor ...th-testversion/src/core/taylor.rkt:170:0 map [83] 100.0% ------------------------------------------------------------------------ for-loop [63] 3.0% run [15] 97.0% [18] 9610(100.0%) 184(1.9%) .../more-scheme.rkt:261:28 (unknown source) prepare-points-intervals [19] 52.5% run-improve47 [20] 41.6% ??? [28] 2.1% eval-errors [21] 1.9% errors [54] 1.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [18] 100.0% [19] 5050(52.5%) 0(0.0%) prepare-points-intervals ...n/src/points.rkt:110:0 loop [22] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [18] 100.0% [20] 4196(43.7%) 0(0.0%) run-improve47 ...estversion/src/mainloop.rkt:346:0 for-loop [23] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [18] 100.0% [21] 180(1.9%) 0(0.0%) eval-errors ...th-testversion/src/points.rkt:179:0 for-loop [24] 100.0% ------------------------------------------------------------------------ prepare-points-intervals [19] 100.0% [22] 5050(52.5%) 406(4.2%) loop ...e/eggmath-testversion/src/points.rkt:123:4 loop [26] 77.1% ??? [27] 14.9% ------------------------------------------------------------------------ run-improve47 [20] 100.0% [23] 4196(43.7%) 0(0.0%) for-loop ...ath-testversion/src/mainloop.rkt:365:4 run-iter! [25] 100.0% ------------------------------------------------------------------------ eval-errors [21] 100.0% [24] 180(1.9%) 0(0.0%) for-loop ...gmath-testversion/src/points.rkt:181:2 ??? [28] 100.0% ------------------------------------------------------------------------ for-loop [23] 100.0% [25] 4196(43.7%) 0(0.0%) run-iter! ...th-testversion/src/mainloop.rkt:327:0 gen-series! [29] 45.4% finalize-iter! [30] 24.0% simplify! [31] 16.0% gen-rewrites! [32] 14.6% ------------------------------------------------------------------------ loop [22] 100.0% [26] 3894(40.5%) 200(2.1%) loop ...ie/eggmath-testversion/src/points.rkt:81:2 ??? [28] 84.5% hash-update! [33] 5.2% ??? [36] 5.1% ------------------------------------------------------------------------ loop [22] 100.0% [27] 750(7.8%) 564(5.9%) ??? ...ie/eggmath-testversion/src/points.rkt:106:2 ??? [53] 24.8% ------------------------------------------------------------------------ for-loop [24] 4.6% .../more-scheme.rkt:261:28 [18] 10.3% loop [26] 85.0% [28] 3872(40.3%) 200(2.1%) ??? .../eggmath-testversion/src/programs.rkt:115:2 ??? [34] 55.0% ??? [53] 24.9% ??? [39] 15.0% ------------------------------------------------------------------------ run-iter! [25] 100.0% [29] 1904(19.8%) 0(0.0%) gen-series! ...-testversion/src/mainloop.rkt:160:0 for-loop [35] 100.0% ------------------------------------------------------------------------ run-iter! [25] 100.0% [30] 1006(10.5%) 0(0.0%) finalize-iter! ...stversion/src/mainloop.rkt:278:0 ??? [36] 100.0% ------------------------------------------------------------------------ run-iter! [25] 100.0% [31] 672(7.0%) 0(0.0%) simplify! ...th-testversion/src/mainloop.rkt:224:0 ??? [37] 100.0% ------------------------------------------------------------------------ run-iter! [25] 100.0% [32] 614(6.4%) 0(0.0%) gen-rewrites! ...estversion/src/mainloop.rkt:183:0 for-loop [38] 100.0% ------------------------------------------------------------------------ loop [26] 100.0% [33] 202(2.1%) 202(2.1%) hash-update! ...cket/private/more-scheme.rkt:365:4 ------------------------------------------------------------------------ ??? [28] 100.0% [34] 2128(22.1%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ival-sub [42] 44.9% ival-sqrt [45] 27.8% ival-add [46] 17.9% ival-log [47] 9.4% ------------------------------------------------------------------------ gen-series! [29] 100.0% [35] 1904(19.8%) 0(0.0%) for-loop ...ath-testversion/src/mainloop.rkt:167:7 taylor-alt [40] 100.0% ------------------------------------------------------------------------ loop [26] 16.6% finalize-iter! [30] 83.4% [36] 1206(12.5%) 200(2.1%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [41] 83.4% ------------------------------------------------------------------------ simplify! [31] 100.0% [37] 672(7.0%) 0(0.0%) ??? ...math-testversion/src/core/simplify.rkt:60:0 egraph-run [43] 100.0% ------------------------------------------------------------------------ gen-rewrites! [32] 100.0% [38] 614(6.4%) 0(0.0%) for-loop ...th-testversion/src/mainloop.rkt:191:11 rewrite-expression-head20 [44] 100.0% ------------------------------------------------------------------------ ??? [28] 100.0% [39] 580(6.0%) 580(6.0%) ??? ...th-testversion/src/syntax/syntax.rkt:214:17 ------------------------------------------------------------------------ for-loop [35] 100.0% [40] 1904(19.8%) 0(0.0%) taylor-alt ...h-testversion/src/mainloop.rkt:146:0 for-loop [48] 100.0% ------------------------------------------------------------------------ ??? [36] 100.0% [41] 1006(10.5%) 0(0.0%) for-loop ...estversion/src/core/alt-table.rkt:55:2 atab-add-altn [51] 40.0% errors [54] 39.8% loop [52] 20.3% ------------------------------------------------------------------------ ??? [34] 100.0% [42] 956(9.9%) 372(3.9%) ival-sub ...-testversion/src/biginterval.rkt:107:0 bfmul [70] 61.1% ------------------------------------------------------------------------ ??? [37] 100.0% [43] 672(7.0%) 0(0.0%) egraph-run ...estversion/src/core/eggmath.rkt:50:0 egraph-add-exprs [49] 100.0% ------------------------------------------------------------------------ for-loop [38] 100.0% [44] 614(6.4%) 0(0.0%) rewrite-expression-head20 ...core/matcher.rkt:87:0 rewriter [50] 100.0% ------------------------------------------------------------------------ ??? [34] 100.0% [45] 592(6.2%) 592(6.2%) ival-sqrt ...testversion/src/biginterval.rkt:211:0 ------------------------------------------------------------------------ ??? [34] 100.0% [46] 380(4.0%) 0(0.0%) ival-add ...-testversion/src/biginterval.rkt:101:0 bfmul [70] 100.0% ------------------------------------------------------------------------ ??? [34] 100.0% [47] 200(2.1%) 200(2.1%) ival-log ...-testversion/src/biginterval.rkt:201:0 ------------------------------------------------------------------------ taylor-alt [40] 100.0% [48] 1904(19.8%) 0(0.0%) for-loop ...ath-testversion/src/mainloop.rkt:152:6 ??? [53] 100.0% ------------------------------------------------------------------------ egraph-run [43] 100.0% [49] 672(7.0%) 0(0.0%) egraph-add-exprs ...ion/src/core/eggmath.rkt:114:0 ??? [55] 100.0% ------------------------------------------------------------------------ rewrite-expression-head20 [44] 36.2% matcher [62] 63.8% [50] 614(6.4%) 0(0.0%) rewriter ...-testversion/src/core/matcher.rkt:90:2 for-loop [56] 75.1% *rules* [57] 24.9% ------------------------------------------------------------------------ for-loop [41] 100.0% [51] 402(4.2%) 0(0.0%) atab-add-altn ...sion/src/core/alt-table.rkt:203:0 for-loop [58] 50.2% errors [54] 49.8% ------------------------------------------------------------------------ for-loop [41] 100.0% [52] 204(2.1%) 0(0.0%) loop ...h-testversion/src/core/alt-table.rkt:177:2 map [83] 100.0% ------------------------------------------------------------------------ ??? [27] 6.1% loop [8] 16.4% location-do [59] 23.0% for-loop [48] 23.0% ??? [28] 31.6% [53] 3054(31.8%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [59] 23.0% approximate9 [2] 23.0% mk-ival [64] 19.0% hash-ref! [60] 16.4% ival-mult [65] 12.6% sample-multi-bounded [67] 6.1% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [18] 23.5% atab-add-altn [51] 25.5% for-loop [41] 51.0% [54] 784(8.2%) 0(0.0%) errors ...eggmath-testversion/src/points.rkt:201:0 for-loop [63] 74.5% eval-prog [66] 25.5% ------------------------------------------------------------------------ egraph-add-exprs [49] 100.0% [55] 672(7.0%) 0(0.0%) ??? ...math-testversion/src/core/simplify.rkt:73:8 egg-run-rules [61] 100.0% ------------------------------------------------------------------------ rewriter [50] 100.0% [56] 614(6.4%) 0(0.0%) for-loop ...-testversion/src/core/matcher.rkt:92:4 matcher [62] 100.0% ------------------------------------------------------------------------ rewriter [50] 100.0% [57] 406(4.2%) 0(0.0%) *rules* ...-testversion/src/syntax/rules.rkt:669:0 for-loop [99] 100.0% ------------------------------------------------------------------------ atab-add-altn [51] 100.0% [58] 202(2.1%) 202(2.1%) for-loop ...stversion/src/core/alt-table.rkt:119:2 ------------------------------------------------------------------------ ??? [53] 40.0% location-do [59] 60.0% [59] 1904(19.8%) 0(0.0%) location-do ...h-testversion/src/programs.rkt:64:0 location-do [59] 60.0% ??? [53] 40.0% ------------------------------------------------------------------------ ??? [6] 2.2% ??? [13] 2.5% for-loop [10] 8.5% for-loop [9] 8.5% first-nonzero-exp [16] 10.5% taylor-sqrt [12] 10.5% ??? [69] 28.7% ??? [53] 28.7% [60] 1904(19.8%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 simplify [68] 49.7% ??? [69] 28.7% ??? [4] 8.5% ??? [3] 8.5% ??? [6] 4.7% ------------------------------------------------------------------------ ??? [55] 100.0% [61] 672(7.0%) 0(0.0%) egg-run-rules ...ersion/src/core/simplify.rkt:80:0 for-loop [71] 100.0% ------------------------------------------------------------------------ for-loop [11] 50.0% for-loop [56] 50.0% [62] 614(6.4%) 208(2.2%) matcher ...-testversion/src/core/matcher.rkt:118:2 ??? [5] 50.0% rewriter [50] 44.4% ------------------------------------------------------------------------ errors [54] 100.0% [63] 584(6.1%) 0(0.0%) for-loop ...gmath-testversion/src/points.rkt:203:2 .../more-scheme.rkt:261:28 [18] 100.0% ------------------------------------------------------------------------ ??? [53] 100.0% [64] 580(6.0%) 0(0.0%) mk-ival ...th-testversion/src/biginterval.rkt:65:0 bf [72] 100.0% ------------------------------------------------------------------------ ??? [53] 100.0% [65] 384(4.0%) 0(0.0%) ival-mult ...testversion/src/biginterval.rkt:119:0 bfmul [70] 100.0% ------------------------------------------------------------------------ errors [54] 100.0% [66] 200(2.1%) 0(0.0%) eval-prog ...ath-testversion/src/programs.rkt:83:0 temp85_0 [82] 100.0% ------------------------------------------------------------------------ ??? [53] 100.0% [67] 186(1.9%) 0(0.0%) sample-multi-bounded ...ersion/src/points.rkt:15:0 random-ranges [73] 100.0% ------------------------------------------------------------------------ hash-ref! [60] 100.0% [68] 1904(19.8%) 0(0.0%) simplify ...h-testversion/src/core/reduce.rkt:16:0 parse-loop80 [74] 87.4% debug5 [77] 12.6% ------------------------------------------------------------------------ hash-ref! [60] 100.0% [69] 1504(15.7%) 0(0.0%) ??? ...gmath-testversion/src/core/taylor.rkt:45:15 hash-ref! [60] 100.0% ------------------------------------------------------------------------ ival-add [46] 28.2% ival-mult [65] 28.5% ival-sub [42] 43.3% [70] 1348(14.0%) 184(1.9%) bfmul ...-lib/math/private/bigfloat/mpfr.rkt:835:4 ??? [76] 43.3% new-mpfr [75] 43.0% ------------------------------------------------------------------------ egg-run-rules [61] 100.0% [71] 672(7.0%) 672(7.0%) for-loop ...testversion/src/core/simplify.rkt:85:2 ------------------------------------------------------------------------ mk-ival [64] 100.0% [72] 580(6.0%) 0(0.0%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 new-mpfr [75] 66.9% ??? [76] 33.1% ------------------------------------------------------------------------ sample-multi-bounded [67] 100.0% [73] 186(1.9%) 0(0.0%) random-ranges ...-testversion/src/common.rkt:171:0 cons/c [78] 100.0% ------------------------------------------------------------------------ loop [97] 7.4% parse-loop80 [74] 29.2% simplify [68] 63.4% [74] 1664(17.3%) 0(0.0%) parse-loop80 (unknown source) eval-const-expr [79] 51.3% parse-loop80 [74] 29.2% f67 [80] 12.1% loop [97] 7.4% ------------------------------------------------------------------------ bf [72] 40.1% bfmul [70] 59.9% [75] 968(10.1%) 968(10.1%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 ------------------------------------------------------------------------ bf [72] 24.7% bfmul [70] 75.3% [76] 776(8.1%) 776(8.1%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 ------------------------------------------------------------------------ simplify [68] 100.0% [77] 240(2.5%) 240(2.5%) debug5 .../eggmath-testversion/src/debug.rkt:102:0 ------------------------------------------------------------------------ random-ranges [73] 100.0% [78] 186(1.9%) 0(0.0%) cons/c .../racket/contract/private/guts.rkt:500:15 coerce-contract [81] 100.0% ------------------------------------------------------------------------ f67 [80] 13.8% parse-loop80 [74] 86.2% [79] 1464(15.2%) 0(0.0%) eval-const-expr ...tversion/src/programs.rkt:118:0 temp85_0 [82] 100.0% ------------------------------------------------------------------------ map [83] 24.9% parse-loop80 [74] 75.1% [80] 402(4.2%) 0(0.0%) f67 (unknown source) eval-const-expr [79] 50.2% map [83] 49.8% ------------------------------------------------------------------------ cons/c [78] 100.0% [81] 186(1.9%) 0(0.0%) coerce-contract ...contract/private/guts.rkt:307:0 coerce-contract/f [84] 100.0% ------------------------------------------------------------------------ eval-prog [66] 12.0% eval-const-expr [79] 88.0% [82] 1664(17.3%) 0(0.0%) temp85_0 (unknown source) compile15 [85] 100.0% ------------------------------------------------------------------------ taylor [17] 16.5% f67 [80] 33.0% loop [52] 50.5% [83] 404(4.2%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 loop [86] 50.5% taylor-sqrt [12] 16.5% f67 [80] 16.5% simplify* [87] 16.5% ------------------------------------------------------------------------ coerce-contract [81] 100.0% [84] 186(1.9%) 0(0.0%) coerce-contract/f ...ntract/private/guts.rkt:372:0 coerce-simple-value [88] 100.0% ------------------------------------------------------------------------ temp85_0 [82] 100.0% [85] 1664(17.3%) 0(0.0%) compile15 (unknown source) temp91_0 [89] 100.0% ------------------------------------------------------------------------ map [83] 1.6% loop [86] 98.4% [86] 204(2.1%) 0(0.0%) loop ...-7.5/collects/racket/private/map.rkt:40:19 loop [86] 98.4% ??? [90] 1.6% ------------------------------------------------------------------------ map [83] 100.0% [87] 200(2.1%) 200(2.1%) simplify* ...-testversion/src/core/reduce.rkt:31:0 ------------------------------------------------------------------------ coerce-contract/f [84] 100.0% [88] 186(1.9%) 186(1.9%) coerce-simple-value ...ract/private/guts.rkt:385:0 ------------------------------------------------------------------------ compile15 [85] 100.0% [89] 1664(17.3%) 0(0.0%) temp91_0 (unknown source) temp118_0 [91] 75.6% compile-top9 [92] 24.4% ------------------------------------------------------------------------ loop [86] 100.0% [90] 204(2.1%) 204(2.1%) ??? ...h-testversion/src/core/alt-table.rkt:194:12 ------------------------------------------------------------------------ temp91_0 [89] 100.0% [91] 1258(13.1%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [93] 100.0% ------------------------------------------------------------------------ temp91_0 [89] 100.0% [92] 406(4.2%) 0(0.0%) compile-top9 (unknown source) compile-forms33 [94] 100.0% ------------------------------------------------------------------------ temp118_0 [91] 100.0% [93] 1258(13.1%) 0(0.0%) expand-capturing-lifts (unknown source) lambda-clause-expander [95] 51.5% dispatch-transformer41 [100] 32.0% expand-id-application-form17 [96] 16.5% ------------------------------------------------------------------------ compile-top9 [92] 100.0% [94] 406(4.2%) 0(0.0%) compile-forms33 (unknown source) for-loop [99] 100.0% ------------------------------------------------------------------------ expand-capturing-lifts [93] 100.0% [95] 648(6.7%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [98] 66.7% loop [97] 33.3% ------------------------------------------------------------------------ expand-capturing-lifts [93] 100.0% [96] 208(2.2%) 0(0.0%) expand-id-application-form17 (unknown source) resolve+shift28 [106] 100.0% ------------------------------------------------------------------------ lambda-clause-expander [95] 33.8% parse-loop80 [74] 66.2% [97] 640(6.7%) 0(0.0%) loop (unknown source) parse-loop80 [74] 66.2% dispatch-transformer41 [100] 33.8% ------------------------------------------------------------------------ lambda-clause-expander [95] 29.2% for-loop [99] 70.8% [98] 432(4.5%) 0(0.0%) finish-bodys (unknown source) for-loop [99] 100.0% ------------------------------------------------------------------------ for-loop [99] 10.1% finish-bodys [98] 24.6% *rules* [57] 32.6% compile-forms33 [94] 32.6% [99] 1244(12.9%) 200(2.1%) for-loop (unknown source) compile-module-linklet57 [102] 32.6% finish-bodys [98] 17.4% ormap [105] 16.6% for-loop [99] 10.1% expand-implicit [103] 4.3% expand-identifier [104] 2.9% ------------------------------------------------------------------------ loop [97] 35.0% expand-capturing-lifts [93] 65.0% [100] 618(6.4%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [101] 100.0% ------------------------------------------------------------------------ dispatch-transformer41 [100] 100.0% [101] 618(6.4%) 202(2.1%) apply-transformer52 (unknown source) apply-transformer-in-context [107] 67.3% ------------------------------------------------------------------------ for-loop [99] 100.0% [102] 406(4.2%) 406(4.2%) compile-module-linklet57 (unknown source) ------------------------------------------------------------------------ for-loop [99] 100.0% [103] 216(2.2%) 216(2.2%) expand-implicit (unknown source) ------------------------------------------------------------------------ for-loop [99] 100.0% [104] 216(2.2%) 0(0.0%) expand-identifier (unknown source) resolve+shift28 [106] 100.0% ------------------------------------------------------------------------ for-loop [99] 100.0% [105] 206(2.1%) 0(0.0%) ormap ....5/collects/racket/private/map.rkt:141:13 flag-set? [108] 100.0% ------------------------------------------------------------------------ expand-id-application-form17 [96] 49.1% expand-identifier [104] 50.9% [106] 424(4.4%) 208(2.2%) resolve+shift28 (unknown source) fallback-loop [109] 50.9% ------------------------------------------------------------------------ apply-transformer52 [101] 100.0% [107] 416(4.3%) 416(4.3%) apply-transformer-in-context (unknown source) ------------------------------------------------------------------------ ormap [105] 100.0% [108] 206(2.1%) 206(2.1%) flag-set? ...gmath-testversion/src/config.rkt:28:0 ------------------------------------------------------------------------ resolve+shift28 [106] 100.0% [109] 216(2.2%) 216(2.2%) fallback-loop (unknown source) ------------------------------------------------------------------------