Profiling results ----------------- Total cpu time observed: 5506ms (out of 5644ms) Number of samples taken: 26 (once every 212ms) ======================================================================= Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================= [1] 5506(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [9] 100.0% ----------------------------------------------------------------------- for-loop [111] 100.0% [2] 884(16.1%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [10] 100.0% ----------------------------------------------------------------------- ??? [85] 100.0% [3] 654(11.9%) 0(0.0%) approximate9 ...better-rr/src/core/taylor.rkt:11:0 loop [11] 100.0% ----------------------------------------------------------------------- hash-ref! [91] 100.0% [4] 454(8.2%) 0(0.0%) parse-loop74 (unknown source) eval-const-expr [20] 100.0% ----------------------------------------------------------------------- matcher [99] 100.0% [5] 438(8.0%) 0(0.0%) ??? ...erbie/better-rr/src/core/matcher.rkt:129:11 for-loop [12] 100.0% ----------------------------------------------------------------------- loop [42] 100.0% [6] 208(3.8%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [13] 100.0% ----------------------------------------------------------------------- taylor [7] 50.0% hash-ref! [91] 50.0% [7] 200(3.6%) 0(0.0%) taylor ...rbie/better-rr/src/core/taylor.rkt:169:0 taylor [7] 50.0% taylor-sqrt [15] 50.0% ----------------------------------------------------------------------- hash-ref! [91] 100.0% [8] 200(3.6%) 0(0.0%) ??? ...herbie/better-rr/src/core/taylor.rkt:300:23 for-loop [14] 100.0% ----------------------------------------------------------------------- ??? [1] 100.0% [9] 5506(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [16] 100.0% ----------------------------------------------------------------------- dispatch-transformer41 [2] 100.0% [10] 884(16.1%) 254(4.6%) apply-transformer52 (unknown source) apply-transformer-in-context [17] 71.3% ----------------------------------------------------------------------- approximate9 [3] 100.0% [11] 654(11.9%) 0(0.0%) loop .../herbie/better-rr/src/core/taylor.rkt:86:4 ??? [85] 69.4% hash-ref! [91] 30.6% ----------------------------------------------------------------------- ??? [5] 100.0% [12] 438(8.0%) 0(0.0%) for-loop .../better-rr/src/core/matcher.rkt:131:15 hash-ref! [91] 100.0% ----------------------------------------------------------------------- syntax-e [6] 100.0% [13] 208(3.8%) 0(0.0%) syntax-e/no-taint (unknown source) loop [42] 100.0% ----------------------------------------------------------------------- ??? [8] 100.0% [14] 200(3.6%) 0(0.0%) for-loop ...e/better-rr/src/core/taylor.rkt:303:27 hash-ref! [91] 100.0% ----------------------------------------------------------------------- taylor [7] 100.0% [15] 200(3.6%) 0(0.0%) taylor-sqrt ...better-rr/src/core/taylor.rkt:351:0 f61 [18] 100.0% ----------------------------------------------------------------------- profile-thunk16 [9] 100.0% [16] 5506(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [19] 100.0% ----------------------------------------------------------------------- apply-transformer52 [10] 100.0% [17] 630(11.4%) 200(3.6%) apply-transformer-in-context (unknown source) go [21] 35.2% ??? [22] 33.0% ----------------------------------------------------------------------- taylor-sqrt [15] 100.0% [18] 200(3.6%) 0(0.0%) f61 (unknown source) eval-const-expr [20] 100.0% ----------------------------------------------------------------------- for-loop [82] 1.8% for-loop [87] 3.7% run [16] 94.5% [19] 5506(100.0%) 402(7.3%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [23] 54.8% prepare-points-intervals [24] 19.8% oracle-error [25] 7.3% get-final-combination [26] 7.2% eval-errors [29] 3.6% for-loop [30] 1.8% errors [69] 1.8% ----------------------------------------------------------------------- f61 [18] 30.6% parse-loop74 [4] 69.4% [20] 654(11.9%) 0(0.0%) eval-const-expr ...etter-rr/src/programs.rkt:150:0 temp85_0 [83] 69.4% batch-eval-progs [31] 30.6% ----------------------------------------------------------------------- apply-transformer-in-context [17]100.0% [21] 222(4.0%) 0(0.0%) go .../collects/racket/private/qq-and-or.rkt:50:20 loop [27] 100.0% ----------------------------------------------------------------------- apply-transformer-in-context [17]100.0% [22] 208(3.8%) 0(0.0%) ??? ...collects/racket/private/qq-and-or.rkt:155:9 ??? [28] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [23] 3218(58.4%) 0(0.0%) run-improve47 .../better-rr/src/mainloop.rkt:364:0 for-loop [32] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [24] 1090(19.8%) 0(0.0%) prepare-points-intervals ...r/src/points.rkt:122:0 loop [33] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [25] 404(7.3%) 0(0.0%) oracle-error ...bie/better-rr/src/points.rkt:179:0 for-loop [34] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [26] 398(7.2%) 0(0.0%) get-final-combination ...rr/src/mainloop.rkt:389:0 infer-splitpoints [35] 100.0% ----------------------------------------------------------------------- loop [27] 50.0% go [21] 50.0% [27] 222(4.0%) 0(0.0%) loop ...llects/racket/private/qq-and-or.rkt:101:61 loop [27] 50.0% datum->syntax6 [36] 50.0% ----------------------------------------------------------------------- ??? [22] 100.0% [28] 208(3.8%) 0(0.0%) ??? ...ollects/racket/private/qq-and-or.rkt:164:21 syntax->list [37] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [29] 200(3.6%) 0(0.0%) eval-errors ...rbie/better-rr/src/points.rkt:170:0 for-loop [38] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [30] 200(3.6%) 0(0.0%) for-loop .../herbie/better-rr/src/points.rkt:202:6 ulp-difference [39] 100.0% ----------------------------------------------------------------------- eval-const-expr [20] 100.0% [31] 200(3.6%) 0(0.0%) batch-eval-progs ...tter-rr/src/programs.rkt:108:0 compile [40] 100.0% ----------------------------------------------------------------------- run-improve47 [23] 100.0% [32] 3218(58.4%) 0(0.0%) for-loop ...erbie/better-rr/src/mainloop.rkt:383:4 run-iter! [41] 100.0% ----------------------------------------------------------------------- prepare-points-intervals [24] 100.0% [33] 1090(19.8%) 224(4.1%) loop ...lies/herbie/better-rr/src/points.rkt:134:4 ??? [43] 58.9% loop [45] 20.6% ----------------------------------------------------------------------- oracle-error [25] 100.0% [34] 404(7.3%) 0(0.0%) for-loop .../herbie/better-rr/src/points.rkt:180:2 loop [42] 100.0% ----------------------------------------------------------------------- get-final-combination [26] 100.0% [35] 398(7.2%) 0(0.0%) infer-splitpoints ...-rr/src/core/regimes.rkt:33:0 for-loop [44] 100.0% ----------------------------------------------------------------------- loop [27] 100.0% [36] 222(4.0%) 0(0.0%) datum->syntax6 (unknown source) loop [42] 100.0% ----------------------------------------------------------------------- ??? [28] 100.0% [37] 208(3.8%) 0(0.0%) syntax->list (unknown source) loop [42] 100.0% ----------------------------------------------------------------------- eval-errors [29] 100.0% [38] 200(3.6%) 200(3.6%) for-loop .../herbie/better-rr/src/points.rkt:172:2 ----------------------------------------------------------------------- for-loop [30] 100.0% [39] 200(3.6%) 200(3.6%) ulp-difference ...bie/better-rr/src/float.rkt:19:0 ----------------------------------------------------------------------- batch-eval-progs [31] 100.0% [40] 200(3.6%) 0(0.0%) compile ...herbie/better-rr/src/programs.rkt:200:0 hash-ref! [91] 100.0% ----------------------------------------------------------------------- for-loop [32] 100.0% [41] 3218(58.4%) 0(0.0%) run-iter! ...rbie/better-rr/src/mainloop.rkt:345:0 finalize-iter! [46] 32.3% simplify! [47] 27.4% gen-series! [48] 20.3% gen-rewrites! [49] 13.6% localize! [54] 6.4% ----------------------------------------------------------------------- syntax-e/no-taint [13] 12.5% syntax->list [37] 12.5% datum->syntax6 [36] 13.3% loop [42] 25.5% for-loop [34] 36.2% [42] 834(15.1%) 222(4.0%) loop (unknown source) ??? [50] 36.2% loop [42] 25.5% syntax-e [6] 12.5% gf [53] 12.5% ----------------------------------------------------------------------- loop [33] 100.0% [43] 642(11.7%) 418(7.6%) ??? ...tlies/herbie/better-rr/src/points.rkt:115:6 sample-multi-bounded [52] 34.9% ----------------------------------------------------------------------- infer-splitpoints [35] 100.0% [44] 398(7.2%) 0(0.0%) for-loop ...ie/better-rr/src/core/regimes.rkt:45:6 option-on-expr [51] 100.0% ----------------------------------------------------------------------- loop [33] 100.0% [45] 224(4.1%) 224(4.1%) loop ...tlies/herbie/better-rr/src/points.rkt:79:2 ----------------------------------------------------------------------- run-iter! [41] 100.0% [46] 1038(18.9%) 0(0.0%) finalize-iter! ...better-rr/src/mainloop.rkt:277:0 ??? [55] 100.0% ----------------------------------------------------------------------- run-iter! [41] 100.0% [47] 882(16.0%) 0(0.0%) simplify! ...rbie/better-rr/src/mainloop.rkt:223:0 ??? [56] 100.0% ----------------------------------------------------------------------- run-iter! [41] 100.0% [48] 654(11.9%) 0(0.0%) gen-series! ...ie/better-rr/src/mainloop.rkt:159:0 for-loop [57] 100.0% ----------------------------------------------------------------------- run-iter! [41] 100.0% [49] 438(8.0%) 0(0.0%) gen-rewrites! .../better-rr/src/mainloop.rkt:182:0 for-loop [58] 100.0% ----------------------------------------------------------------------- loop [42] 100.0% [50] 404(7.3%) 200(3.6%) ??? ...lies/herbie/better-rr/src/points.rkt:181:26 ??? [62] 50.5% ----------------------------------------------------------------------- for-loop [44] 100.0% [51] 398(7.2%) 0(0.0%) option-on-expr ...er-rr/src/core/regimes.rkt:124:0 err-lsts->split-indices [63] 50.3% for-loop [64] 49.7% ----------------------------------------------------------------------- ??? [43] 100.0% [52] 224(4.1%) 0(0.0%) sample-multi-bounded ...ter-rr/src/points.rkt:14:0 random-ranges [59] 100.0% ----------------------------------------------------------------------- loop [42] 100.0% [53] 208(3.8%) 0(0.0%) gf (unknown source) propagation-merge [60] 100.0% ----------------------------------------------------------------------- run-iter! [41] 100.0% [54] 206(3.7%) 0(0.0%) localize! ...rbie/better-rr/src/mainloop.rkt:126:0 localize-error [61] 100.0% ----------------------------------------------------------------------- finalize-iter! [46] 100.0% [55] 1038(18.9%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 atab-add-altns [66] 80.5% for-loop [72] 19.5% ----------------------------------------------------------------------- simplify! [47] 100.0% [56] 882(16.0%) 0(0.0%) ??? ...herbie/better-rr/src/core/simplify.rkt:42:0 egraph-run [65] 100.0% ----------------------------------------------------------------------- gen-series! [48] 100.0% [57] 654(11.9%) 0(0.0%) for-loop ...erbie/better-rr/src/mainloop.rkt:166:7 taylor-alt [67] 100.0% ----------------------------------------------------------------------- gen-rewrites! [49] 100.0% [58] 438(8.0%) 0(0.0%) for-loop ...rbie/better-rr/src/mainloop.rkt:190:11 rewrite-expression-head23 [68] 100.0% ----------------------------------------------------------------------- sample-multi-bounded [52] 100.0% [59] 224(4.1%) 0(0.0%) random-ranges ...ie/better-rr/src/common.rkt:164:0 build--> [70] 100.0% ----------------------------------------------------------------------- gf [53] 100.0% [60] 208(3.8%) 208(3.8%) propagation-merge (unknown source) ----------------------------------------------------------------------- localize! [54] 100.0% [61] 206(3.7%) 0(0.0%) localize-error ...er-rr/src/core/localize.rkt:57:0 hash-ref! [91] 100.0% ----------------------------------------------------------------------- ??? [50] 100.0% [62] 204(3.7%) 0(0.0%) ??? ...rbie/better-rr/src/syntax/syntax.rkt:214:17 return/no-unsupplied [71] 100.0% ----------------------------------------------------------------------- option-on-expr [51] 100.0% [63] 200(3.6%) 0(0.0%) err-lsts->split-indices .../core/regimes.rkt:263:0 loop [73] 100.0% ----------------------------------------------------------------------- option-on-expr [51] 100.0% [64] 198(3.6%) 0(0.0%) for-loop ...e/better-rr/src/core/regimes.rkt:135:4 errors [69] 100.0% ----------------------------------------------------------------------- ??? [56] 100.0% [65] 882(16.0%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [74] 100.0% ----------------------------------------------------------------------- ??? [55] 100.0% [66] 836(15.2%) 0(0.0%) atab-add-altns ...-rr/src/core/alt-table.rkt:185:0 batch-errors [75] 100.0% ----------------------------------------------------------------------- for-loop [57] 100.0% [67] 654(11.9%) 0(0.0%) taylor-alt ...bie/better-rr/src/mainloop.rkt:145:0 for-loop [76] 100.0% ----------------------------------------------------------------------- for-loop [58] 100.0% [68] 438(8.0%) 0(0.0%) rewrite-expression-head23 ...core/matcher.rkt:83:0 rewriter [77] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 49.7% for-loop [64] 50.3% [69] 394(7.2%) 0(0.0%) errors ...es/herbie/better-rr/src/points.rkt:192:0 temp85_0 [83] 50.3% for-loop [82] 49.7% ----------------------------------------------------------------------- random-ranges [59] 100.0% [70] 224(4.1%) 0(0.0%) build--> ...act/private/arrow-val-first.rkt:1214:0 coerce-contract [78] 100.0% ----------------------------------------------------------------------- ??? [62] 100.0% [71] 204(3.7%) 0(0.0%) return/no-unsupplied ...ct/private/arr-i.rkt:566:0 filter [79] 100.0% ----------------------------------------------------------------------- ??? [55] 100.0% [72] 202(3.7%) 0(0.0%) for-loop ...better-rr/src/core/alt-table.rkt:198:4 loop [80] 100.0% ----------------------------------------------------------------------- err-lsts->split-indices [63] 100.0% [73] 200(3.6%) 0(0.0%) loop ...erbie/better-rr/src/core/regimes.rkt:314:4 for-loop [81] 100.0% ----------------------------------------------------------------------- egraph-run [65] 100.0% [74] 882(16.0%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [84] 100.0% ----------------------------------------------------------------------- atab-add-altns [66] 100.0% [75] 836(15.2%) 0(0.0%) batch-errors ...bie/better-rr/src/points.rkt:198:0 temp85_0 [83] 51.4% for-loop [87] 48.6% ----------------------------------------------------------------------- taylor-alt [67] 100.0% [76] 654(11.9%) 0(0.0%) for-loop ...erbie/better-rr/src/mainloop.rkt:151:6 ??? [85] 100.0% ----------------------------------------------------------------------- rewrite-expression-head23 [68] 41.8% matcher [99] 58.2% [77] 438(8.0%) 216(3.9%) rewriter ...ie/better-rr/src/core/matcher.rkt:85:2 for-loop [86] 83.6% ----------------------------------------------------------------------- build--> [70] 100.0% [78] 224(4.1%) 0(0.0%) coerce-contract ...contract/private/guts.rkt:307:0 coerce-contract/f [88] 100.0% ----------------------------------------------------------------------- return/no-unsupplied [71] 100.0% [79] 204(3.7%) 204(3.7%) filter ...5/collects/racket/private/list.rkt:256:2 ----------------------------------------------------------------------- for-loop [72] 100.0% [80] 202(3.7%) 0(0.0%) loop ...bie/better-rr/src/core/alt-table.rkt:159:2 loop [89] 100.0% ----------------------------------------------------------------------- loop [73] 100.0% [81] 200(3.6%) 0(0.0%) for-loop ...e/better-rr/src/core/regimes.rkt:279:4 for-loop [90] 100.0% ----------------------------------------------------------------------- errors [69] 100.0% [82] 196(3.6%) 0(0.0%) for-loop .../herbie/better-rr/src/points.rkt:194:2 .../more-scheme.rkt:261:28 [19] 100.0% ----------------------------------------------------------------------- errors [69] 18.3% batch-errors [75] 39.7% eval-const-expr [20] 42.0% [83] 1082(19.7%) 0(0.0%) temp85_0 (unknown source) compile15 [92] 100.0% ----------------------------------------------------------------------- egraph-add-exprs [74] 100.0% [84] 882(16.0%) 0(0.0%) ??? ...erbie/better-rr/src/core/simplify.rkt:103:6 for-loop [93] 100.0% ----------------------------------------------------------------------- ??? [102] 10.2% loop [11] 23.1% location-do [94] 33.3% for-loop [76] 33.3% [85] 654(11.9%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [94] 33.3% approximate9 [3] 33.3% hash-ref! [91] 33.3% ----------------------------------------------------------------------- rewriter [77] 100.0% [86] 438(8.0%) 0(0.0%) for-loop ...ie/better-rr/src/core/matcher.rkt:87:4 hash-ref! [91] 74.7% for-loop [96] 25.3% ----------------------------------------------------------------------- batch-errors [75] 100.0% [87] 406(7.4%) 0(0.0%) for-loop .../herbie/better-rr/src/points.rkt:200:2 .../more-scheme.rkt:261:28 [19] 100.0% ----------------------------------------------------------------------- coerce-contract [78] 100.0% [88] 224(4.1%) 0(0.0%) coerce-contract/f ...ntract/private/guts.rkt:372:0 coerce-simple-value [95] 100.0% ----------------------------------------------------------------------- loop [80] 16.7% loop [89] 83.3% [89] 202(3.7%) 202(3.7%) loop ...racket-7.5/collects/racket/list.rkt:434:28 loop [89] 83.3% ----------------------------------------------------------------------- for-loop [81] 100.0% [90] 200(3.6%) 200(3.6%) for-loop ...e/better-rr/src/core/regimes.rkt:283:8 ----------------------------------------------------------------------- compile [40] 5.1% loop [11] 5.1% for-loop [14] 5.1% localize-error [61] 5.3% map [106] 10.6% ??? [98] 14.9% for-loop [12] 16.9% for-loop [86] 16.9% ??? [85] 20.1% [91] 1298(23.6%) 200(3.6%) hash-ref! .../racket/private/more-scheme.rkt:376:2 matcher [99] 33.7% parse-loop15 [101] 15.9% ??? [98] 14.9% parse-loop74 [4] 14.9% ??? [8] 5.1% ??? [102] 5.1% taylor [7] 5.1% ----------------------------------------------------------------------- temp85_0 [83] 100.0% [92] 1082(19.7%) 0(0.0%) compile15 (unknown source) temp91_0 [97] 100.0% ----------------------------------------------------------------------- ??? [84] 100.0% [93] 882(16.0%) 882(16.0%) for-loop .../better-rr/src/core/simplify.rkt:121:2 ----------------------------------------------------------------------- location-do [94] 34.7% ??? [85] 65.3% [94] 654(11.9%) 0(0.0%) location-do ...bie/better-rr/src/programs.rkt:86:0 ??? [85] 65.3% location-do [94] 34.7% ----------------------------------------------------------------------- coerce-contract/f [88] 100.0% [95] 224(4.1%) 224(4.1%) coerce-simple-value ...ract/private/guts.rkt:385:0 ----------------------------------------------------------------------- for-loop [86] 100.0% [96] 222(4.0%) 0(0.0%) for-loop ...ie/better-rr/src/core/matcher.rkt:94:8 fix-up-variables [100] 100.0% ----------------------------------------------------------------------- compile15 [92] 100.0% [97] 1082(19.7%) 0(0.0%) temp91_0 (unknown source) temp118_0 [103] 100.0% ----------------------------------------------------------------------- hash-ref! [91] 100.0% [98] 454(8.2%) 0(0.0%) ??? .../herbie/better-rr/src/core/taylor.rkt:44:15 hash-ref! [91] 100.0% ----------------------------------------------------------------------- hash-ref! [91] 100.0% [99] 438(8.0%) 0(0.0%) matcher ...ie/better-rr/src/core/matcher.rkt:117:2 ??? [5] 50.0% rewriter [77] 50.0% ----------------------------------------------------------------------- for-loop [96] 100.0% [100] 222(4.0%) 0(0.0%) fix-up-variables ...-rr/src/core/matcher.rkt:106:2 pattern-substitute [104] 100.0% ----------------------------------------------------------------------- hash-ref! [91] 100.0% [101] 206(3.7%) 0(0.0%) parse-loop15 (unknown source) map [106] 66.7% for-loop [105] 33.3% ----------------------------------------------------------------------- hash-ref! [91] 100.0% [102] 200(3.6%) 0(0.0%) ??? .../herbie/better-rr/src/core/taylor.rkt:67:15 ??? [85] 100.0% ----------------------------------------------------------------------- temp91_0 [97] 100.0% [103] 1082(19.7%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [107] 100.0% ----------------------------------------------------------------------- pattern-substitute [104] 50.0% fix-up-variables [100] 50.0% [104] 222(4.0%) 222(4.0%) pattern-substitute ...rr/src/core/matcher.rkt:45:0 pattern-substitute [104] 50.0% ----------------------------------------------------------------------- parse-loop15 [101] 100.0% [105] 206(3.7%) 0(0.0%) for-loop .../better-rr/src/core/localize.rkt:44:21 for-loop [108] 100.0% ----------------------------------------------------------------------- parse-loop15 [101] 100.0% [106] 206(3.7%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 hash-ref! [91] 100.0% ----------------------------------------------------------------------- temp118_0 [103] 100.0% [107] 1082(19.7%) 198(3.6%) expand-capturing-lifts (unknown source) lambda-clause-expander [109] 81.7% ----------------------------------------------------------------------- for-loop [105] 100.0% [108] 206(3.7%) 206(3.7%) for-loop .../better-rr/src/core/localize.rkt:45:23 ----------------------------------------------------------------------- expand-capturing-lifts [107] 100.0% [109] 884(16.1%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [110] 100.0% ----------------------------------------------------------------------- lambda-clause-expander [109] 39.6% for-loop [111] 60.4% [110] 884(16.1%) 0(0.0%) finish-bodys (unknown source) for-loop [111] 100.0% ----------------------------------------------------------------------- for-loop [111] 48.4% finish-bodys [110] 51.6% [111] 884(16.1%) 0(0.0%) for-loop (unknown source) for-loop [111] 48.4% finish-bodys [110] 31.4% dispatch-transformer41 [2] 20.2% -----------------------------------------------------------------------