Profiling results ----------------- Total cpu time observed: 6866ms (out of 7000ms) Number of samples taken: 37 (once every 186ms) ======================================================================= Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================= [1] 6866(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [6] 100.0% ----------------------------------------------------------------------- ??? [95] 100.0% [2] 936(13.6%) 0(0.0%) approximate9 ...ie/master/src/core/taylor.rkt:11:0 loop [7] 80.6% for-loop [11] 19.4% ----------------------------------------------------------------------- hash-ref! [13] 100.0% [3] 754(11.0%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:44:15 hash-ref! [13] 75.6% ??? [10] 24.4% ----------------------------------------------------------------------- hash-ref! [13] 100.0% [4] 754(11.0%) 0(0.0%) parse-loop75 (unknown source) eval-const-expr [8] 100.0% ----------------------------------------------------------------------- loop [84] 33.2% for-loop [100] 66.8% [5] 560(8.2%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [9] 100.0% ----------------------------------------------------------------------- ??? [1] 100.0% [6] 6866(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [12] 100.0% ----------------------------------------------------------------------- approximate9 [2] 100.0% [7] 754(11.0%) 0(0.0%) loop ...ies/herbie/master/src/core/taylor.rkt:86:4 hash-ref! [13] 100.0% ----------------------------------------------------------------------- parse-loop75 [4] 100.0% [8] 754(11.0%) 0(0.0%) eval-const-expr ...e/master/src/programs.rkt:117:0 temp85_0 [67] 100.0% ----------------------------------------------------------------------- syntax-e [5] 100.0% [9] 560(8.2%) 0(0.0%) syntax-e/no-taint (unknown source) loop [84] 100.0% ----------------------------------------------------------------------- ??? [3] 100.0% [10] 184(2.7%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:293:19 hash-ref! [13] 100.0% ----------------------------------------------------------------------- approximate9 [2] 100.0% [11] 182(2.7%) 0(0.0%) for-loop ...erbie/master/src/core/taylor.rkt:29:18 taylor [14] 100.0% ----------------------------------------------------------------------- profile-thunk16 [6] 100.0% [12] 6866(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% ----------------------------------------------------------------------- ??? [10] 6.1% ??? [17] 12.3% ??? [16] 12.7% ??? [3] 18.9% ??? [95] 25.0% loop [7] 25.0% [13] 754(11.0%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [16] 37.7% ??? [3] 25.0% parse-loop75 [4] 25.0% ??? [17] 12.3% ----------------------------------------------------------------------- map [19] 50.0% for-loop [11] 50.0% [14] 182(2.7%) 0(0.0%) taylor .../herbie/master/src/core/taylor.rkt:169:0 map [19] 50.0% debug5 [18] 50.0% ----------------------------------------------------------------------- for-loop [62] 5.5% run [12] 94.5% [15] 6866(100.0%) 0(0.0%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [20] 59.3% prepare-points-intervals [21] 28.2% ??? [91] 4.1% get-final-combination [23] 2.7% eval-errors [24] 2.2% oracle-error [25] 2.2% *bit-width* [22] 1.4% ----------------------------------------------------------------------- hash-ref! [13] 100.0% [16] 754(11.0%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:67:15 ??? [95] 74.5% hash-ref! [13] 25.5% ----------------------------------------------------------------------- hash-ref! [13] 100.0% [17] 370(5.4%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:343:33 hash-ref! [13] 100.0% ----------------------------------------------------------------------- taylor [14] 100.0% [18] 182(2.7%) 0(0.0%) debug5 ...htlies/herbie/master/src/debug.rkt:102:0 ??? [40] 100.0% ----------------------------------------------------------------------- taylor [14] 100.0% [19] 182(2.7%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 taylor [14] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [15] 100.0% [20] 4444(64.7%) 0(0.0%) run-improve47 ...bie/master/src/mainloop.rkt:347:0 for-loop [26] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [15] 100.0% [21] 1938(28.2%) 0(0.0%) prepare-points-intervals ...r/src/points.rkt:109:0 loop [27] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [15] 100.0% [22] 190(2.8%) 190(2.8%) *bit-width* ...es/herbie/master/src/float.rkt:35:0 ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [15] 100.0% [23] 186(2.7%) 0(0.0%) get-final-combination ...er/src/mainloop.rkt:372:0 infer-splitpoints [28] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [15] 100.0% [24] 150(2.2%) 0(0.0%) eval-errors .../herbie/master/src/points.rkt:178:0 for-loop [29] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [15] 100.0% [25] 148(2.2%) 0(0.0%) oracle-error ...herbie/master/src/points.rkt:187:0 for-loop [30] 100.0% ----------------------------------------------------------------------- run-improve47 [20] 100.0% [26] 4444(64.7%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:366:4 run-iter! [31] 100.0% ----------------------------------------------------------------------- prepare-points-intervals [21] 100.0% [27] 1938(28.2%) 360(5.2%) loop ...ghtlies/herbie/master/src/points.rkt:122:4 ??? [32] 45.4% loop [33] 36.0% ----------------------------------------------------------------------- get-final-combination [23] 100.0% [28] 186(2.7%) 0(0.0%) infer-splitpoints ...ter/src/core/regimes.rkt:33:0 for-loop [34] 100.0% ----------------------------------------------------------------------- eval-errors [24] 100.0% [29] 150(2.2%) 0(0.0%) for-loop ...ies/herbie/master/src/points.rkt:180:2 ??? [91] 100.0% ----------------------------------------------------------------------- oracle-error [25] 100.0% [30] 148(2.2%) 0(0.0%) for-loop ...ies/herbie/master/src/points.rkt:188:2 loop [84] 100.0% ----------------------------------------------------------------------- for-loop [26] 100.0% [31] 4444(64.7%) 0(0.0%) run-iter! .../herbie/master/src/mainloop.rkt:328:0 finalize-iter! [35] 48.6% gen-series! [36] 21.1% simplify! [37] 18.9% gen-rewrites! [38] 11.4% ----------------------------------------------------------------------- loop [27] 100.0% [32] 880(12.8%) 180(2.6%) ??? ...ightlies/herbie/master/src/points.rkt:105:2 ??? [95] 56.1% ??? [96] 23.4% ----------------------------------------------------------------------- loop [27] 100.0% [33] 698(10.2%) 0(0.0%) loop ...ightlies/herbie/master/src/points.rkt:80:2 ??? [91] 100.0% ----------------------------------------------------------------------- infer-splitpoints [28] 100.0% [34] 186(2.7%) 0(0.0%) for-loop ...erbie/master/src/core/regimes.rkt:46:6 option-on-expr [39] 100.0% ----------------------------------------------------------------------- run-iter! [31] 100.0% [35] 2158(31.4%) 0(0.0%) finalize-iter! ...ie/master/src/mainloop.rkt:279:0 ??? [40] 100.0% ----------------------------------------------------------------------- run-iter! [31] 100.0% [36] 936(13.6%) 0(0.0%) gen-series! ...erbie/master/src/mainloop.rkt:161:0 for-loop [41] 100.0% ----------------------------------------------------------------------- run-iter! [31] 100.0% [37] 842(12.3%) 0(0.0%) simplify! .../herbie/master/src/mainloop.rkt:225:0 ??? [42] 100.0% ----------------------------------------------------------------------- run-iter! [31] 100.0% [38] 508(7.4%) 0(0.0%) gen-rewrites! ...bie/master/src/mainloop.rkt:184:0 for-loop [43] 100.0% ----------------------------------------------------------------------- for-loop [34] 100.0% [39] 186(2.7%) 0(0.0%) option-on-expr ...aster/src/core/regimes.rkt:125:0 err-lsts->split-indices [44] 100.0% ----------------------------------------------------------------------- debug5 [18] 7.8% finalize-iter! [35] 92.2% [40] 2340(34.1%) 182(2.7%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [45] 92.2% ----------------------------------------------------------------------- gen-series! [36] 100.0% [41] 936(13.6%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:168:7 taylor-alt [46] 100.0% ----------------------------------------------------------------------- simplify! [37] 100.0% [42] 842(12.3%) 0(0.0%) ??? ...es/herbie/master/src/core/simplify.rkt:43:0 egraph-run [47] 100.0% ----------------------------------------------------------------------- gen-rewrites! [38] 100.0% [43] 508(7.4%) 0(0.0%) for-loop .../herbie/master/src/mainloop.rkt:192:11 rewrite-expression-head20 [48] 100.0% ----------------------------------------------------------------------- option-on-expr [39] 100.0% [44] 186(2.7%) 0(0.0%) err-lsts->split-indices .../core/regimes.rkt:261:0 loop [49] 100.0% ----------------------------------------------------------------------- ??? [40] 100.0% [45] 2158(31.4%) 0(0.0%) for-loop ...bie/master/src/core/alt-table.rkt:55:2 atab-add-altn [50] 57.5% errors [56] 33.9% loop [54] 8.6% ----------------------------------------------------------------------- for-loop [41] 100.0% [46] 936(13.6%) 0(0.0%) taylor-alt ...herbie/master/src/mainloop.rkt:147:0 for-loop [51] 100.0% ----------------------------------------------------------------------- ??? [42] 100.0% [47] 842(12.3%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [52] 100.0% ----------------------------------------------------------------------- for-loop [43] 100.0% [48] 508(7.4%) 0(0.0%) rewrite-expression-head20 ...core/matcher.rkt:86:0 rewriter [53] 100.0% ----------------------------------------------------------------------- err-lsts->split-indices [44] 100.0% [49] 186(2.7%) 0(0.0%) loop ...s/herbie/master/src/core/regimes.rkt:312:4 for-loop [55] 100.0% ----------------------------------------------------------------------- for-loop [45] 100.0% [50] 1240(18.1%) 0(0.0%) atab-add-altn ...ster/src/core/alt-table.rkt:203:0 errors [56] 85.2% loop [60] 14.8% ----------------------------------------------------------------------- taylor-alt [46] 100.0% [51] 936(13.6%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:153:6 ??? [95] 100.0% ----------------------------------------------------------------------- egraph-run [47] 100.0% [52] 842(12.3%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [57] 100.0% ----------------------------------------------------------------------- matcher [65] 38.9% rewrite-expression-head20 [48] 61.1% [53] 508(7.4%) 0(0.0%) rewriter ...erbie/master/src/core/matcher.rkt:89:2 for-loop [58] 88.3% *rules* [61] 11.7% ----------------------------------------------------------------------- for-loop [45] 100.0% [54] 186(2.7%) 186(2.7%) loop ...herbie/master/src/core/alt-table.rkt:177:2 ----------------------------------------------------------------------- loop [49] 100.0% [55] 186(2.7%) 0(0.0%) for-loop ...rbie/master/src/core/regimes.rkt:277:4 for-loop [59] 100.0% ----------------------------------------------------------------------- for-loop [45] 40.9% atab-add-altn [50] 59.1% [56] 1788(26.0%) 0(0.0%) errors ...tlies/herbie/master/src/points.rkt:200:0 for-loop [62] 52.1% eval-prog [63] 47.9% ----------------------------------------------------------------------- egraph-add-exprs [52] 100.0% [57] 842(12.3%) 0(0.0%) ??? ...s/herbie/master/src/core/simplify.rkt:103:6 for-loop [64] 100.0% ----------------------------------------------------------------------- rewriter [53] 100.0% [58] 508(7.4%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:91:4 matcher [65] 84.4% for-loop [66] 15.6% ----------------------------------------------------------------------- for-loop [55] 100.0% [59] 186(2.7%) 0(0.0%) for-loop ...rbie/master/src/core/regimes.rkt:281:8 ??? [96] 100.0% ----------------------------------------------------------------------- atab-add-altn [50] 100.0% [60] 184(2.7%) 184(2.7%) loop ...-7.5/collects/racket/private/hash.rkt:20:4 ----------------------------------------------------------------------- rewriter [53] 100.0% [61] 178(2.6%) 0(0.0%) *rules* ...erbie/master/src/syntax/rules.rkt:666:0 for-loop [100] 100.0% ----------------------------------------------------------------------- errors [56] 100.0% [62] 932(13.6%) 182(2.7%) for-loop ...ies/herbie/master/src/points.rkt:202:2 .../more-scheme.rkt:261:28 [15] 80.5% ----------------------------------------------------------------------- errors [56] 100.0% [63] 856(12.5%) 0(0.0%) eval-prog ...s/herbie/master/src/programs.rkt:82:0 temp85_0 [67] 100.0% ----------------------------------------------------------------------- ??? [57] 100.0% [64] 842(12.3%) 842(12.3%) for-loop ...bie/master/src/core/simplify.rkt:122:2 ----------------------------------------------------------------------- for-loop [71] 33.1% for-loop [58] 66.9% [65] 508(7.4%) 0(0.0%) matcher ...erbie/master/src/core/matcher.rkt:117:2 ??? [68] 66.9% rewriter [53] 33.1% ----------------------------------------------------------------------- for-loop [58] 100.0% [66] 158(2.3%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:98:8 fix-up-variables [69] 100.0% ----------------------------------------------------------------------- eval-const-expr [8] 46.8% eval-prog [63] 53.2% [67] 1610(23.4%) 0(0.0%) temp85_0 (unknown source) compile15 [70] 100.0% ----------------------------------------------------------------------- matcher [65] 100.0% [68] 508(7.4%) 0(0.0%) ??? ...s/herbie/master/src/core/matcher.rkt:129:11 for-loop [71] 66.1% for-loop [72] 33.9% ----------------------------------------------------------------------- for-loop [66] 100.0% [69] 158(2.3%) 0(0.0%) fix-up-variables ...ter/src/core/matcher.rkt:110:2 pattern-substitute [73] 100.0% ----------------------------------------------------------------------- temp85_0 [67] 100.0% [70] 1610(23.4%) 0(0.0%) compile15 (unknown source) temp91_0 [74] 100.0% ----------------------------------------------------------------------- ??? [68] 100.0% [71] 336(4.9%) 0(0.0%) for-loop ...bie/master/src/core/matcher.rkt:131:15 matcher [65] 100.0% ----------------------------------------------------------------------- ??? [68] 100.0% [72] 172(2.5%) 0(0.0%) for-loop ...rbie/master/src/core/matcher.rkt:105:4 foldl [75] 100.0% ----------------------------------------------------------------------- fix-up-variables [69] 100.0% [73] 158(2.3%) 158(2.3%) pattern-substitute ...er/src/core/matcher.rkt:45:0 ----------------------------------------------------------------------- compile15 [70] 100.0% [74] 1610(23.4%) 0(0.0%) temp91_0 (unknown source) temp118_0 [76] 100.0% ----------------------------------------------------------------------- for-loop [72] 100.0% [75] 172(2.5%) 0(0.0%) foldl ....5/collects/racket/private/list.rkt:229:4 ??? [77] 100.0% ----------------------------------------------------------------------- temp91_0 [74] 100.0% [76] 1610(23.4%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [78] 100.0% ----------------------------------------------------------------------- foldl [75] 100.0% [77] 172(2.5%) 0(0.0%) ??? ...ies/herbie/master/src/core/matcher.rkt:25:7 core457 [79] 100.0% ----------------------------------------------------------------------- temp118_0 [76] 100.0% [78] 1610(23.4%) 0(0.0%) expand-capturing-lifts (unknown source) lambda-clause-expander [80] 76.1% dispatch-transformer41 [81] 23.9% ----------------------------------------------------------------------- ??? [77] 100.0% [79] 172(2.5%) 172(2.5%) core457 ...acket/contract/private/arr-i.rkt:976:19 ----------------------------------------------------------------------- expand-capturing-lifts [78] 100.0% [80] 1226(17.9%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [82] 72.1% loop [84] 27.9% ----------------------------------------------------------------------- loop [84] 47.1% expand-capturing-lifts [78] 52.9% [81] 726(10.6%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [83] 100.0% ----------------------------------------------------------------------- lambda-clause-expander [80] 16.4% for-loop [100] 83.6% [82] 884(12.9%) 0(0.0%) finish-bodys (unknown source) for-loop [100] 100.0% ----------------------------------------------------------------------- dispatch-transformer41 [81] 100.0% [83] 726(10.6%) 0(0.0%) apply-transformer52 (unknown source) loop [84] 78.5% apply-transformer-in-context [85] 21.5% ----------------------------------------------------------------------- loop [84] 4.7% for-loop [30] 4.7% lambda-clause-expander [80] 13.8% for-loop [100] 21.1% syntax-e/no-taint [9] 27.6% apply-transformer52 [83] 28.2% [84] 1582(23.0%) 180(2.6%) loop (unknown source) gf [86] 27.6% core-form-sym [87] 24.3% dispatch-transformer41 [81] 13.8% expand-id-application-form17 [89] 9.7% loop [84] 4.7% ??? [90] 4.7% syntax-e [5] 3.9% ----------------------------------------------------------------------- apply-transformer52 [83] 100.0% [85] 156(2.3%) 0(0.0%) apply-transformer-in-context (unknown source) go [88] 100.0% ----------------------------------------------------------------------- loop [84] 100.0% [86] 560(8.2%) 186(2.7%) gf (unknown source) cache-or-reuse-set [93] 33.9% propagation-apply [94] 32.9% ----------------------------------------------------------------------- loop [84] 100.0% [87] 384(5.6%) 0(0.0%) core-form-sym (unknown source) resolve+shift28 [92] 100.0% ----------------------------------------------------------------------- apply-transformer-in-context [85]100.0% [88] 156(2.3%) 156(2.3%) go .../collects/racket/private/qq-and-or.rkt:50:20 ----------------------------------------------------------------------- loop [84] 100.0% [89] 154(2.2%) 0(0.0%) expand-id-application-form17 (unknown source) resolve+shift28 [92] 100.0% ----------------------------------------------------------------------- loop [84] 100.0% [90] 148(2.2%) 0(0.0%) ??? ...ghtlies/herbie/master/src/points.rkt:189:26 ??? [91] 100.0% ----------------------------------------------------------------------- ??? [90] 9.5% for-loop [29] 9.6% .../more-scheme.rkt:261:28 [15] 36.0% loop [33] 44.9% [91] 1556(22.7%) 560(8.2%) ??? ...htlies/herbie/master/src/programs.rkt:114:2 ??? [98] 22.4% ??? [95] 19.3% ??? [99] 12.9% ??? [96] 9.5% ----------------------------------------------------------------------- expand-id-application-form17 [89] 28.6% core-form-sym [87] 71.4% [92] 538(7.8%) 0(0.0%) resolve+shift28 (unknown source) fallback-loop [97] 100.0% ----------------------------------------------------------------------- gf [86] 100.0% [93] 190(2.8%) 190(2.8%) cache-or-reuse-set (unknown source) ----------------------------------------------------------------------- gf [86] 100.0% [94] 184(2.7%) 184(2.7%) propagation-apply (unknown source) ----------------------------------------------------------------------- ??? [16] 14.5% ??? [91] 17.3% location-do [101] 19.8% for-loop [51] 19.8% ??? [32] 28.6% [95] 1730(25.2%) 468(6.8%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [101] 19.8% approximate9 [2] 19.8% sample-multi-bounded [103] 18.8% hash-ref! [13] 14.5% ----------------------------------------------------------------------- ??? [91] 27.4% for-loop [59] 34.4% ??? [32] 38.1% [96] 540(7.9%) 540(7.9%) ??? ...cket-7.5/collects/racket/function.rkt:93:12 ----------------------------------------------------------------------- resolve+shift28 [92] 100.0% [97] 538(7.8%) 154(2.2%) fallback-loop (unknown source) for-loop [100] 71.4% ----------------------------------------------------------------------- ??? [91] 100.0% [98] 348(5.1%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ival-add [102] 100.0% ----------------------------------------------------------------------- ??? [91] 100.0% [99] 200(2.9%) 200(2.9%) ??? .../herbie/master/src/syntax/syntax.rkt:214:17 ----------------------------------------------------------------------- *rules* [61] 12.3% fallback-loop [97] 26.6% finish-bodys [82] 61.1% [100] 1446(21.1%) 738(10.7%) for-loop (unknown source) finish-bodys [82] 51.1% syntax-e [5] 3.7% loop [84] 2.2% ----------------------------------------------------------------------- ??? [95] 100.0% [101] 936(13.6%) 0(0.0%) location-do ...herbie/master/src/programs.rkt:63:0 ??? [95] 100.0% ----------------------------------------------------------------------- ??? [98] 100.0% [102] 348(5.1%) 198(2.9%) ival-add ...erbie/master/src/biginterval.rkt:101:0 bfadd [106] 43.1% ----------------------------------------------------------------------- ??? [95] 100.0% [103] 326(4.7%) 0(0.0%) sample-multi-bounded ...master/src/points.rkt:14:0 random-ranges [104] 54.0% for-loop [105] 46.0% ----------------------------------------------------------------------- sample-multi-bounded [103] 100.0% [104] 176(2.6%) 0(0.0%) random-ranges ...erbie/master/src/common.rkt:164:0 cons/c [107] 100.0% ----------------------------------------------------------------------- sample-multi-bounded [103] 100.0% [105] 150(2.2%) 150(2.2%) for-loop ...lies/herbie/master/src/points.rkt:22:4 ----------------------------------------------------------------------- ival-add [102] 100.0% [106] 150(2.2%) 0(0.0%) bfadd ...-lib/math/private/bigfloat/mpfr.rkt:835:4 ??? [108] 100.0% ----------------------------------------------------------------------- random-ranges [104] 100.0% [107] 176(2.6%) 0(0.0%) cons/c .../racket/contract/private/guts.rkt:500:15 coerce-contract [109] 100.0% ----------------------------------------------------------------------- bfadd [106] 100.0% [108] 150(2.2%) 150(2.2%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 ----------------------------------------------------------------------- cons/c [107] 100.0% [109] 176(2.6%) 0(0.0%) coerce-contract ...contract/private/guts.rkt:307:0 coerce-contract/f [110] 100.0% ----------------------------------------------------------------------- coerce-contract [109] 100.0% [110] 176(2.6%) 0(0.0%) coerce-contract/f ...ntract/private/guts.rkt:372:0 coerce-simple-value [111] 100.0% ----------------------------------------------------------------------- coerce-contract/f [110] 100.0% [111] 176(2.6%) 176(2.6%) coerce-simple-value ...ract/private/guts.rkt:385:0 -----------------------------------------------------------------------