Goal Seek or VBA Solution?

spacecaptainsuperguy

Board Regular
Joined
Dec 30, 2004
Messages
202
Office Version
  1. 365
Platform
  1. Windows
I've created an amortization schedule for a loan that accrues interest daily, which works slightly different than all the generic amortization templates I've been able to find that accrue interest monthly. My challenge is I'm trying to set up a goal seek to find what the payment will be to correctly pay off the loan at the maturity date. Every time I do a goal seek it seems to randomly select a number and if that number (i.e. the payment amount) is higher than what the goal seek number should be, it thinks it has found the answer because the loan balance is zero at the maturity date. Of course it is zero because goal seek's answer paid the loan off months early.

I thought that I might could do a macro that simply starts counting upwards until the maturity date shows a zero balance, but since the range of payments can be as little as $100 or as high as $15,000, my simple and unsuccessful attempts are incredibly slow going penny by penny. Does anyone have any thoughts on how I can try to solve this problem or get goal seek to start at zero and count up from there?

Thanks in advance
 

Excel Facts

Format cells as time
Select range and press Ctrl+Shift+2 to format cells as time. (Shift 2 is the @ sign).
Can you post an extract of your spreadsheet say 10 rows that illustrate your challenge. The forum provides the tool XL2BB.
 
Upvote 0
Can you post an extract of your spreadsheet say 10 rows that illustrate your challenge. The forum provides the tool XL2BB.
Hopefully this works...
Payment Calculator.xlsx
ABCDEFGHIJKLMNOP
16.00%1511/15/201810/15/2033$1,695.75200,000.00 Late Fee: 0.00%10.00- Acct # OBR-004 Input Fields
2Int Rate Term in Yrs Funding Date Maturity Date Pymt Add'l Pymt Beg. Balance Percent Fixed Bal @ Maturity
31,148.721,143.08
4Date ReceivedDate Due Days Late Reference Payment Code Total Amount Received Tot. Applied to Int. Applied To Interest Applied To Principal Other Applied To Late Charges Unpaid Interest Unpaid Interest Running Bal Principal Balance Specific Pymt Interest Specific Pymt Principal
511/15/201811/15/2018--------200,000.00
612/15/201812/15/2018-1,695.75986.30986.30709.45---199,290.55
701/15/20191/15/2019-1,695.751,015.561,015.56680.19---198,610.36
802/15/20192/15/2019-1,695.751,012.101,012.10683.65---197,926.71
903/15/20193/15/2019-1,695.75911.01911.01784.74---197,141.97
1004/15/20194/15/2019-1,695.751,004.611,004.61691.14---196,450.83
Amort Sched
Cell Formulas
RangeFormula
D1D1=INDEX(B5:B450,MATCH(EDATE(C1,B1*12),B5:B450))
L1L1=INDEX(N5:N450,MATCH(EDATE(C1,B1*12),B5:B450))
E3E3=INDEX(F6:F451,MATCH(EDATE(C1,B1*12),B6:B451))
L3L3=INDEX(N5:N450,MATCH(EDATE(C1,(B1*12)-2),B5:B450))
A5:A10A5=+B5
B5B5=C1
N5N5=G1
B6:B10B6=IFERROR(IF(EDATE(B5,1)<EDATE($C$1,$B$1*12),EDATE(B5,1),""),"")
C6:C10C6=IFERROR(DAYS(A6,B6),"")
F6:F10F6=IFERROR(IF($E$1+$F$1>N5,N5+(N5*($A$1/365)*DAYS(A6,A5)),$E$1+$F$1),0)
G6:G10G6=IF(L6<0,H6,H6+L6)
H6H6=IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)-SUM($L$5:L5)+K6,((N5*$A$1)/365)*DAYS(A6,A5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)+J6+K6,((N5*$A$1)/365)*DAYS(A6,A5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5),((N5*$A$1)/365)*DAYS(A6,A5),F6-J6-K6)))
I6:I10I6=IF(F6=0,P6,IF(L6<0,0,IF(H6+J6+K6+L6=F6,0,IF(H6+J6+K6+L6<F6,F6-H6-J6-K6-L6,0))))
H7:H10H7=IF(A7="",0,IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))-SUM($L$5:L6)+K7,((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+J7+K7,((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),F7-J7-K7))))
K6:K10K6=IF(AND(C6>10,C6<>""),IF($J$1=0,$E$1*$I$1,$J$1),0)
L6L6=IF(F6=0,O6,IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)-SUM($L$5:L5)+J6+K6,-SUM($L$5:L5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)+J6+K6,MIN(-SUM($L$5:L5),F6-H6-J6-K6),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5),((N5*$A$1)/365)*DAYS(A6,A5),-((N5*$A$1)/365)*DAYS(A6,A5)+H6))))
M6:M10M6=+L6+M5
N6:N10N6=+N5-I6
L7:L10L7=IF(F7=0,O7,IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))-SUM($L$5:L6)+J7+K7,-SUM($L$5:L6),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+J7+K7,MIN(-SUM($L$5:L6),F7-H7-J7-K7),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),-((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+H7))))
Named Ranges
NameRefers ToCells
'Amort Sched'!solver_adj='Amort Sched'!$E$1K6:K10, F6:F10
'Amort Sched'!solver_rhs1='Amort Sched'!$E$1K6:K10, F6:F10
Cells with Conditional Formatting
CellConditionCell FormatStop If True
C6:N450Cell Value=0textNO
 
Upvote 0
The Goal Seek can adjust the payments so the final balance is 0 or a specified value.

I will post a before and after example.

T202211a.xlsm
ABCDEF
1
2Rate2.50%
30.01%
4Payment400.00
5
6DateNumPaymentInterestAdditionalPrincipal
71-Nov-226,000.00
830-Sep-221400.00-13.155,586.85
931-Oct-222400.0011.865,198.71
1030-Nov-223400.0010.681,000.005,809.39
1131-Dec-224400.0012.345,421.73
1231-Jan-235400.0011.515,033.24
1328-Feb-236400.009.654,642.89
1431-Mar-237400.009.864,252.75
1530-Apr-238400.008.743,861.49
1631-May-239400.008.203,469.69
1730-Jun-2310400.007.133,076.82
1831-Jul-2311400.006.531,500.004,183.35
1931-Aug-2312400.008.883,792.23
2030-Sep-2313400.007.793,400.02
2131-Oct-2314400.007.223,007.24
2230-Nov-2315400.006.182,613.42
2331-Dec-2316400.005.552,218.97
24
4b
Cell Formulas
RangeFormula
B3B3=B2/365
C8:C23C8=$B$4
D8:D23D8=ROUND(F7*$B$3*(A8-A7),2)
B9:B23B9=B8+1
F8:F23F8=F7+D8-C8+E8



T202211a.xlsm
ABCDEF
1
2Rate2.50%
30.01%
4Payment536.53
5
6DateNumPaymentInterestAdditionalPrincipal
71-Nov-226,000.00
830-Sep-221536.53-13.155,450.32
931-Oct-222536.5311.574,925.37
1030-Nov-223536.5310.121,000.005,398.96
1131-Dec-224536.5311.464,873.90
1231-Jan-235536.5310.354,347.72
1328-Feb-236536.538.343,819.54
1431-Mar-237536.538.113,291.12
1530-Apr-238536.536.762,761.36
1631-May-239536.535.862,230.69
1730-Jun-2310536.534.581,698.75
1831-Jul-2311536.533.611,500.002,665.83
1931-Aug-2312536.535.662,134.97
2030-Sep-2313536.534.391,602.83
2131-Oct-2314536.533.401,069.71
2230-Nov-2315536.532.20535.38
2331-Dec-2316536.531.140.00
4b
Cell Formulas
RangeFormula
B3B3=B2/365
C8:C23C8=$B$4
D8:D23D8=ROUND(F7*$B$3*(A8-A7),2)
B9:B23B9=B8+1
F8:F23F8=F7+D8-C8+E8
 
Upvote 0
The Goal Seek can adjust the payments so the final balance is 0 or a specified value.

I will post a before and after example.

Thanks. Ya. I haven't had any problems with getting goal seek to work on amortization schedules like the ones you used that calculate monthly accrued interest. The one that I've built works for loans that accrue daily (i.e. interest is calculated from pay date to pay date and that, depending on when the payment is made, can result in the interest accrued being more than the regular payment resulting in unpaid interest. I don't know if that added complexity is giving Goal seek a challenge or what. The loans I'm usually dealing with are 20-30 year loans, but even if you do a 2 year loan, goal seek still gives me a bad number. In this example, I'm setting goal seek to set cell L1 to zero by changing E1 and here is what it gives me.

Payment Calculator.xlsx
ABCDEFGHIJKLMNOP
16.00%211/15/201810/15/2020$56.321,000.00 Late Fee: 0.00%10.00- Acct # OBR-004 Input Fields
2Int Rate Term in Yrs Funding Date Maturity Date Pymt Add'l Pymt Beg. Balance Percent Fixed Bal @ Maturity
3--
4Date ReceivedDate Due Days Late Reference Payment Code Total Amount Received Tot. Applied to Int. Applied To Interest Applied To Principal Other Applied To Late Charges Unpaid Interest Unpaid Interest Running Bal Principal Balance Specific Pymt Interest Specific Pymt Principal
511/15/201811/15/2018--------1,000.00
612/15/201812/15/2018-56.324.934.9351.39---948.61
701/15/20191/15/2019-56.324.834.8351.49---897.13
802/15/20192/15/2019-56.324.574.5751.75---845.38
903/15/20193/15/2019-56.323.893.8952.43---792.95
1004/15/20194/15/2019-56.324.044.0452.28---740.67
1105/15/20195/15/2019-56.323.653.6552.67---688.00
1206/15/20196/15/2019-56.323.513.5152.81---635.19
1307/15/20197/15/2019-56.323.133.1353.19---582.00
1408/15/20198/15/2019-56.322.972.9753.35---528.65
1509/15/20199/15/2019-56.322.692.6953.63---475.02
1610/15/201910/15/2019-56.322.342.3453.98---421.04
1711/15/201911/15/2019-56.322.152.1554.17---366.87
1812/15/201912/15/2019-56.321.811.8154.51---312.36
1901/15/20201/15/2020-56.321.591.5954.73---257.63
2002/15/20202/15/2020-56.321.311.3155.01---202.62
2103/15/20203/15/2020-56.320.970.9755.35---147.27
2204/15/20204/15/2020-56.320.750.7555.57---91.70
2305/15/20205/15/2020-56.320.450.4555.87---35.83
2406/15/20206/15/2020-36.010.180.1835.83----
2507/15/20207/15/2020---------
2608/15/20208/15/2020---------
2709/15/20209/15/2020---------
2810/15/202010/15/2020---------
Amort Sched
Cell Formulas
RangeFormula
D1D1=INDEX(B5:B450,MATCH(EDATE(C1,B1*12),B5:B450))
L1L1=INDEX(N5:N450,MATCH(EDATE(C1,B1*12),B5:B450))
E3E3=INDEX(F6:F451,MATCH(EDATE(C1,B1*12),B6:B451))
L3L3=INDEX(N5:N450,MATCH(EDATE(C1,(B1*12)-2),B5:B450))
A5:A28A5=+B5
B5B5=C1
N5N5=G1
B6:B28B6=IFERROR(IF(EDATE(B5,1)<EDATE($C$1,$B$1*12),EDATE(B5,1),""),"")
C6:C28C6=IFERROR(DAYS(A6,B6),"")
F6:F28F6=IFERROR(IF($E$1+$F$1>N5,N5+(N5*($A$1/365)*DAYS(A6,A5)),$E$1+$F$1),0)
G6:G28G6=IF(L6<0,H6,H6+L6)
H6H6=IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)-SUM($L$5:L5)+K6,((N5*$A$1)/365)*DAYS(A6,A5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)+J6+K6,((N5*$A$1)/365)*DAYS(A6,A5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5),((N5*$A$1)/365)*DAYS(A6,A5),F6-J6-K6)))
I6:I28I6=IF(F6=0,P6,IF(L6<0,0,IF(H6+J6+K6+L6=F6,0,IF(H6+J6+K6+L6<F6,F6-H6-J6-K6-L6,0))))
H7:H28H7=IF(A7="",0,IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))-SUM($L$5:L6)+K7,((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+J7+K7,((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),F7-J7-K7))))
K6:K28K6=IF(AND(C6>10,C6<>""),IF($J$1=0,$E$1*$I$1,$J$1),0)
L6L6=IF(F6=0,O6,IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)-SUM($L$5:L5)+J6+K6,-SUM($L$5:L5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)+J6+K6,MIN(-SUM($L$5:L5),F6-H6-J6-K6),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5),((N5*$A$1)/365)*DAYS(A6,A5),-((N5*$A$1)/365)*DAYS(A6,A5)+H6))))
M6:M28M6=+L6+M5
N6:N28N6=+N5-I6
L7:L28L7=IF(F7=0,O7,IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))-SUM($L$5:L6)+J7+K7,-SUM($L$5:L6),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+J7+K7,MIN(-SUM($L$5:L6),F7-H7-J7-K7),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),-((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+H7))))
Named Ranges
NameRefers ToCells
'Amort Sched'!solver_adj='Amort Sched'!$E$1K6:K28, F6:F28
'Amort Sched'!solver_rhs1='Amort Sched'!$E$1K6:K28, F6:F28
Cells with Conditional Formatting
CellConditionCell FormatStop If True
C6:N450Cell Value=0textNO
 
Upvote 0
You cannot change the payments that are already made.
I have not reviewed your formulas.
I changed the dates.
I made the payments fixed per E1.
I ran Goal Seek to Change N21 to 0 by revising E1.
This shows the payments that would be required.

Hopefully someone else can visualize your question.

T202211a.xlsm
ABCDEFGHIJKLMN
10.06215-11-2245366130.368432000 Late Fee: 0100 Acct # OBR-004
2Int Rate Term in Yrs Funding Date Maturity Date Pymt Add'l Pymt Beg. Balance Percent Fixed Bal @ Maturity
3130.368430
4Date ReceivedDate Due Days Late Reference Payment Code Total Amount Received Tot. Applied to Int. Applied To Interest Applied To Principal Other Applied To Late Charges Unpaid Interest Unpaid Interest Running Bal Principal Balance
515-Nov-2215-Nov-22000000002000
615-Dec-2215-Dec-220130.368439.86301379.8630137120.505410001879.4946
715-Jan-2315-Jan-230130.368439.57769849.5776984120.790730001758.7039
815-Feb-2315-Feb-230130.368438.96216218.9621621121.406260001637.2976
915-Mar-2315-Mar-230130.368437.53605477.5360547122.832370001514.4652
1015-Apr-2315-Apr-230130.368437.71754887.7175488122.650880001391.8143
1115-May-2315-May-230130.368436.8637426.863742123.504680001268.3097
1215-Jun-2315-Jun-230130.368436.46316716.4631671123.905260001144.4044
1315-Jul-2315-Jul-230130.368435.64363825.6436382124.724790001019.6796
1415-Aug-2315-Aug-230130.368435.19617565.1961756125.17225000894.50737
1515-Sep-2315-Sep-230130.368434.55831154.5583115125.81011000768.69726
1615-Oct-2315-Oct-230130.368433.79083583.7908358126.57759000642.11967
1715-Nov-2315-Nov-230130.368433.27217143.2721714127.09625000515.02341
1815-Dec-2315-Dec-230130.368432.53984152.5398415127.82858000387.19483
1915-Jan-2415-Jan-240130.368431.97310241.9731024128.39532000258.7995
2015-Feb-2415-Feb-240130.368431.31881391.3188139129.04961000129.74989
2115-Mar-2415-Mar-240130.368430.61853370.6185337129.749890000
4bb
Cell Formulas
RangeFormula
D1D1=INDEX(B5:B447,MATCH(EDATE(C1,B1*12),B5:B447))
L1L1=INDEX(N5:N447,MATCH(EDATE(C1,B1*12),B5:B447))
E3E3=INDEX(F6:F448,MATCH(EDATE(C1,B1*12),B6:B448))
L3L3=INDEX(N5:N447,MATCH(EDATE(C1,(B1*12)-2),B5:B447))
A5:A21A5=+B5
B5B5=C1
N5N5=G1
B6:B21B6=IFERROR(IF(EDATE(B5,1)<EDATE($C$1,$B$1*12),EDATE(B5,1),""),"")
C6:C21C6=IFERROR(DAYS(A6,B6),"")
F6F6=$E$1
G6:G21G6=IF(L6<0,H6,H6+L6)
H6H6=IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)-SUM($L$5:L5)+K6,((N5*$A$1)/365)*DAYS(A6,A5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)+J6+K6,((N5*$A$1)/365)*DAYS(A6,A5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5),((N5*$A$1)/365)*DAYS(A6,A5),F6-J6-K6)))
I6:I21I6=IF(F6=0,P6,IF(L6<0,0,IF(H6+J6+K6+L6=F6,0,IF(H6+J6+K6+L6<F6,F6-H6-J6-K6-L6,0))))
F7:F21F7=IFERROR(IF($E$1+$F$1>N6,N6+(N6*($A$1/365)*DAYS(A7,A6)),$E$1+$F$1),0)
H7:H21H7=IF(A7="",0,IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))-SUM($L$5:L6)+K7,((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+J7+K7,((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),F7-J7-K7))))
K6:K21K6=IF(AND(C6>10,C6<>""),IF($J$1=0,$E$1*$I$1,$J$1),0)
L6L6=IF(F6=0,O6,IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)-SUM($L$5:L5)+J6+K6,-SUM($L$5:L5),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5)+J6+K6,MIN(-SUM($L$5:L5),F6-H6-J6-K6),IF(F6>=((N5*$A$1)/365)*DAYS(A6,A5),((N5*$A$1)/365)*DAYS(A6,A5),-((N5*$A$1)/365)*DAYS(A6,A5)+H6))))
M6:M21M6=+L6+M5
N6:N21N6=+N5-I6
L7:L21L7=IF(F7=0,O7,IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))-SUM($L$5:L6)+J7+K7,-SUM($L$5:L6),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+J7+K7,MIN(-SUM($L$5:L6),F7-H7-J7-K7),IF(F7>=((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6)),-((N6*$A$1)/365)*IF(F6=0,DAYS(A7,A5),DAYS(A7,A6))+H7))))
 
Upvote 0
You cannot change the payments that are already made.
I have not reviewed your formulas.
I changed the dates.
I made the payments fixed per E1.
I ran Goal Seek to Change N21 to 0 by revising E1.
This shows the payments that would be required.

Hopefully someone else can visualize your question.
Fascinating. My formula also linked to the payment amount in E1 however I set up this amortization schedule to mimic our mortgage software so I could play around with payments/scenarios/etc, all of which has been working perfectly. The formula is not as simple as just =E1, since I was using it to check that the payment wasn't larger than the principal balance and to factor in any accrued interest as of the payment date.

But what this tells me is that that formula, in some way, is messing with Goal Seek's (or even Solver for that matter) ability to correctly solve the problem. We didn't get it "fixed" but perhaps it will put me on the path to get a solution I can work with.

Thanks so much for your time & your help!
 
Upvote 0

Forum statistics

Threads
1,223,886
Messages
6,175,196
Members
452,616
Latest member
intern444

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top