Profiling results ----------------- Total cpu time observed: 6278ms (out of 7216ms) Number of samples taken: 30 (once every 209ms) ======================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================== [1] 6278(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [5] 100.0% ------------------------------------------------------------------------ ??? [62] 100.0% [2] 1476(23.5%) 0(0.0%) approximate9 ...both-ends/src/core/taylor.rkt:11:0 loop [6] 41.7% for-loop [9] 27.4% for-loop [10] 17.2% taylor [14] 13.7% ------------------------------------------------------------------------ hash-ref! [49] 100.0% [3] 416(6.6%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:290:26 for-loop [8] 100.0% ------------------------------------------------------------------------ for-loop [100] 100.0% [4] 400(6.4%) 0(0.0%) expand-implicit (unknown source) resolve+shift28 [7] 100.0% ------------------------------------------------------------------------ ??? [1] 100.0% [5] 6278(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [11] 100.0% ------------------------------------------------------------------------ approximate9 [2] 100.0% [6] 616(9.8%) 0(0.0%) loop ...tection-both-ends/src/core/taylor.rkt:86:4 hash-ref! [49] 100.0% ------------------------------------------------------------------------ expand-id-application-form17 [101] 35.1% expand-implicit [4] 64.9% [7] 616(9.8%) 0(0.0%) resolve+shift28 (unknown source) fallback-loop [12] 100.0% ------------------------------------------------------------------------ ??? [3] 100.0% [8] 416(6.6%) 0(0.0%) for-loop ...n-both-ends/src/core/taylor.rkt:290:52 hash-ref! [49] 100.0% ------------------------------------------------------------------------ approximate9 [2] 100.0% [9] 404(6.4%) 0(0.0%) for-loop ...on-both-ends/src/core/taylor.rkt:29:18 taylor-quotient [13] 50.5% taylor [14] 49.5% ------------------------------------------------------------------------ approximate9 [2] 100.0% [10] 254(4.0%) 0(0.0%) for-loop ...ion-both-ends/src/core/taylor.rkt:19:9 ??? [42] 100.0% ------------------------------------------------------------------------ profile-thunk16 [5] 100.0% [11] 6278(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [15] 100.0% ------------------------------------------------------------------------ resolve+shift28 [7] 100.0% [12] 616(9.8%) 216(3.4%) fallback-loop (unknown source) for-loop [100] 64.9% ------------------------------------------------------------------------ hash-ref! [49] 49.5% for-loop [9] 50.5% [13] 404(6.4%) 0(0.0%) taylor-quotient ...-ends/src/core/taylor.rkt:333:0 first-nonzero-exp [16] 100.0% ------------------------------------------------------------------------ taylor [14] 25.1% approximate9 [2] 25.1% for-loop [9] 49.8% [14] 402(6.4%) 0(0.0%) taylor ...tion-both-ends/src/core/taylor.rkt:169:0 taylor-sqrt [17] 74.9% taylor [14] 25.1% ------------------------------------------------------------------------ for-loop [70] 8.3% run [11] 91.7% [15] 6278(100.0%) 200(3.2%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [18] 60.6% prepare-points-intervals [25] 22.6% oracle-error [20] 3.6% ??? [62] 3.3% get-final-combination [23] 3.2% errors [63] 1.7% *bit-width* [21] 1.7% ??? [22] 1.6% ------------------------------------------------------------------------ taylor-quotient [13] 100.0% [16] 404(6.4%) 0(0.0%) first-nonzero-exp ...nds/src/core/taylor.rkt:265:0 hash-ref! [49] 100.0% ------------------------------------------------------------------------ taylor [14] 100.0% [17] 402(6.4%) 0(0.0%) taylor-sqrt ...both-ends/src/core/taylor.rkt:351:0 f61 [19] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [15] 100.0% [18] 4216(67.2%) 0(0.0%) run-improve47 ...-both-ends/src/mainloop.rkt:346:0 for-loop [24] 94.3% prepare-points-intervals [25] 5.7% ------------------------------------------------------------------------ taylor-sqrt [17] 49.1% hash-ref! [49] 50.9% [19] 818(13.0%) 0(0.0%) f61 (unknown source) eval-const-expr [26] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [15] 100.0% [20] 228(3.6%) 0(0.0%) oracle-error ...ion-both-ends/src/points.rkt:190:0 for-loop [27] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [15] 100.0% [21] 218(3.5%) 218(3.5%) *bit-width* ...ection-both-ends/src/float.rkt:34:0 ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [15] 100.0% [22] 206(3.3%) 206(3.3%) ??? ...tion-both-ends/src/syntax/syntax.rkt:214:17 ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [15] 100.0% [23] 200(3.2%) 0(0.0%) get-final-combination ...ds/src/mainloop.rkt:371:0 infer-splitpoints [28] 100.0% ------------------------------------------------------------------------ run-improve47 [18] 100.0% [24] 3976(63.3%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:365:4 run-iter! [29] 100.0% ------------------------------------------------------------------------ run-improve47 [18] 14.5% .../more-scheme.rkt:261:28 [15] 85.5% [25] 1656(26.4%) 0(0.0%) prepare-points-intervals ...s/src/points.rkt:133:0 loop [30] 85.5% loop [99] 14.5% ------------------------------------------------------------------------ f61 [19] 100.0% [26] 818(13.0%) 0(0.0%) eval-const-expr ...oth-ends/src/programs.rkt:120:0 temp85_0 [69] 75.6% loop [99] 24.4% ------------------------------------------------------------------------ oracle-error [20] 100.0% [27] 228(3.6%) 0(0.0%) for-loop ...tection-both-ends/src/points.rkt:191:2 map [65] 100.0% ------------------------------------------------------------------------ get-final-combination [23] 100.0% [28] 200(3.2%) 0(0.0%) infer-splitpoints ...nds/src/core/regimes.rkt:33:0 for-loop [31] 100.0% ------------------------------------------------------------------------ for-loop [24] 100.0% [29] 3976(63.3%) 0(0.0%) run-iter! ...tion-both-ends/src/mainloop.rkt:327:0 finalize-iter! [32] 46.4% gen-series! [33] 37.1% simplify! [35] 11.4% localize! [38] 5.1% ------------------------------------------------------------------------ prepare-points-intervals [25] 100.0% [30] 1416(22.6%) 0(0.0%) loop ...w-detection-both-ends/src/points.rkt:145:4 loop [34] 70.8% ??? [36] 14.7% andmap [37] 14.5% ------------------------------------------------------------------------ infer-splitpoints [28] 100.0% [31] 200(3.2%) 0(0.0%) for-loop ...on-both-ends/src/core/regimes.rkt:45:6 option-on-expr [39] 100.0% ------------------------------------------------------------------------ run-iter! [29] 100.0% [32] 1844(29.4%) 0(0.0%) finalize-iter! ...both-ends/src/mainloop.rkt:278:0 ??? [40] 100.0% ------------------------------------------------------------------------ run-iter! [29] 100.0% [33] 1476(23.5%) 0(0.0%) gen-series! ...on-both-ends/src/mainloop.rkt:160:0 for-loop [41] 100.0% ------------------------------------------------------------------------ loop [30] 100.0% [34] 1002(16.0%) 200(3.2%) loop ...ow-detection-both-ends/src/points.rkt:81:2 ??? [42] 40.3% ??? [62] 39.7% ------------------------------------------------------------------------ run-iter! [29] 100.0% [35] 454(7.2%) 0(0.0%) simplify! ...tion-both-ends/src/mainloop.rkt:224:0 ??? [43] 100.0% ------------------------------------------------------------------------ loop [30] 100.0% [36] 208(3.3%) 208(3.3%) ??? ...ow-detection-both-ends/src/points.rkt:126:6 ------------------------------------------------------------------------ loop [30] 100.0% [37] 206(3.3%) 0(0.0%) andmap ...5/collects/racket/private/map.rkt:102:13 ordinary-value? [44] 100.0% ------------------------------------------------------------------------ run-iter! [29] 100.0% [38] 202(3.2%) 0(0.0%) localize! ...tion-both-ends/src/mainloop.rkt:127:0 localize-error [45] 100.0% ------------------------------------------------------------------------ for-loop [31] 100.0% [39] 200(3.2%) 0(0.0%) option-on-expr ...-ends/src/core/regimes.rkt:124:0 sort-context-on-expr [46] 100.0% ------------------------------------------------------------------------ finalize-iter! [32] 100.0% [40] 1844(29.4%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [47] 100.0% ------------------------------------------------------------------------ gen-series! [33] 100.0% [41] 1476(23.5%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:167:7 taylor-alt [48] 100.0% ------------------------------------------------------------------------ for-loop [10] 38.6% loop [34] 61.4% [42] 658(10.5%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ival-add [51] 61.4% f238 [52] 38.6% ------------------------------------------------------------------------ simplify! [35] 100.0% [43] 454(7.2%) 0(0.0%) ??? ...ection-both-ends/src/core/simplify.rkt:42:0 egraph-run [50] 100.0% ------------------------------------------------------------------------ andmap [37] 100.0% [44] 206(3.3%) 206(3.3%) ordinary-value? ...on-both-ends/src/float.rkt:51:0 ------------------------------------------------------------------------ localize! [38] 100.0% [45] 202(3.2%) 0(0.0%) localize-error ...-ends/src/core/localize.rkt:58:0 hash-ref! [49] 100.0% ------------------------------------------------------------------------ option-on-expr [39] 100.0% [46] 200(3.2%) 0(0.0%) sort-context-on-expr ...src/core/regimes.rkt:117:0 temp85_0 [69] 100.0% ------------------------------------------------------------------------ ??? [40] 100.0% [47] 1844(29.4%) 0(0.0%) for-loop ...-both-ends/src/core/alt-table.rkt:46:2 atab-add-altn [54] 55.3% errors [63] 44.7% ------------------------------------------------------------------------ for-loop [41] 100.0% [48] 1476(23.5%) 0(0.0%) taylor-alt ...ion-both-ends/src/mainloop.rkt:146:0 for-loop [53] 100.0% ------------------------------------------------------------------------ ??? [61] 3.9% for-loop [66] 4.2% for-loop [8] 8.1% ??? [58] 8.1% ??? [62] 14.7% loop [6] 14.7% localize-error [45] 19.8% first-nonzero-exp [16] 26.5% [49] 1022(16.3%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [57] 24.2% parse-loop15 [59] 19.8% ??? [55] 14.7% ??? [58] 8.1% ??? [3] 8.1% f61 [19] 8.1% taylor-quotient [13] 6.5% parse-loop74 [60] 6.5% ??? [61] 3.9% ------------------------------------------------------------------------ ??? [43] 100.0% [50] 454(7.2%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [56] 100.0% ------------------------------------------------------------------------ ??? [42] 100.0% [51] 404(6.4%) 0(0.0%) ival-add ...on-both-ends/src/biginterval.rkt:191:0 e-compute7 [79] 100.0% ------------------------------------------------------------------------ ??? [42] 100.0% [52] 254(4.0%) 254(4.0%) f238 (unknown source) ------------------------------------------------------------------------ taylor-alt [48] 100.0% [53] 1476(23.5%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:152:6 ??? [62] 100.0% ------------------------------------------------------------------------ for-loop [47] 100.0% [54] 1020(16.2%) 0(0.0%) atab-add-altn ...ends/src/core/alt-table.rkt:194:0 errors [63] 100.0% ------------------------------------------------------------------------ hash-ref! [49] 100.0% [55] 616(9.8%) 0(0.0%) ??? ...tection-both-ends/src/core/taylor.rkt:67:15 ??? [62] 100.0% ------------------------------------------------------------------------ egraph-run [50] 100.0% [56] 454(7.2%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [64] 100.0% ------------------------------------------------------------------------ hash-ref! [49] 100.0% [57] 420(6.7%) 204(3.2%) ??? ...ection-both-ends/src/core/taylor.rkt:300:23 for-loop [66] 51.4% ------------------------------------------------------------------------ hash-ref! [49] 100.0% [58] 416(6.6%) 0(0.0%) ??? ...tection-both-ends/src/core/taylor.rkt:44:15 hash-ref! [49] 100.0% ------------------------------------------------------------------------ hash-ref! [49] 100.0% [59] 202(3.2%) 0(0.0%) parse-loop15 (unknown source) map [65] 100.0% ------------------------------------------------------------------------ hash-ref! [49] 100.0% [60] 200(3.2%) 0(0.0%) parse-loop74 (unknown source) make-multiplication-node [67] 100.0% ------------------------------------------------------------------------ hash-ref! [49] 100.0% [61] 200(3.2%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:343:33 hash-ref! [49] 100.0% ------------------------------------------------------------------------ ??? [55] 9.0% loop [34] 17.4% .../more-scheme.rkt:261:28 [15] 18.2% location-do [68] 27.7% for-loop [53] 27.7% [62] 2292(36.5%) 418(6.7%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [68] 27.7% approximate9 [2] 27.7% ival-div [71] 17.4% hash-ref! [49] 9.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [15] 10.6% for-loop [47] 40.0% atab-add-altn [54] 49.5% [63] 2062(32.8%) 0(0.0%) errors ...detection-both-ends/src/points.rkt:203:0 for-loop [70] 60.5% temp85_0 [69] 29.7% make-sequence [75] 9.8% ------------------------------------------------------------------------ egraph-add-exprs [56] 100.0% [64] 454(7.2%) 0(0.0%) ??? ...ction-both-ends/src/core/simplify.rkt:102:6 for-loop [72] 54.2% egg-run-rules [74] 45.8% ------------------------------------------------------------------------ parse-loop15 [59] 47.0% for-loop [27] 53.0% [65] 430(6.8%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 ??? [73] 53.0% loop [76] 47.0% ------------------------------------------------------------------------ ??? [57] 100.0% [66] 216(3.4%) 0(0.0%) for-loop ...n-both-ends/src/core/taylor.rkt:303:27 hash-ref! [49] 100.0% ------------------------------------------------------------------------ parse-loop74 [60] 100.0% [67] 200(3.2%) 0(0.0%) make-multiplication-node .../core/reduce.rkt:232:0 make-multiplication-subnode [77] 100.0% ------------------------------------------------------------------------ location-do [68] 13.6% ??? [62] 86.4% [68] 1476(23.5%) 0(0.0%) location-do ...ion-both-ends/src/programs.rkt:63:0 ??? [62] 86.4% location-do [68] 13.6% ------------------------------------------------------------------------ sort-context-on-expr [46] 14.0% errors [63] 42.8% eval-const-expr [26] 43.2% [69] 1430(22.8%) 0(0.0%) temp85_0 (unknown source) compile15 [78] 100.0% ------------------------------------------------------------------------ errors [63] 100.0% [70] 1248(19.9%) 206(3.3%) for-loop ...tection-both-ends/src/points.rkt:205:2 .../more-scheme.rkt:261:28 [15] 83.5% ------------------------------------------------------------------------ ??? [62] 100.0% [71] 398(6.3%) 0(0.0%) ival-div ...on-both-ends/src/biginterval.rkt:242:0 e-compute7 [79] 100.0% ------------------------------------------------------------------------ ??? [64] 100.0% [72] 246(3.9%) 246(3.9%) for-loop ...-both-ends/src/core/simplify.rkt:121:2 ------------------------------------------------------------------------ map [65] 100.0% [73] 228(3.6%) 228(3.6%) ??? ...w-detection-both-ends/src/points.rkt:192:26 ------------------------------------------------------------------------ ??? [64] 100.0% [74] 208(3.3%) 208(3.3%) egg-run-rules ...-ends/src/core/simplify.rkt:108:0 ------------------------------------------------------------------------ errors [63] 100.0% [75] 202(3.2%) 0(0.0%) make-sequence ...ects/racket/private/for.rkt:533:2 ??? [80] 100.0% ------------------------------------------------------------------------ map [65] 5.3% loop [76] 94.7% [76] 202(3.2%) 0(0.0%) loop ...-7.5/collects/racket/private/map.rkt:54:19 loop [76] 94.7% ??? [81] 5.3% ------------------------------------------------------------------------ make-multiplication-node [67] 100.0% [77] 200(3.2%) 0(0.0%) make-multiplication-subnode ...re/reduce.rkt:242:0 compose [82] 100.0% ------------------------------------------------------------------------ temp85_0 [69] 100.0% [78] 1430(22.8%) 0(0.0%) compile15 (unknown source) temp91_0 [83] 100.0% ------------------------------------------------------------------------ ival-div [71] 49.6% ival-add [51] 50.4% [79] 802(12.8%) 0(0.0%) e-compute7 ...-both-ends/src/biginterval.rkt:154:0 bfadd [84] 50.1% ormap [86] 25.2% strong-immovable-endpoint-0? [87] 24.7% ------------------------------------------------------------------------ make-sequence [75] 100.0% [80] 202(3.2%) 202(3.2%) ??? ...-7.5/collects/racket/private/for.rkt:1231:9 ------------------------------------------------------------------------ loop [76] 100.0% [81] 202(3.2%) 0(0.0%) ??? ...ction-both-ends/src/core/localize.rkt:50:36 ulp-difference [85] 100.0% ------------------------------------------------------------------------ make-multiplication-subnode [77] 100.0% [82] 200(3.2%) 200(3.2%) compose ...collects/racket/private/list.rkt:385:12 ------------------------------------------------------------------------ compile15 [78] 100.0% [83] 1430(22.8%) 0(0.0%) temp91_0 (unknown source) temp118_0 [88] 100.0% ------------------------------------------------------------------------ e-compute7 [79] 100.0% [84] 402(6.4%) 200(3.2%) bfadd ...-lib/math/private/bigfloat/mpfr.rkt:835:4 ??? [90] 50.2% ------------------------------------------------------------------------ ??? [81] 100.0% [85] 202(3.2%) 202(3.2%) ulp-difference ...ion-both-ends/src/float.rkt:19:0 ------------------------------------------------------------------------ e-compute7 [79] 100.0% [86] 202(3.2%) 0(0.0%) ormap ....5/collects/racket/private/map.rkt:141:13 strong-immovable-endpoint? [89] 100.0% ------------------------------------------------------------------------ e-compute7 [79] 100.0% [87] 198(3.2%) 198(3.2%) strong-immovable-endpoint-0? ...interval.rkt:122:0 ------------------------------------------------------------------------ temp91_0 [83] 100.0% [88] 1430(22.8%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [91] 100.0% ------------------------------------------------------------------------ ormap [86] 100.0% [89] 202(3.2%) 202(3.2%) strong-immovable-endpoint? ...iginterval.rkt:112:0 ------------------------------------------------------------------------ bfadd [84] 100.0% [90] 202(3.2%) 202(3.2%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 ------------------------------------------------------------------------ loop [99] 23.5% temp118_0 [88] 76.5% [91] 1870(29.8%) 0(0.0%) expand-capturing-lifts (unknown source) lambda-clause-expander [92] 76.5% loop [99] 12.8% dispatch-transformer41 [93] 10.7% ------------------------------------------------------------------------ expand-capturing-lifts [91] 100.0% [92] 1430(22.8%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [94] 100.0% ------------------------------------------------------------------------ expand-capturing-lifts [91] 100.0% [93] 200(3.2%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [95] 100.0% ------------------------------------------------------------------------ for-loop [100] 43.4% lambda-clause-expander [92] 56.6% [94] 1430(22.8%) 0(0.0%) finish-bodys (unknown source) for-loop [100] 100.0% ------------------------------------------------------------------------ dispatch-transformer41 [93] 100.0% [95] 200(3.2%) 0(0.0%) apply-transformer52 (unknown source) apply-post-expansion [96] 100.0% ------------------------------------------------------------------------ apply-transformer52 [95] 100.0% [96] 200(3.2%) 0(0.0%) apply-post-expansion (unknown source) gf [97] 100.0% ------------------------------------------------------------------------ apply-post-expansion [96] 12.5% loop [99] 87.5% [97] 200(3.2%) 0(0.0%) gf (unknown source) loop [99] 87.5% syntax-e/no-taint [98] 12.5% ------------------------------------------------------------------------ gf [97] 100.0% [98] 200(3.2%) 0(0.0%) syntax-e/no-taint (unknown source) loop [99] 100.0% ------------------------------------------------------------------------ syntax-e/no-taint [98] 2.3% eval-const-expr [26] 2.3% expand-capturing-lifts [91] 12.2% prepare-points-intervals [25] 12.2% gf [97] 16.4% loop [99] 21.6% for-loop [100] 32.9% [99] 656(10.4%) 200(3.2%) loop (unknown source) expand-id-application-form17 [101] 32.9% loop [99] 21.6% gf [97] 16.4% expand-capturing-lifts [91] 14.5% for-loop [100] 12.2% ------------------------------------------------------------------------ fallback-loop [12] 5.1% run-module-instance!125 [103] 7.2% loop [99] 7.2% for-loop [100] 16.0% finish-bodys [94] 64.6% [100] 1670(26.6%) 802(12.8%) for-loop (unknown source) finish-bodys [94] 27.7% for-loop [100] 16.0% run-module-instance!125 [103] 7.2% temp37_0 [102] 7.2% expand-implicit [4] 5.1% add-local-binding!39 [104] 4.0% expand-id-application-form17 [101] 2.1% loop [99] 1.6% ------------------------------------------------------------------------ for-loop [100] 49.8% loop [99] 50.2% [101] 430(6.8%) 0(0.0%) expand-id-application-form17 (unknown source) resolve+shift28 [7] 50.2% binding-lookup52 [106] 49.8% ------------------------------------------------------------------------ for-loop [100] 100.0% [102] 240(3.8%) 0(0.0%) temp37_0 (unknown source) [running body] [105] 100.0% ------------------------------------------------------------------------ for-loop [100] 100.0% [103] 240(3.8%) 0(0.0%) run-module-instance!125 (unknown source) for-loop [100] 100.0% ------------------------------------------------------------------------ for-loop [100] 100.0% [104] 198(3.2%) 198(3.2%) add-local-binding!39 (unknown source) ------------------------------------------------------------------------ temp37_0 [102] 100.0% [105] 240(3.8%) 0(0.0%) [running body] .../collects/racket/format.rkt":##f .get-syntax-literal! [107] 100.0% ------------------------------------------------------------------------ expand-id-application-form17 [101]100.0% [106] 214(3.4%) 214(3.4%) binding-lookup52 (unknown source) ------------------------------------------------------------------------ [running body] [105] 100.0% [107] 240(3.8%) 0(0.0%) .get-syntax-literal! (unknown source) .deserialize-syntax [108] 100.0% ------------------------------------------------------------------------ .get-syntax-literal! [107] 100.0% [108] 240(3.8%) 240(3.8%) .deserialize-syntax (unknown source) ------------------------------------------------------------------------