Thu, 21 Nov 2013 12:30:35 -0800
Merge
1.1 --- a/.hgtags Wed Nov 20 11:08:09 2013 -0800 1.2 +++ b/.hgtags Thu Nov 21 12:30:35 2013 -0800 1.3 @@ -391,3 +391,8 @@ 1.4 82a9cdbf683e374a76f2009352de53e16bed5a91 hs25-b56 1.5 7fd913010dbbf75260688fd2fa8964763fa49a09 jdk8-b114 1.6 3b32d287da89a47a45d16f6d9ba5bd3cd9bf4b3e hs25-b57 1.7 +9ebaac78a8a0061fb9597e07f806498cb626cdeb jdk8-b115 1.8 +e510dfdec6dd701410f3398ed86ebcdff0cca63a hs25-b58 1.9 +52b076e6ffae247c1c7d8b7aba995195be2b6fc2 jdk8-b116 1.10 +c78d517c7ea47501b456e707afd4b78e7b5b202e hs25-b59 1.11 +f573d00213b7170c2ff856f9cd83cd148437f5b9 jdk8-b117
2.1 --- a/make/hotspot_version Wed Nov 20 11:08:09 2013 -0800 2.2 +++ b/make/hotspot_version Thu Nov 21 12:30:35 2013 -0800 2.3 @@ -35,7 +35,7 @@ 2.4 2.5 HS_MAJOR_VER=25 2.6 HS_MINOR_VER=0 2.7 -HS_BUILD_NUMBER=57 2.8 +HS_BUILD_NUMBER=59 2.9 2.10 JDK_MAJOR_VER=1 2.11 JDK_MINOR_VER=8
3.1 --- a/src/cpu/sparc/vm/macroAssembler_sparc.cpp Wed Nov 20 11:08:09 2013 -0800 3.2 +++ b/src/cpu/sparc/vm/macroAssembler_sparc.cpp Thu Nov 21 12:30:35 2013 -0800 3.3 @@ -3526,8 +3526,12 @@ 3.4 delayed()->sub(Rtsp, Roffset, Rtsp); 3.5 3.6 // Bang down shadow pages too. 3.7 - // The -1 because we already subtracted 1 page. 3.8 - for (int i = 0; i< StackShadowPages-1; i++) { 3.9 + // At this point, (tmp-0) is the last address touched, so don't 3.10 + // touch it again. (It was touched as (tmp-pagesize) but then tmp 3.11 + // was post-decremented.) Skip this address by starting at i=1, and 3.12 + // touch a few more pages below. N.B. It is important to touch all 3.13 + // the way down to and including i=StackShadowPages. 3.14 + for (int i = 1; i <= StackShadowPages; i++) { 3.15 set((-i*offset)+STACK_BIAS, Rscratch); 3.16 st(G0, Rtsp, Rscratch); 3.17 }
4.1 --- a/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Wed Nov 20 11:08:09 2013 -0800 4.2 +++ b/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Thu Nov 21 12:30:35 2013 -0800 4.3 @@ -1002,18 +1002,6 @@ 4.4 // and the vm will find there should this case occur. 4.5 Address callee_target_addr(G2_thread, JavaThread::callee_target_offset()); 4.6 __ st_ptr(G5_method, callee_target_addr); 4.7 - 4.8 - if (StressNonEntrant) { 4.9 - // Open a big window for deopt failure 4.10 - __ save_frame(0); 4.11 - __ mov(G0, L0); 4.12 - Label loop; 4.13 - __ bind(loop); 4.14 - __ sub(L0, 1, L0); 4.15 - __ br_null_short(L0, Assembler::pt, loop); 4.16 - __ restore(); 4.17 - } 4.18 - 4.19 __ jmpl(G3, 0, G0); 4.20 __ delayed()->nop(); 4.21 }
5.1 --- a/src/cpu/sparc/vm/sparc.ad Wed Nov 20 11:08:09 2013 -0800 5.2 +++ b/src/cpu/sparc/vm/sparc.ad Thu Nov 21 12:30:35 2013 -0800 5.3 @@ -2924,6 +2924,9 @@ 5.4 __ bind(LSkip2); 5.5 } 5.6 5.7 + // We have no guarantee that on 64 bit the higher half of limit_reg is 0 5.8 + __ signx(limit_reg); 5.9 + 5.10 __ subcc(limit_reg, 1 * sizeof(jchar), chr1_reg); 5.11 __ br(Assembler::equal, true, Assembler::pn, Ldone); 5.12 __ delayed()->mov(O7, result_reg); // result is difference in lengths 5.13 @@ -2981,6 +2984,9 @@ 5.14 Register chr1_reg = result_reg; 5.15 Register chr2_reg = tmp1_reg; 5.16 5.17 + // We have no guarantee that on 64 bit the higher half of limit_reg is 0 5.18 + __ signx(limit_reg); 5.19 + 5.20 //check for alignment and position the pointers to the ends 5.21 __ or3(str1_reg, str2_reg, chr1_reg); 5.22 __ andcc(chr1_reg, 0x3, chr1_reg);
6.1 --- a/src/cpu/x86/vm/interp_masm_x86_32.cpp Wed Nov 20 11:08:09 2013 -0800 6.2 +++ b/src/cpu/x86/vm/interp_masm_x86_32.cpp Thu Nov 21 12:30:35 2013 -0800 6.3 @@ -196,7 +196,7 @@ 6.4 6.5 void InterpreterMacroAssembler::get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset) { 6.6 assert(bcp_offset >= 0, "bcp is still pointing to start of bytecode"); 6.7 - movl(reg, Address(rsi, bcp_offset)); 6.8 + load_unsigned_short(reg, Address(rsi, bcp_offset)); 6.9 bswapl(reg); 6.10 shrl(reg, 16); 6.11 }
7.1 --- a/src/cpu/x86/vm/interp_masm_x86_64.cpp Wed Nov 20 11:08:09 2013 -0800 7.2 +++ b/src/cpu/x86/vm/interp_masm_x86_64.cpp Thu Nov 21 12:30:35 2013 -0800 7.3 @@ -192,7 +192,7 @@ 7.4 Register reg, 7.5 int bcp_offset) { 7.6 assert(bcp_offset >= 0, "bcp is still pointing to start of bytecode"); 7.7 - movl(reg, Address(r13, bcp_offset)); 7.8 + load_unsigned_short(reg, Address(r13, bcp_offset)); 7.9 bswapl(reg); 7.10 shrl(reg, 16); 7.11 }
8.1 --- a/src/cpu/x86/vm/macroAssembler_x86.cpp Wed Nov 20 11:08:09 2013 -0800 8.2 +++ b/src/cpu/x86/vm/macroAssembler_x86.cpp Thu Nov 21 12:30:35 2013 -0800 8.3 @@ -1381,8 +1381,12 @@ 8.4 jcc(Assembler::greater, loop); 8.5 8.6 // Bang down shadow pages too. 8.7 - // The -1 because we already subtracted 1 page. 8.8 - for (int i = 0; i< StackShadowPages-1; i++) { 8.9 + // At this point, (tmp-0) is the last address touched, so don't 8.10 + // touch it again. (It was touched as (tmp-pagesize) but then tmp 8.11 + // was post-decremented.) Skip this address by starting at i=1, and 8.12 + // touch a few more pages below. N.B. It is important to touch all 8.13 + // the way down to and including i=StackShadowPages. 8.14 + for (int i = 1; i <= StackShadowPages; i++) { 8.15 // this could be any sized move but this is can be a debugging crumb 8.16 // so the bigger the better. 8.17 movptr(Address(tmp, (-i*os::vm_page_size())), size );
9.1 --- a/src/cpu/x86/vm/templateTable_x86_32.cpp Wed Nov 20 11:08:09 2013 -0800 9.2 +++ b/src/cpu/x86/vm/templateTable_x86_32.cpp Thu Nov 21 12:30:35 2013 -0800 9.3 @@ -558,7 +558,7 @@ 9.4 9.5 9.6 void TemplateTable::locals_index_wide(Register reg) { 9.7 - __ movl(reg, at_bcp(2)); 9.8 + __ load_unsigned_short(reg, at_bcp(2)); 9.9 __ bswapl(reg); 9.10 __ shrl(reg, 16); 9.11 __ negptr(reg); 9.12 @@ -1552,7 +1552,11 @@ 9.13 InvocationCounter::counter_offset(); 9.14 9.15 // Load up EDX with the branch displacement 9.16 - __ movl(rdx, at_bcp(1)); 9.17 + if (is_wide) { 9.18 + __ movl(rdx, at_bcp(1)); 9.19 + } else { 9.20 + __ load_signed_short(rdx, at_bcp(1)); 9.21 + } 9.22 __ bswapl(rdx); 9.23 if (!is_wide) __ sarl(rdx, 16); 9.24 LP64_ONLY(__ movslq(rdx, rdx));
10.1 --- a/src/cpu/x86/vm/templateTable_x86_64.cpp Wed Nov 20 11:08:09 2013 -0800 10.2 +++ b/src/cpu/x86/vm/templateTable_x86_64.cpp Thu Nov 21 12:30:35 2013 -0800 10.3 @@ -568,7 +568,7 @@ 10.4 } 10.5 10.6 void TemplateTable::locals_index_wide(Register reg) { 10.7 - __ movl(reg, at_bcp(2)); 10.8 + __ load_unsigned_short(reg, at_bcp(2)); 10.9 __ bswapl(reg); 10.10 __ shrl(reg, 16); 10.11 __ negptr(reg); 10.12 @@ -1575,7 +1575,11 @@ 10.13 InvocationCounter::counter_offset(); 10.14 10.15 // Load up edx with the branch displacement 10.16 - __ movl(rdx, at_bcp(1)); 10.17 + if (is_wide) { 10.18 + __ movl(rdx, at_bcp(1)); 10.19 + } else { 10.20 + __ load_signed_short(rdx, at_bcp(1)); 10.21 + } 10.22 __ bswapl(rdx); 10.23 10.24 if (!is_wide) {
11.1 --- a/src/share/vm/asm/assembler.cpp Wed Nov 20 11:08:09 2013 -0800 11.2 +++ b/src/share/vm/asm/assembler.cpp Thu Nov 21 12:30:35 2013 -0800 11.3 @@ -122,7 +122,7 @@ 11.4 void AbstractAssembler::generate_stack_overflow_check( int frame_size_in_bytes) { 11.5 if (UseStackBanging) { 11.6 // Each code entry causes one stack bang n pages down the stack where n 11.7 - // is configurable by StackBangPages. The setting depends on the maximum 11.8 + // is configurable by StackShadowPages. The setting depends on the maximum 11.9 // depth of VM call stack or native before going back into java code, 11.10 // since only java code can raise a stack overflow exception using the 11.11 // stack banging mechanism. The VM and native code does not detect stack
12.1 --- a/src/share/vm/c1/c1_GraphBuilder.cpp Wed Nov 20 11:08:09 2013 -0800 12.2 +++ b/src/share/vm/c1/c1_GraphBuilder.cpp Thu Nov 21 12:30:35 2013 -0800 12.3 @@ -4338,6 +4338,11 @@ 12.4 #endif // PRODUCT 12.5 12.6 void GraphBuilder::profile_call(ciMethod* callee, Value recv, ciKlass* known_holder, Values* obj_args, bool inlined) { 12.7 + // A default method's holder is an interface 12.8 + if (known_holder != NULL && known_holder->is_interface()) { 12.9 + assert(known_holder->is_instance_klass() && ((ciInstanceKlass*)known_holder)->has_default_methods(), "should be default method"); 12.10 + known_holder = NULL; 12.11 + } 12.12 append(new ProfileCall(method(), bci(), callee, recv, known_holder, obj_args, inlined)); 12.13 } 12.14
13.1 --- a/src/share/vm/c1/c1_LIRGenerator.cpp Wed Nov 20 11:08:09 2013 -0800 13.2 +++ b/src/share/vm/c1/c1_LIRGenerator.cpp Thu Nov 21 12:30:35 2013 -0800 13.3 @@ -2574,8 +2574,25 @@ 13.4 __ jump(x->default_sux()); 13.5 } 13.6 13.7 - 13.8 -ciKlass* LIRGenerator::profile_arg_type(ciMethodData* md, int md_base_offset, int md_offset, intptr_t profiled_k, Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_k) { 13.9 +/** 13.10 + * Emit profiling code if needed for arguments, parameters, return value types 13.11 + * 13.12 + * @param md MDO the code will update at runtime 13.13 + * @param md_base_offset common offset in the MDO for this profile and subsequent ones 13.14 + * @param md_offset offset in the MDO (on top of md_base_offset) for this profile 13.15 + * @param profiled_k current profile 13.16 + * @param obj IR node for the object to be profiled 13.17 + * @param mdp register to hold the pointer inside the MDO (md + md_base_offset). 13.18 + * Set once we find an update to make and use for next ones. 13.19 + * @param not_null true if we know obj cannot be null 13.20 + * @param signature_at_call_k signature at call for obj 13.21 + * @param callee_signature_k signature of callee for obj 13.22 + * at call and callee signatures differ at method handle call 13.23 + * @return the only klass we know will ever be seen at this profile point 13.24 + */ 13.25 +ciKlass* LIRGenerator::profile_type(ciMethodData* md, int md_base_offset, int md_offset, intptr_t profiled_k, 13.26 + Value obj, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k, 13.27 + ciKlass* callee_signature_k) { 13.28 ciKlass* result = NULL; 13.29 bool do_null = !not_null && !TypeEntries::was_null_seen(profiled_k); 13.30 bool do_update = !TypeEntries::is_type_unknown(profiled_k); 13.31 @@ -2590,9 +2607,9 @@ 13.32 if (do_update) { 13.33 // try to find exact type, using CHA if possible, so that loading 13.34 // the klass from the object can be avoided 13.35 - ciType* type = arg->exact_type(); 13.36 + ciType* type = obj->exact_type(); 13.37 if (type == NULL) { 13.38 - type = arg->declared_type(); 13.39 + type = obj->declared_type(); 13.40 type = comp->cha_exact_type(type); 13.41 } 13.42 assert(type == NULL || type->is_klass(), "type should be class"); 13.43 @@ -2608,23 +2625,33 @@ 13.44 ciKlass* exact_signature_k = NULL; 13.45 if (do_update) { 13.46 // Is the type from the signature exact (the only one possible)? 13.47 - exact_signature_k = signature_k->exact_klass(); 13.48 + exact_signature_k = signature_at_call_k->exact_klass(); 13.49 if (exact_signature_k == NULL) { 13.50 - exact_signature_k = comp->cha_exact_type(signature_k); 13.51 + exact_signature_k = comp->cha_exact_type(signature_at_call_k); 13.52 } else { 13.53 result = exact_signature_k; 13.54 - do_update = false; 13.55 // Known statically. No need to emit any code: prevent 13.56 // LIR_Assembler::emit_profile_type() from emitting useless code 13.57 profiled_k = ciTypeEntries::with_status(result, profiled_k); 13.58 } 13.59 if (exact_signature_k != NULL && exact_klass != exact_signature_k) { 13.60 - assert(exact_klass == NULL, "arg and signature disagree?"); 13.61 + assert(exact_klass == NULL, "obj and signature disagree?"); 13.62 // sometimes the type of the signature is better than the best type 13.63 // the compiler has 13.64 exact_klass = exact_signature_k; 13.65 - do_update = exact_klass == NULL || ciTypeEntries::valid_ciklass(profiled_k) != exact_klass; 13.66 } 13.67 + if (callee_signature_k != NULL && 13.68 + callee_signature_k != signature_at_call_k) { 13.69 + ciKlass* improved_klass = callee_signature_k->exact_klass(); 13.70 + if (improved_klass == NULL) { 13.71 + improved_klass = comp->cha_exact_type(callee_signature_k); 13.72 + } 13.73 + if (improved_klass != NULL && exact_klass != improved_klass) { 13.74 + assert(exact_klass == NULL, "obj and signature disagree?"); 13.75 + exact_klass = exact_signature_k; 13.76 + } 13.77 + } 13.78 + do_update = exact_klass == NULL || ciTypeEntries::valid_ciklass(profiled_k) != exact_klass; 13.79 } 13.80 13.81 if (!do_null && !do_update) { 13.82 @@ -2640,7 +2667,7 @@ 13.83 __ leal(LIR_OprFact::address(base_type_address), mdp); 13.84 } 13.85 } 13.86 - LIRItem value(arg, this); 13.87 + LIRItem value(obj, this); 13.88 value.load_item(); 13.89 __ profile_type(new LIR_Address(mdp, md_offset, T_METADATA), 13.90 value.result(), exact_klass, profiled_k, new_pointer_register(), not_null, exact_signature_k != NULL); 13.91 @@ -2665,9 +2692,9 @@ 13.92 if (t == T_OBJECT || t == T_ARRAY) { 13.93 intptr_t profiled_k = parameters->type(j); 13.94 Local* local = x->state()->local_at(java_index)->as_Local(); 13.95 - ciKlass* exact = profile_arg_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)), 13.96 - in_bytes(ParametersTypeData::type_offset(j)) - in_bytes(ParametersTypeData::type_offset(0)), 13.97 - profiled_k, local, mdp, false, local->declared_type()->as_klass()); 13.98 + ciKlass* exact = profile_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)), 13.99 + in_bytes(ParametersTypeData::type_offset(j)) - in_bytes(ParametersTypeData::type_offset(0)), 13.100 + profiled_k, local, mdp, false, local->declared_type()->as_klass(), NULL); 13.101 // If the profile is known statically set it once for all and do not emit any code 13.102 if (exact != NULL) { 13.103 md->set_parameter_type(j, exact); 13.104 @@ -3129,19 +3156,28 @@ 13.105 Bytecodes::Code bc = x->method()->java_code_at_bci(bci); 13.106 int start = 0; 13.107 int stop = data->is_CallTypeData() ? ((ciCallTypeData*)data)->number_of_arguments() : ((ciVirtualCallTypeData*)data)->number_of_arguments(); 13.108 - if (x->nb_profiled_args() < stop) { 13.109 - // if called through method handle invoke, some arguments may have been popped 13.110 - stop = x->nb_profiled_args(); 13.111 + if (x->inlined() && x->callee()->is_static() && Bytecodes::has_receiver(bc)) { 13.112 + // first argument is not profiled at call (method handle invoke) 13.113 + assert(x->method()->raw_code_at_bci(bci) == Bytecodes::_invokehandle, "invokehandle expected"); 13.114 + start = 1; 13.115 } 13.116 - ciSignature* sig = x->callee()->signature(); 13.117 + ciSignature* callee_signature = x->callee()->signature(); 13.118 // method handle call to virtual method 13.119 bool has_receiver = x->inlined() && !x->callee()->is_static() && !Bytecodes::has_receiver(bc); 13.120 - ciSignatureStream sig_stream(sig, has_receiver ? x->callee()->holder() : NULL); 13.121 - for (int i = 0; i < stop; i++) { 13.122 + ciSignatureStream callee_signature_stream(callee_signature, has_receiver ? x->callee()->holder() : NULL); 13.123 + 13.124 + bool ignored_will_link; 13.125 + ciSignature* signature_at_call = NULL; 13.126 + x->method()->get_method_at_bci(bci, ignored_will_link, &signature_at_call); 13.127 + ciSignatureStream signature_at_call_stream(signature_at_call); 13.128 + 13.129 + // if called through method handle invoke, some arguments may have been popped 13.130 + for (int i = 0; i < stop && i+start < x->nb_profiled_args(); i++) { 13.131 int off = in_bytes(TypeEntriesAtCall::argument_type_offset(i)) - in_bytes(TypeEntriesAtCall::args_data_offset()); 13.132 - ciKlass* exact = profile_arg_type(md, base_offset, off, 13.133 - args->type(i), x->profiled_arg_at(i+start), mdp, 13.134 - !x->arg_needs_null_check(i+start), sig_stream.next_klass()); 13.135 + ciKlass* exact = profile_type(md, base_offset, off, 13.136 + args->type(i), x->profiled_arg_at(i+start), mdp, 13.137 + !x->arg_needs_null_check(i+start), 13.138 + signature_at_call_stream.next_klass(), callee_signature_stream.next_klass()); 13.139 if (exact != NULL) { 13.140 md->set_argument_type(bci, i, exact); 13.141 } 13.142 @@ -3176,8 +3212,8 @@ 13.143 int bci = x->bci_of_invoke(); 13.144 Bytecodes::Code bc = x->method()->java_code_at_bci(bci); 13.145 // The first parameter is the receiver so that's what we start 13.146 - // with if it exists. On exception if method handle call to 13.147 - // virtual method has receiver in the args list 13.148 + // with if it exists. One exception is method handle call to 13.149 + // virtual method: the receiver is in the args list 13.150 if (arg == NULL || !Bytecodes::has_receiver(bc)) { 13.151 i = 1; 13.152 arg = x->profiled_arg_at(0); 13.153 @@ -3186,9 +3222,9 @@ 13.154 int k = 0; // to iterate on the profile data 13.155 for (;;) { 13.156 intptr_t profiled_k = parameters->type(k); 13.157 - ciKlass* exact = profile_arg_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)), 13.158 - in_bytes(ParametersTypeData::type_offset(k)) - in_bytes(ParametersTypeData::type_offset(0)), 13.159 - profiled_k, arg, mdp, not_null, sig_stream.next_klass()); 13.160 + ciKlass* exact = profile_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)), 13.161 + in_bytes(ParametersTypeData::type_offset(k)) - in_bytes(ParametersTypeData::type_offset(0)), 13.162 + profiled_k, arg, mdp, not_null, sig_stream.next_klass(), NULL); 13.163 // If the profile is known statically set it once for all and do not emit any code 13.164 if (exact != NULL) { 13.165 md->set_parameter_type(k, exact); 13.166 @@ -3247,9 +3283,16 @@ 13.167 assert(data->is_CallTypeData() || data->is_VirtualCallTypeData(), "wrong profile data type"); 13.168 ciReturnTypeEntry* ret = data->is_CallTypeData() ? ((ciCallTypeData*)data)->ret() : ((ciVirtualCallTypeData*)data)->ret(); 13.169 LIR_Opr mdp = LIR_OprFact::illegalOpr; 13.170 - ciKlass* exact = profile_arg_type(md, 0, md->byte_offset_of_slot(data, ret->type_offset()), 13.171 - ret->type(), x->ret(), mdp, 13.172 - !x->needs_null_check(), x->callee()->signature()->return_type()->as_klass()); 13.173 + 13.174 + bool ignored_will_link; 13.175 + ciSignature* signature_at_call = NULL; 13.176 + x->method()->get_method_at_bci(bci, ignored_will_link, &signature_at_call); 13.177 + 13.178 + ciKlass* exact = profile_type(md, 0, md->byte_offset_of_slot(data, ret->type_offset()), 13.179 + ret->type(), x->ret(), mdp, 13.180 + !x->needs_null_check(), 13.181 + signature_at_call->return_type()->as_klass(), 13.182 + x->callee()->signature()->return_type()->as_klass()); 13.183 if (exact != NULL) { 13.184 md->set_return_type(bci, exact); 13.185 }
14.1 --- a/src/share/vm/c1/c1_LIRGenerator.hpp Wed Nov 20 11:08:09 2013 -0800 14.2 +++ b/src/share/vm/c1/c1_LIRGenerator.hpp Thu Nov 21 12:30:35 2013 -0800 14.3 @@ -434,7 +434,9 @@ 14.4 void do_ThreadIDIntrinsic(Intrinsic* x); 14.5 void do_ClassIDIntrinsic(Intrinsic* x); 14.6 #endif 14.7 - ciKlass* profile_arg_type(ciMethodData* md, int md_first_offset, int md_offset, intptr_t profiled_k, Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_k); 14.8 + ciKlass* profile_type(ciMethodData* md, int md_first_offset, int md_offset, intptr_t profiled_k, 14.9 + Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k, 14.10 + ciKlass* callee_signature_k); 14.11 void profile_arguments(ProfileCall* x); 14.12 void profile_parameters(Base* x); 14.13 void profile_parameters_at_call(ProfileCall* x);
15.1 --- a/src/share/vm/c1/c1_LinearScan.cpp Wed Nov 20 11:08:09 2013 -0800 15.2 +++ b/src/share/vm/c1/c1_LinearScan.cpp Thu Nov 21 12:30:35 2013 -0800 15.3 @@ -1138,8 +1138,10 @@ 15.4 } 15.5 } 15.6 } 15.7 - 15.8 - } else if (opr_type != T_LONG) { 15.9 + // We want to sometimes use logical operations on pointers, in particular in GC barriers. 15.10 + // Since 64bit logical operations do not current support operands on stack, we have to make sure 15.11 + // T_OBJECT doesn't get spilled along with T_LONG. 15.12 + } else if (opr_type != T_LONG LP64_ONLY(&& opr_type != T_OBJECT)) { 15.13 // integer instruction (note: long operands must always be in register) 15.14 switch (op->code()) { 15.15 case lir_cmp:
16.1 --- a/src/share/vm/c1/c1_globals.hpp Wed Nov 20 11:08:09 2013 -0800 16.2 +++ b/src/share/vm/c1/c1_globals.hpp Thu Nov 21 12:30:35 2013 -0800 16.3 @@ -344,9 +344,6 @@ 16.4 diagnostic(bool, C1PatchInvokeDynamic, true, \ 16.5 "Patch invokedynamic appendix not known at compile time") \ 16.6 \ 16.7 - develop(intx, MaxForceInlineLevel, 100, \ 16.8 - "maximum number of nested @ForceInline calls that are inlined") \ 16.9 - \ 16.10 16.11 16.12 // Read default values for c1 globals
17.1 --- a/src/share/vm/ci/ciEnv.cpp Wed Nov 20 11:08:09 2013 -0800 17.2 +++ b/src/share/vm/ci/ciEnv.cpp Thu Nov 21 12:30:35 2013 -0800 17.3 @@ -935,7 +935,9 @@ 17.4 17.5 // Prevent SystemDictionary::add_to_hierarchy from running 17.6 // and invalidating our dependencies until we install this method. 17.7 + // No safepoints are allowed. Otherwise, class redefinition can occur in between. 17.8 MutexLocker ml(Compile_lock); 17.9 + No_Safepoint_Verifier nsv; 17.10 17.11 // Change in Jvmti state may invalidate compilation. 17.12 if (!failing() && 17.13 @@ -1001,16 +1003,6 @@ 17.14 // Free codeBlobs 17.15 code_buffer->free_blob(); 17.16 17.17 - // stress test 6243940 by immediately making the method 17.18 - // non-entrant behind the system's back. This has serious 17.19 - // side effects on the code cache and is not meant for 17.20 - // general stress testing 17.21 - if (nm != NULL && StressNonEntrant) { 17.22 - MutexLockerEx pl(Patching_lock, Mutex::_no_safepoint_check_flag); 17.23 - NativeJump::patch_verified_entry(nm->entry_point(), nm->verified_entry_point(), 17.24 - SharedRuntime::get_handle_wrong_method_stub()); 17.25 - } 17.26 - 17.27 if (nm == NULL) { 17.28 // The CodeCache is full. Print out warning and disable compilation. 17.29 record_failure("code cache is full"); 17.30 @@ -1036,11 +1028,11 @@ 17.31 char *method_name = method->name_and_sig_as_C_string(); 17.32 tty->print_cr("Replacing method %s", method_name); 17.33 } 17.34 - if (old != NULL ) { 17.35 + if (old != NULL) { 17.36 old->make_not_entrant(); 17.37 } 17.38 } 17.39 - if (TraceNMethodInstalls ) { 17.40 + if (TraceNMethodInstalls) { 17.41 ResourceMark rm; 17.42 char *method_name = method->name_and_sig_as_C_string(); 17.43 ttyLocker ttyl; 17.44 @@ -1051,7 +1043,7 @@ 17.45 // Allow the code to be executed 17.46 method->set_code(method, nm); 17.47 } else { 17.48 - if (TraceNMethodInstalls ) { 17.49 + if (TraceNMethodInstalls) { 17.50 ResourceMark rm; 17.51 char *method_name = method->name_and_sig_as_C_string(); 17.52 ttyLocker ttyl; 17.53 @@ -1061,7 +1053,6 @@ 17.54 entry_bci); 17.55 } 17.56 method->method_holder()->add_osr_nmethod(nm); 17.57 - 17.58 } 17.59 } 17.60 }
18.1 --- a/src/share/vm/ci/ciMethodData.hpp Wed Nov 20 11:08:09 2013 -0800 18.2 +++ b/src/share/vm/ci/ciMethodData.hpp Thu Nov 21 12:30:35 2013 -0800 18.3 @@ -77,7 +77,9 @@ 18.4 static ciKlass* valid_ciklass(intptr_t k) { 18.5 if (!TypeEntries::is_type_none(k) && 18.6 !TypeEntries::is_type_unknown(k)) { 18.7 - return (ciKlass*)TypeEntries::klass_part(k); 18.8 + ciKlass* res = (ciKlass*)TypeEntries::klass_part(k); 18.9 + assert(res != NULL, "invalid"); 18.10 + return res; 18.11 } else { 18.12 return NULL; 18.13 }
19.1 --- a/src/share/vm/classfile/classFileParser.cpp Wed Nov 20 11:08:09 2013 -0800 19.2 +++ b/src/share/vm/classfile/classFileParser.cpp Thu Nov 21 12:30:35 2013 -0800 19.3 @@ -4080,7 +4080,7 @@ 19.4 19.5 // Generate any default methods - default methods are interface methods 19.6 // that have a default implementation. This is new with Lambda project. 19.7 - if (has_default_methods && !access_flags.is_interface() ) { 19.8 + if (has_default_methods ) { 19.9 DefaultMethods::generate_default_methods( 19.10 this_klass(), &all_mirandas, CHECK_(nullHandle)); 19.11 }
20.1 --- a/src/share/vm/classfile/defaultMethods.cpp Wed Nov 20 11:08:09 2013 -0800 20.2 +++ b/src/share/vm/classfile/defaultMethods.cpp Thu Nov 21 12:30:35 2013 -0800 20.3 @@ -171,8 +171,12 @@ 20.4 } 20.5 bool is_cancelled() const { return _cancelled; } 20.6 20.7 + // This code used to skip interface classes because their only 20.8 + // superclass was j.l.Object which would be also covered by class 20.9 + // superclass hierarchy walks. Now that the starting point can be 20.10 + // an interface, we must ensure we catch j.l.Object as the super. 20.11 static bool has_super(InstanceKlass* cls) { 20.12 - return cls->super() != NULL && !cls->is_interface(); 20.13 + return cls->super() != NULL; 20.14 } 20.15 20.16 Node* node_at_depth(int i) const { 20.17 @@ -391,24 +395,32 @@ 20.18 return; 20.19 } 20.20 20.21 + // Qualified methods are maximally-specific methods 20.22 + // These include public, instance concrete (=default) and abstract methods 20.23 GrowableArray<Method*> qualified_methods; 20.24 + int num_defaults = 0; 20.25 + int default_index = -1; 20.26 + int qualified_index = -1; 20.27 for (int i = 0; i < _members.length(); ++i) { 20.28 Pair<Method*,QualifiedState> entry = _members.at(i); 20.29 if (entry.second == QUALIFIED) { 20.30 qualified_methods.append(entry.first); 20.31 + qualified_index++; 20.32 + if (entry.first->is_default_method()) { 20.33 + num_defaults++; 20.34 + default_index = qualified_index; 20.35 + 20.36 + } 20.37 } 20.38 } 20.39 20.40 if (qualified_methods.length() == 0) { 20.41 _exception_message = generate_no_defaults_message(CHECK); 20.42 _exception_name = vmSymbols::java_lang_AbstractMethodError(); 20.43 - } else if (qualified_methods.length() == 1) { 20.44 - // leave abstract methods alone, they will be found via normal search path 20.45 - Method* method = qualified_methods.at(0); 20.46 - if (!method->is_abstract()) { 20.47 - _selected_target = qualified_methods.at(0); 20.48 - } 20.49 - } else { 20.50 + // If only one qualified method is default, select that 20.51 + } else if (num_defaults == 1) { 20.52 + _selected_target = qualified_methods.at(default_index); 20.53 + } else if (num_defaults > 1) { 20.54 _exception_message = generate_conflicts_message(&qualified_methods,CHECK); 20.55 _exception_name = vmSymbols::java_lang_IncompatibleClassChangeError(); 20.56 if (TraceDefaultMethods) { 20.57 @@ -416,6 +428,7 @@ 20.58 tty->print_cr(""); 20.59 } 20.60 } 20.61 + // leave abstract methods alone, they will be found via normal search path 20.62 } 20.63 20.64 bool contains_signature(Symbol* query) { 20.65 @@ -695,8 +708,10 @@ 20.66 Method* m = iklass->find_method(_method_name, _method_signature); 20.67 // private interface methods are not candidates for default methods 20.68 // invokespecial to private interface methods doesn't use default method logic 20.69 + // The overpasses are your supertypes' errors, we do not include them 20.70 // future: take access controls into account for superclass methods 20.71 - if (m != NULL && !m->is_static() && (!iklass->is_interface() || m->is_public())) { 20.72 + if (m != NULL && !m->is_static() && !m->is_overpass() && 20.73 + (!iklass->is_interface() || m->is_public())) { 20.74 if (_family == NULL) { 20.75 _family = new StatefulMethodFamily(); 20.76 } 20.77 @@ -772,7 +787,8 @@ 20.78 #ifndef PRODUCT 20.79 if (TraceDefaultMethods) { 20.80 ResourceMark rm; // be careful with these! 20.81 - tty->print_cr("Class %s requires default method processing", 20.82 + tty->print_cr("%s %s requires default method processing", 20.83 + klass->is_interface() ? "Interface" : "Class", 20.84 klass->name()->as_klass_external_name()); 20.85 PrintHierarchy printer; 20.86 printer.run(klass); 20.87 @@ -797,7 +813,7 @@ 20.88 } 20.89 #ifndef PRODUCT 20.90 if (TraceDefaultMethods) { 20.91 - tty->print_cr("Creating overpasses..."); 20.92 + tty->print_cr("Creating defaults and overpasses..."); 20.93 } 20.94 #endif // ndef PRODUCT 20.95 20.96 @@ -1067,7 +1083,9 @@ 20.97 klass->set_initial_method_idnum(new_size); 20.98 20.99 ClassLoaderData* cld = klass->class_loader_data(); 20.100 - MetadataFactory::free_array(cld, original_methods); 20.101 + if (original_methods ->length() > 0) { 20.102 + MetadataFactory::free_array(cld, original_methods); 20.103 + } 20.104 if (original_ordering->length() > 0) { 20.105 klass->set_method_ordering(merged_ordering); 20.106 MetadataFactory::free_array(cld, original_ordering);
21.1 --- a/src/share/vm/classfile/metadataOnStackMark.cpp Wed Nov 20 11:08:09 2013 -0800 21.2 +++ b/src/share/vm/classfile/metadataOnStackMark.cpp Thu Nov 21 12:30:35 2013 -0800 21.3 @@ -27,6 +27,7 @@ 21.4 #include "code/codeCache.hpp" 21.5 #include "compiler/compileBroker.hpp" 21.6 #include "oops/metadata.hpp" 21.7 +#include "prims/jvmtiImpl.hpp" 21.8 #include "runtime/synchronizer.hpp" 21.9 #include "runtime/thread.hpp" 21.10 #include "utilities/growableArray.hpp" 21.11 @@ -48,6 +49,7 @@ 21.12 Threads::metadata_do(Metadata::mark_on_stack); 21.13 CodeCache::alive_nmethods_do(nmethod::mark_on_stack); 21.14 CompileBroker::mark_on_stack(); 21.15 + JvmtiCurrentBreakpoints::metadata_do(Metadata::mark_on_stack); 21.16 } 21.17 21.18 MetadataOnStackMark::~MetadataOnStackMark() {
22.1 --- a/src/share/vm/code/nmethod.cpp Wed Nov 20 11:08:09 2013 -0800 22.2 +++ b/src/share/vm/code/nmethod.cpp Thu Nov 21 12:30:35 2013 -0800 22.3 @@ -618,21 +618,18 @@ 22.4 // record this nmethod as dependent on this klass 22.5 InstanceKlass::cast(klass)->add_dependent_nmethod(nm); 22.6 } 22.7 - } 22.8 - NOT_PRODUCT(if (nm != NULL) nmethod_stats.note_nmethod(nm)); 22.9 - if (PrintAssembly && nm != NULL) { 22.10 - Disassembler::decode(nm); 22.11 + NOT_PRODUCT(nmethod_stats.note_nmethod(nm)); 22.12 + if (PrintAssembly) { 22.13 + Disassembler::decode(nm); 22.14 + } 22.15 } 22.16 } 22.17 - 22.18 - // verify nmethod 22.19 - debug_only(if (nm) nm->verify();) // might block 22.20 - 22.21 + // Do verification and logging outside CodeCache_lock. 22.22 if (nm != NULL) { 22.23 + // Safepoints in nmethod::verify aren't allowed because nm hasn't been installed yet. 22.24 + DEBUG_ONLY(nm->verify();) 22.25 nm->log_new_nmethod(); 22.26 } 22.27 - 22.28 - // done 22.29 return nm; 22.30 } 22.31 22.32 @@ -1262,7 +1259,7 @@ 22.33 22.34 set_osr_link(NULL); 22.35 //set_scavenge_root_link(NULL); // done by prune_scavenge_root_nmethods 22.36 - NMethodSweeper::notify(); 22.37 + NMethodSweeper::report_state_change(this); 22.38 } 22.39 22.40 void nmethod::invalidate_osr_method() { 22.41 @@ -1296,7 +1293,9 @@ 22.42 } 22.43 } 22.44 22.45 -// Common functionality for both make_not_entrant and make_zombie 22.46 +/** 22.47 + * Common functionality for both make_not_entrant and make_zombie 22.48 + */ 22.49 bool nmethod::make_not_entrant_or_zombie(unsigned int state) { 22.50 assert(state == zombie || state == not_entrant, "must be zombie or not_entrant"); 22.51 assert(!is_zombie(), "should not already be a zombie"); 22.52 @@ -1420,9 +1419,7 @@ 22.53 tty->print_cr("nmethod <" INTPTR_FORMAT "> code made %s", this, (state == not_entrant) ? "not entrant" : "zombie"); 22.54 } 22.55 22.56 - // Make sweeper aware that there is a zombie method that needs to be removed 22.57 - NMethodSweeper::notify(); 22.58 - 22.59 + NMethodSweeper::report_state_change(this); 22.60 return true; 22.61 } 22.62 22.63 @@ -2395,20 +2392,23 @@ 22.64 22.65 22.66 void nmethod::verify_interrupt_point(address call_site) { 22.67 - // This code does not work in release mode since 22.68 - // owns_lock only is available in debug mode. 22.69 - CompiledIC* ic = NULL; 22.70 - Thread *cur = Thread::current(); 22.71 - if (CompiledIC_lock->owner() == cur || 22.72 - ((cur->is_VM_thread() || cur->is_ConcurrentGC_thread()) && 22.73 - SafepointSynchronize::is_at_safepoint())) { 22.74 - ic = CompiledIC_at(this, call_site); 22.75 - CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); 22.76 - } else { 22.77 - MutexLocker ml_verify (CompiledIC_lock); 22.78 - ic = CompiledIC_at(this, call_site); 22.79 + // Verify IC only when nmethod installation is finished. 22.80 + bool is_installed = (method()->code() == this) // nmethod is in state 'alive' and installed 22.81 + || !this->is_in_use(); // nmethod is installed, but not in 'alive' state 22.82 + if (is_installed) { 22.83 + Thread *cur = Thread::current(); 22.84 + if (CompiledIC_lock->owner() == cur || 22.85 + ((cur->is_VM_thread() || cur->is_ConcurrentGC_thread()) && 22.86 + SafepointSynchronize::is_at_safepoint())) { 22.87 + CompiledIC_at(this, call_site); 22.88 + CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); 22.89 + } else { 22.90 + MutexLocker ml_verify (CompiledIC_lock); 22.91 + CompiledIC_at(this, call_site); 22.92 + } 22.93 } 22.94 - PcDesc* pd = pc_desc_at(ic->end_of_call()); 22.95 + 22.96 + PcDesc* pd = pc_desc_at(nativeCall_at(call_site)->return_address()); 22.97 assert(pd != NULL, "PcDesc must exist"); 22.98 for (ScopeDesc* sd = new ScopeDesc(this, pd->scope_decode_offset(), 22.99 pd->obj_decode_offset(), pd->should_reexecute(),
23.1 --- a/src/share/vm/compiler/compileBroker.cpp Wed Nov 20 11:08:09 2013 -0800 23.2 +++ b/src/share/vm/compiler/compileBroker.cpp Thu Nov 21 12:30:35 2013 -0800 23.3 @@ -126,6 +126,7 @@ 23.4 23.5 bool CompileBroker::_initialized = false; 23.6 volatile bool CompileBroker::_should_block = false; 23.7 +volatile jint CompileBroker::_print_compilation_warning = 0; 23.8 volatile jint CompileBroker::_should_compile_new_jobs = run_compilation; 23.9 23.10 // The installed compiler(s) 23.11 @@ -2027,11 +2028,10 @@ 23.12 #endif 23.13 } 23.14 23.15 -// ------------------------------------------------------------------ 23.16 -// CompileBroker::handle_full_code_cache 23.17 -// 23.18 -// The CodeCache is full. Print out warning and disable compilation or 23.19 -// try code cache cleaning so compilation can continue later. 23.20 +/** 23.21 + * The CodeCache is full. Print out warning and disable compilation 23.22 + * or try code cache cleaning so compilation can continue later. 23.23 + */ 23.24 void CompileBroker::handle_full_code_cache() { 23.25 UseInterpreter = true; 23.26 if (UseCompiler || AlwaysCompileLoopMethods ) { 23.27 @@ -2048,12 +2048,9 @@ 23.28 xtty->stamp(); 23.29 xtty->end_elem(); 23.30 } 23.31 - warning("CodeCache is full. Compiler has been disabled."); 23.32 - warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize="); 23.33 23.34 CodeCache::report_codemem_full(); 23.35 23.36 - 23.37 #ifndef PRODUCT 23.38 if (CompileTheWorld || ExitOnFullCodeCache) { 23.39 codecache_print(/* detailed= */ true); 23.40 @@ -2066,17 +2063,22 @@ 23.41 // Since code cache is full, immediately stop new compiles 23.42 if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) { 23.43 NMethodSweeper::log_sweep("disable_compiler"); 23.44 - 23.45 - // Switch to 'vm_state'. This ensures that possibly_sweep() can be called 23.46 - // without having to consider the state in which the current thread is. 23.47 - ThreadInVMfromUnknown in_vm; 23.48 - NMethodSweeper::possibly_sweep(); 23.49 } 23.50 + // Switch to 'vm_state'. This ensures that possibly_sweep() can be called 23.51 + // without having to consider the state in which the current thread is. 23.52 + ThreadInVMfromUnknown in_vm; 23.53 + NMethodSweeper::possibly_sweep(); 23.54 } else { 23.55 disable_compilation_forever(); 23.56 } 23.57 + 23.58 + // Print warning only once 23.59 + if (should_print_compiler_warning()) { 23.60 + warning("CodeCache is full. Compiler has been disabled."); 23.61 + warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize="); 23.62 + codecache_print(/* detailed= */ true); 23.63 + } 23.64 } 23.65 - codecache_print(/* detailed= */ true); 23.66 } 23.67 23.68 // ------------------------------------------------------------------
24.1 --- a/src/share/vm/compiler/compileBroker.hpp Wed Nov 20 11:08:09 2013 -0800 24.2 +++ b/src/share/vm/compiler/compileBroker.hpp Thu Nov 21 12:30:35 2013 -0800 24.3 @@ -315,6 +315,8 @@ 24.4 static int _sum_nmethod_code_size; 24.5 static long _peak_compilation_time; 24.6 24.7 + static volatile jint _print_compilation_warning; 24.8 + 24.9 static CompilerThread* make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, AbstractCompiler* comp, TRAPS); 24.10 static void init_compiler_threads(int c1_compiler_count, int c2_compiler_count); 24.11 static bool compilation_is_complete (methodHandle method, int osr_bci, int comp_level); 24.12 @@ -418,7 +420,11 @@ 24.13 return _should_compile_new_jobs == shutdown_compilaton; 24.14 } 24.15 static void handle_full_code_cache(); 24.16 - 24.17 + // Ensures that warning is only printed once. 24.18 + static bool should_print_compiler_warning() { 24.19 + jint old = Atomic::cmpxchg(1, &_print_compilation_warning, 0); 24.20 + return old == 0; 24.21 + } 24.22 // Return total compilation ticks 24.23 static jlong total_compilation_ticks() { 24.24 return _perf_total_compilation != NULL ? _perf_total_compilation->get_value() : 0;
25.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Wed Nov 20 11:08:09 2013 -0800 25.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Thu Nov 21 12:30:35 2013 -0800 25.3 @@ -47,8 +47,9 @@ 25.4 // ConcurrentMarkSweepPolicy methods 25.5 // 25.6 25.7 -ConcurrentMarkSweepPolicy::ConcurrentMarkSweepPolicy() { 25.8 - initialize_all(); 25.9 +void ConcurrentMarkSweepPolicy::initialize_alignments() { 25.10 + _space_alignment = _gen_alignment = (uintx)Generation::GenGrain; 25.11 + _heap_alignment = compute_heap_alignment(); 25.12 } 25.13 25.14 void ConcurrentMarkSweepPolicy::initialize_generations() {
26.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp Wed Nov 20 11:08:09 2013 -0800 26.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp Thu Nov 21 12:30:35 2013 -0800 26.3 @@ -29,10 +29,11 @@ 26.4 26.5 class ConcurrentMarkSweepPolicy : public TwoGenerationCollectorPolicy { 26.6 protected: 26.7 + void initialize_alignments(); 26.8 void initialize_generations(); 26.9 26.10 public: 26.11 - ConcurrentMarkSweepPolicy(); 26.12 + ConcurrentMarkSweepPolicy() {} 26.13 26.14 ConcurrentMarkSweepPolicy* as_concurrent_mark_sweep_policy() { return this; } 26.15
27.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Nov 20 11:08:09 2013 -0800 27.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu Nov 21 12:30:35 2013 -0800 27.3 @@ -594,9 +594,9 @@ 27.4 _verification_mark_bm(0, Mutex::leaf + 1, "CMS_verification_mark_bm_lock"), 27.5 _completed_initialization(false), 27.6 _collector_policy(cp), 27.7 - _should_unload_classes(false), 27.8 + _should_unload_classes(CMSClassUnloadingEnabled), 27.9 _concurrent_cycles_since_last_unload(0), 27.10 - _roots_scanning_options(0), 27.11 + _roots_scanning_options(SharedHeap::SO_None), 27.12 _inter_sweep_estimate(CMS_SweepWeight, CMS_SweepPadding), 27.13 _intra_sweep_estimate(CMS_SweepWeight, CMS_SweepPadding), 27.14 _gc_tracer_cm(new (ResourceObj::C_HEAP, mtGC) CMSTracer()), 27.15 @@ -788,14 +788,6 @@ 27.16 && _survivor_chunk_index == 0), 27.17 "Error"); 27.18 27.19 - // Choose what strong roots should be scanned depending on verification options 27.20 - if (!CMSClassUnloadingEnabled) { 27.21 - // If class unloading is disabled we want to include all classes into the root set. 27.22 - add_root_scanning_option(SharedHeap::SO_AllClasses); 27.23 - } else { 27.24 - add_root_scanning_option(SharedHeap::SO_SystemClasses); 27.25 - } 27.26 - 27.27 NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;) 27.28 _gc_counters = new CollectorCounters("CMS", 1); 27.29 _completed_initialization = true; 27.30 @@ -2532,6 +2524,9 @@ 27.31 // Snapshot the soft reference policy to be used in this collection cycle. 27.32 ref_processor()->setup_policy(clear_all_soft_refs); 27.33 27.34 + // Decide if class unloading should be done 27.35 + update_should_unload_classes(); 27.36 + 27.37 bool init_mark_was_synchronous = false; // until proven otherwise 27.38 while (_collectorState != Idling) { 27.39 if (TraceCMSState) { 27.40 @@ -3310,7 +3305,10 @@ 27.41 || VerifyBeforeExit; 27.42 const int rso = SharedHeap::SO_Strings | SharedHeap::SO_CodeCache; 27.43 27.44 + // We set the proper root for this CMS cycle here. 27.45 if (should_unload_classes()) { // Should unload classes this cycle 27.46 + remove_root_scanning_option(SharedHeap::SO_AllClasses); 27.47 + add_root_scanning_option(SharedHeap::SO_SystemClasses); 27.48 remove_root_scanning_option(rso); // Shrink the root set appropriately 27.49 set_verifying(should_verify); // Set verification state for this cycle 27.50 return; // Nothing else needs to be done at this time 27.51 @@ -3318,6 +3316,9 @@ 27.52 27.53 // Not unloading classes this cycle 27.54 assert(!should_unload_classes(), "Inconsitency!"); 27.55 + remove_root_scanning_option(SharedHeap::SO_SystemClasses); 27.56 + add_root_scanning_option(SharedHeap::SO_AllClasses); 27.57 + 27.58 if ((!verifying() || unloaded_classes_last_cycle()) && should_verify) { 27.59 // Include symbols, strings and code cache elements to prevent their resurrection. 27.60 add_root_scanning_option(rso);
28.1 --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Wed Nov 20 11:08:09 2013 -0800 28.2 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Nov 21 12:30:35 2013 -0800 28.3 @@ -2008,7 +2008,7 @@ 28.4 28.5 size_t init_byte_size = collector_policy()->initial_heap_byte_size(); 28.6 size_t max_byte_size = collector_policy()->max_heap_byte_size(); 28.7 - size_t heap_alignment = collector_policy()->max_alignment(); 28.8 + size_t heap_alignment = collector_policy()->heap_alignment(); 28.9 28.10 // Ensure that the sizes are properly aligned. 28.11 Universe::check_alignment(init_byte_size, HeapRegion::GrainBytes, "g1 heap"); 28.12 @@ -6656,13 +6656,18 @@ 28.13 if (!oopDesc::is_null(heap_oop)) { 28.14 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); 28.15 HeapRegion* hr = _g1h->heap_region_containing(obj); 28.16 - assert(!hr->isHumongous(), "code root in humongous region?"); 28.17 + assert(!hr->continuesHumongous(), 28.18 + err_msg("trying to add code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT 28.19 + " starting at "HR_FORMAT, 28.20 + _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()))); 28.21 28.22 // HeapRegion::add_strong_code_root() avoids adding duplicate 28.23 // entries but having duplicates is OK since we "mark" nmethods 28.24 // as visited when we scan the strong code root lists during the GC. 28.25 hr->add_strong_code_root(_nm); 28.26 - assert(hr->rem_set()->strong_code_roots_list_contains(_nm), "add failed?"); 28.27 + assert(hr->rem_set()->strong_code_roots_list_contains(_nm), 28.28 + err_msg("failed to add code root "PTR_FORMAT" to remembered set of region "HR_FORMAT, 28.29 + _nm, HR_FORMAT_PARAMS(hr))); 28.30 } 28.31 } 28.32 28.33 @@ -6683,9 +6688,15 @@ 28.34 if (!oopDesc::is_null(heap_oop)) { 28.35 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); 28.36 HeapRegion* hr = _g1h->heap_region_containing(obj); 28.37 - assert(!hr->isHumongous(), "code root in humongous region?"); 28.38 + assert(!hr->continuesHumongous(), 28.39 + err_msg("trying to remove code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT 28.40 + " starting at "HR_FORMAT, 28.41 + _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()))); 28.42 + 28.43 hr->remove_strong_code_root(_nm); 28.44 - assert(!hr->rem_set()->strong_code_roots_list_contains(_nm), "remove failed?"); 28.45 + assert(!hr->rem_set()->strong_code_roots_list_contains(_nm), 28.46 + err_msg("failed to remove code root "PTR_FORMAT" of region "HR_FORMAT, 28.47 + _nm, HR_FORMAT_PARAMS(hr))); 28.48 } 28.49 } 28.50 28.51 @@ -6716,7 +6727,9 @@ 28.52 class MigrateCodeRootsHeapRegionClosure: public HeapRegionClosure { 28.53 public: 28.54 bool doHeapRegion(HeapRegion *hr) { 28.55 - assert(!hr->isHumongous(), "humongous region in collection set?"); 28.56 + assert(!hr->isHumongous(), 28.57 + err_msg("humongous region "HR_FORMAT" should not have been added to collection set", 28.58 + HR_FORMAT_PARAMS(hr))); 28.59 hr->migrate_strong_code_roots(); 28.60 return false; 28.61 } 28.62 @@ -6796,9 +6809,13 @@ 28.63 28.64 bool doHeapRegion(HeapRegion *hr) { 28.65 HeapRegionRemSet* hrrs = hr->rem_set(); 28.66 - if (hr->isHumongous()) { 28.67 - // Code roots should never be attached to a humongous region 28.68 - assert(hrrs->strong_code_roots_list_length() == 0, "sanity"); 28.69 + if (hr->continuesHumongous()) { 28.70 + // Code roots should never be attached to a continuation of a humongous region 28.71 + assert(hrrs->strong_code_roots_list_length() == 0, 28.72 + err_msg("code roots should never be attached to continuations of humongous region "HR_FORMAT 28.73 + " starting at "HR_FORMAT", but has "INT32_FORMAT, 28.74 + HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()), 28.75 + hrrs->strong_code_roots_list_length())); 28.76 return false; 28.77 } 28.78
29.1 --- a/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Wed Nov 20 11:08:09 2013 -0800 29.2 +++ b/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Thu Nov 21 12:30:35 2013 -0800 29.3 @@ -313,27 +313,38 @@ 29.4 // for the first time during initialization. 29.5 _reserve_regions = 0; 29.6 29.7 - initialize_all(); 29.8 _collectionSetChooser = new CollectionSetChooser(); 29.9 - _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags 29.10 +} 29.11 + 29.12 +void G1CollectorPolicy::initialize_alignments() { 29.13 + _space_alignment = HeapRegion::GrainBytes; 29.14 + size_t card_table_alignment = GenRemSet::max_alignment_constraint(GenRemSet::CardTable); 29.15 + size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size(); 29.16 + _heap_alignment = MAX3(card_table_alignment, _space_alignment, page_size); 29.17 } 29.18 29.19 void G1CollectorPolicy::initialize_flags() { 29.20 - _min_alignment = HeapRegion::GrainBytes; 29.21 - size_t card_table_alignment = GenRemSet::max_alignment_constraint(rem_set_name()); 29.22 - size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size(); 29.23 - _max_alignment = MAX3(card_table_alignment, _min_alignment, page_size); 29.24 + if (G1HeapRegionSize != HeapRegion::GrainBytes) { 29.25 + FLAG_SET_ERGO(uintx, G1HeapRegionSize, HeapRegion::GrainBytes); 29.26 + } 29.27 + 29.28 if (SurvivorRatio < 1) { 29.29 vm_exit_during_initialization("Invalid survivor ratio specified"); 29.30 } 29.31 CollectorPolicy::initialize_flags(); 29.32 + _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags 29.33 } 29.34 29.35 -G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true) { 29.36 - assert(G1NewSizePercent <= G1MaxNewSizePercent, "Min larger than max"); 29.37 - assert(G1NewSizePercent > 0 && G1NewSizePercent < 100, "Min out of bounds"); 29.38 - assert(G1MaxNewSizePercent > 0 && G1MaxNewSizePercent < 100, "Max out of bounds"); 29.39 +void G1CollectorPolicy::post_heap_initialize() { 29.40 + uintx max_regions = G1CollectedHeap::heap()->max_regions(); 29.41 + size_t max_young_size = (size_t)_young_gen_sizer->max_young_length(max_regions) * HeapRegion::GrainBytes; 29.42 + if (max_young_size != MaxNewSize) { 29.43 + FLAG_SET_ERGO(uintx, MaxNewSize, max_young_size); 29.44 + } 29.45 +} 29.46 29.47 +G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true), 29.48 + _min_desired_young_length(0), _max_desired_young_length(0) { 29.49 if (FLAG_IS_CMDLINE(NewRatio)) { 29.50 if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) { 29.51 warning("-XX:NewSize and -XX:MaxNewSize override -XX:NewRatio"); 29.52 @@ -344,8 +355,13 @@ 29.53 } 29.54 } 29.55 29.56 - if (FLAG_IS_CMDLINE(NewSize) && FLAG_IS_CMDLINE(MaxNewSize) && NewSize > MaxNewSize) { 29.57 - vm_exit_during_initialization("Initial young gen size set larger than the maximum young gen size"); 29.58 + if (NewSize > MaxNewSize) { 29.59 + if (FLAG_IS_CMDLINE(MaxNewSize)) { 29.60 + warning("NewSize (" SIZE_FORMAT "k) is greater than the MaxNewSize (" SIZE_FORMAT "k). " 29.61 + "A new max generation size of " SIZE_FORMAT "k will be used.", 29.62 + NewSize/K, MaxNewSize/K, NewSize/K); 29.63 + } 29.64 + MaxNewSize = NewSize; 29.65 } 29.66 29.67 if (FLAG_IS_CMDLINE(NewSize)) { 29.68 @@ -378,34 +394,48 @@ 29.69 return MAX2(1U, default_value); 29.70 } 29.71 29.72 -void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) { 29.73 - assert(new_number_of_heap_regions > 0, "Heap must be initialized"); 29.74 +void G1YoungGenSizer::recalculate_min_max_young_length(uint number_of_heap_regions, uint* min_young_length, uint* max_young_length) { 29.75 + assert(number_of_heap_regions > 0, "Heap must be initialized"); 29.76 29.77 switch (_sizer_kind) { 29.78 case SizerDefaults: 29.79 - _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions); 29.80 - _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions); 29.81 + *min_young_length = calculate_default_min_length(number_of_heap_regions); 29.82 + *max_young_length = calculate_default_max_length(number_of_heap_regions); 29.83 break; 29.84 case SizerNewSizeOnly: 29.85 - _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions); 29.86 - _max_desired_young_length = MAX2(_min_desired_young_length, _max_desired_young_length); 29.87 + *max_young_length = calculate_default_max_length(number_of_heap_regions); 29.88 + *max_young_length = MAX2(*min_young_length, *max_young_length); 29.89 break; 29.90 case SizerMaxNewSizeOnly: 29.91 - _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions); 29.92 - _min_desired_young_length = MIN2(_min_desired_young_length, _max_desired_young_length); 29.93 + *min_young_length = calculate_default_min_length(number_of_heap_regions); 29.94 + *min_young_length = MIN2(*min_young_length, *max_young_length); 29.95 break; 29.96 case SizerMaxAndNewSize: 29.97 // Do nothing. Values set on the command line, don't update them at runtime. 29.98 break; 29.99 case SizerNewRatio: 29.100 - _min_desired_young_length = new_number_of_heap_regions / (NewRatio + 1); 29.101 - _max_desired_young_length = _min_desired_young_length; 29.102 + *min_young_length = number_of_heap_regions / (NewRatio + 1); 29.103 + *max_young_length = *min_young_length; 29.104 break; 29.105 default: 29.106 ShouldNotReachHere(); 29.107 } 29.108 29.109 - assert(_min_desired_young_length <= _max_desired_young_length, "Invalid min/max young gen size values"); 29.110 + assert(*min_young_length <= *max_young_length, "Invalid min/max young gen size values"); 29.111 +} 29.112 + 29.113 +uint G1YoungGenSizer::max_young_length(uint number_of_heap_regions) { 29.114 + // We need to pass the desired values because recalculation may not update these 29.115 + // values in some cases. 29.116 + uint temp = _min_desired_young_length; 29.117 + uint result = _max_desired_young_length; 29.118 + recalculate_min_max_young_length(number_of_heap_regions, &temp, &result); 29.119 + return result; 29.120 +} 29.121 + 29.122 +void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) { 29.123 + recalculate_min_max_young_length(new_number_of_heap_regions, &_min_desired_young_length, 29.124 + &_max_desired_young_length); 29.125 } 29.126 29.127 void G1CollectorPolicy::init() {
30.1 --- a/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Wed Nov 20 11:08:09 2013 -0800 30.2 +++ b/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Thu Nov 21 12:30:35 2013 -0800 30.3 @@ -136,8 +136,16 @@ 30.4 uint calculate_default_min_length(uint new_number_of_heap_regions); 30.5 uint calculate_default_max_length(uint new_number_of_heap_regions); 30.6 30.7 + // Update the given values for minimum and maximum young gen length in regions 30.8 + // given the number of heap regions depending on the kind of sizing algorithm. 30.9 + void recalculate_min_max_young_length(uint number_of_heap_regions, uint* min_young_length, uint* max_young_length); 30.10 + 30.11 public: 30.12 G1YoungGenSizer(); 30.13 + // Calculate the maximum length of the young gen given the number of regions 30.14 + // depending on the sizing algorithm. 30.15 + uint max_young_length(uint number_of_heap_regions); 30.16 + 30.17 void heap_size_changed(uint new_number_of_heap_regions); 30.18 uint min_desired_young_length() { 30.19 return _min_desired_young_length; 30.20 @@ -165,13 +173,9 @@ 30.21 30.22 G1MMUTracker* _mmu_tracker; 30.23 30.24 + void initialize_alignments(); 30.25 void initialize_flags(); 30.26 30.27 - void initialize_all() { 30.28 - initialize_flags(); 30.29 - initialize_size_info(); 30.30 - } 30.31 - 30.32 CollectionSetChooser* _collectionSetChooser; 30.33 30.34 double _full_collection_start_sec; 30.35 @@ -217,7 +221,6 @@ 30.36 return _during_marking; 30.37 } 30.38 30.39 -private: 30.40 enum PredictionConstants { 30.41 TruncatedSeqLength = 10 30.42 }; 30.43 @@ -665,8 +668,6 @@ 30.44 30.45 BarrierSet::Name barrier_set_name() { return BarrierSet::G1SATBCTLogging; } 30.46 30.47 - GenRemSet::Name rem_set_name() { return GenRemSet::CardTable; } 30.48 - 30.49 bool need_to_start_conc_mark(const char* source, size_t alloc_word_size = 0); 30.50 30.51 // Record the start and end of an evacuation pause. 30.52 @@ -934,6 +935,7 @@ 30.53 // Calculates survivor space parameters. 30.54 void update_survivors_policy(); 30.55 30.56 + virtual void post_heap_initialize(); 30.57 }; 30.58 30.59 // This should move to some place more general...
31.1 --- a/src/share/vm/gc_implementation/g1/g1RemSet.cpp Wed Nov 20 11:08:09 2013 -0800 31.2 +++ b/src/share/vm/gc_implementation/g1/g1RemSet.cpp Thu Nov 21 12:30:35 2013 -0800 31.3 @@ -377,11 +377,6 @@ 31.4 DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); 31.5 dcqs.concatenate_logs(); 31.6 31.7 - if (G1CollectedHeap::use_parallel_gc_threads()) { 31.8 - // Don't set the number of workers here. It will be set 31.9 - // when the task is run 31.10 - // _seq_task->set_n_termination((int)n_workers()); 31.11 - } 31.12 guarantee( _cards_scanned == NULL, "invariant" ); 31.13 _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers(), mtGC); 31.14 for (uint i = 0; i < n_workers(); ++i) {
32.1 --- a/src/share/vm/gc_implementation/g1/heapRegion.cpp Wed Nov 20 11:08:09 2013 -0800 32.2 +++ b/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Nov 21 12:30:35 2013 -0800 32.3 @@ -174,11 +174,6 @@ 32.4 region_size = MAX_REGION_SIZE; 32.5 } 32.6 32.7 - if (region_size != G1HeapRegionSize) { 32.8 - // Update the flag to make sure that PrintFlagsFinal logs the correct value 32.9 - FLAG_SET_ERGO(uintx, G1HeapRegionSize, region_size); 32.10 - } 32.11 - 32.12 // And recalculate the log. 32.13 region_size_log = log2_long((jlong) region_size); 32.14 32.15 @@ -606,7 +601,9 @@ 32.16 32.17 void HeapRegion::migrate_strong_code_roots() { 32.18 assert(in_collection_set(), "only collection set regions"); 32.19 - assert(!isHumongous(), "not humongous regions"); 32.20 + assert(!isHumongous(), 32.21 + err_msg("humongous region "HR_FORMAT" should not have been added to collection set", 32.22 + HR_FORMAT_PARAMS(this))); 32.23 32.24 HeapRegionRemSet* hrrs = rem_set(); 32.25 hrrs->migrate_strong_code_roots(); 32.26 @@ -727,12 +724,11 @@ 32.27 return; 32.28 } 32.29 32.30 - // An H-region should have an empty strong code root list 32.31 - if (isHumongous()) { 32.32 + if (continuesHumongous()) { 32.33 if (strong_code_roots_length > 0) { 32.34 - gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is humongous " 32.35 - "but has "INT32_FORMAT" code root entries", 32.36 - bottom(), end(), strong_code_roots_length); 32.37 + gclog_or_tty->print_cr("region "HR_FORMAT" is a continuation of a humongous " 32.38 + "region but has "INT32_FORMAT" code root entries", 32.39 + HR_FORMAT_PARAMS(this), strong_code_roots_length); 32.40 *failures = true; 32.41 } 32.42 return;
33.1 --- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Wed Nov 20 11:08:09 2013 -0800 33.2 +++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Nov 21 12:30:35 2013 -0800 33.3 @@ -1004,7 +1004,9 @@ 33.4 33.5 void HeapRegionRemSet::migrate_strong_code_roots() { 33.6 assert(hr()->in_collection_set(), "only collection set regions"); 33.7 - assert(!hr()->isHumongous(), "not humongous regions"); 33.8 + assert(!hr()->isHumongous(), 33.9 + err_msg("humongous region "HR_FORMAT" should not have been added to the collection set", 33.10 + HR_FORMAT_PARAMS(hr()))); 33.11 33.12 ResourceMark rm; 33.13
34.1 --- a/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp Wed Nov 20 11:08:09 2013 -0800 34.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp Thu Nov 21 12:30:35 2013 -0800 34.3 @@ -25,6 +25,7 @@ 34.4 #include "precompiled.hpp" 34.5 #include "gc_implementation/parallelScavenge/adjoiningGenerations.hpp" 34.6 #include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" 34.7 +#include "gc_implementation/parallelScavenge/generationSizer.hpp" 34.8 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" 34.9 34.10 // If boundary moving is being used, create the young gen and old 34.11 @@ -32,15 +33,17 @@ 34.12 // the old behavior otherwise (with PSYoungGen and PSOldGen). 34.13 34.14 AdjoiningGenerations::AdjoiningGenerations(ReservedSpace old_young_rs, 34.15 - size_t init_low_byte_size, 34.16 - size_t min_low_byte_size, 34.17 - size_t max_low_byte_size, 34.18 - size_t init_high_byte_size, 34.19 - size_t min_high_byte_size, 34.20 - size_t max_high_byte_size, 34.21 + GenerationSizer* policy, 34.22 size_t alignment) : 34.23 - _virtual_spaces(old_young_rs, min_low_byte_size, 34.24 - min_high_byte_size, alignment) { 34.25 + _virtual_spaces(old_young_rs, policy->min_gen1_size(), 34.26 + policy->min_gen0_size(), alignment) { 34.27 + size_t init_low_byte_size = policy->initial_gen1_size(); 34.28 + size_t min_low_byte_size = policy->min_gen1_size(); 34.29 + size_t max_low_byte_size = policy->max_gen1_size(); 34.30 + size_t init_high_byte_size = policy->initial_gen0_size(); 34.31 + size_t min_high_byte_size = policy->min_gen0_size(); 34.32 + size_t max_high_byte_size = policy->max_gen0_size(); 34.33 + 34.34 assert(min_low_byte_size <= init_low_byte_size && 34.35 init_low_byte_size <= max_low_byte_size, "Parameter check"); 34.36 assert(min_high_byte_size <= init_high_byte_size &&
35.1 --- a/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp Wed Nov 20 11:08:09 2013 -0800 35.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp Thu Nov 21 12:30:35 2013 -0800 35.3 @@ -28,6 +28,7 @@ 35.4 #include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" 35.5 #include "gc_implementation/parallelScavenge/asPSOldGen.hpp" 35.6 #include "gc_implementation/parallelScavenge/asPSYoungGen.hpp" 35.7 +#include "gc_implementation/parallelScavenge/generationSizer.hpp" 35.8 35.9 35.10 // Contains two generations that both use an AdjoiningVirtualSpaces. 35.11 @@ -56,14 +57,7 @@ 35.12 bool request_young_gen_expansion(size_t desired_change_in_bytes); 35.13 35.14 public: 35.15 - AdjoiningGenerations(ReservedSpace rs, 35.16 - size_t init_low_byte_size, 35.17 - size_t min_low_byte_size, 35.18 - size_t max_low_byte_size, 35.19 - size_t init_high_byte_size, 35.20 - size_t min_high_byte_size, 35.21 - size_t max_high_bytes_size, 35.22 - size_t alignment); 35.23 + AdjoiningGenerations(ReservedSpace rs, GenerationSizer* policy, size_t alignment); 35.24 35.25 // Accessors 35.26 PSYoungGen* young_gen() { return _young_gen; }
36.1 --- a/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.cpp Wed Nov 20 11:08:09 2013 -0800 36.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.cpp Thu Nov 21 12:30:35 2013 -0800 36.3 @@ -54,7 +54,6 @@ 36.4 int level) : 36.5 PSOldGen(initial_size, min_size, size_limit, gen_name, level), 36.6 _gen_size_limit(size_limit) 36.7 - 36.8 {} 36.9 36.10 ASPSOldGen::ASPSOldGen(PSVirtualSpace* vs, 36.11 @@ -65,13 +64,11 @@ 36.12 int level) : 36.13 PSOldGen(initial_size, min_size, size_limit, gen_name, level), 36.14 _gen_size_limit(size_limit) 36.15 - 36.16 { 36.17 _virtual_space = vs; 36.18 } 36.19 36.20 void ASPSOldGen::initialize_work(const char* perf_data_name, int level) { 36.21 - 36.22 PSOldGen::initialize_work(perf_data_name, level); 36.23 36.24 // The old gen can grow to gen_size_limit(). _reserve reflects only 36.25 @@ -94,7 +91,7 @@ 36.26 36.27 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 36.28 size_t result = gen_size_limit() - virtual_space()->committed_size(); 36.29 - size_t result_aligned = align_size_down(result, heap->old_gen_alignment()); 36.30 + size_t result_aligned = align_size_down(result, heap->generation_alignment()); 36.31 return result_aligned; 36.32 } 36.33 36.34 @@ -105,7 +102,7 @@ 36.35 } 36.36 36.37 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 36.38 - const size_t gen_alignment = heap->old_gen_alignment(); 36.39 + const size_t gen_alignment = heap->generation_alignment(); 36.40 PSAdaptiveSizePolicy* policy = heap->size_policy(); 36.41 const size_t working_size = 36.42 used_in_bytes() + (size_t) policy->avg_promoted()->padded_average();
37.1 --- a/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.cpp Wed Nov 20 11:08:09 2013 -0800 37.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.cpp Thu Nov 21 12:30:35 2013 -0800 37.3 @@ -70,13 +70,12 @@ 37.4 } 37.5 37.6 size_t ASPSYoungGen::available_for_expansion() { 37.7 - 37.8 size_t current_committed_size = virtual_space()->committed_size(); 37.9 assert((gen_size_limit() >= current_committed_size), 37.10 "generation size limit is wrong"); 37.11 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 37.12 size_t result = gen_size_limit() - current_committed_size; 37.13 - size_t result_aligned = align_size_down(result, heap->young_gen_alignment()); 37.14 + size_t result_aligned = align_size_down(result, heap->generation_alignment()); 37.15 return result_aligned; 37.16 } 37.17 37.18 @@ -85,7 +84,6 @@ 37.19 // Future implementations could check the survivors and if to_space is in the 37.20 // right place (below from_space), take a chunk from to_space. 37.21 size_t ASPSYoungGen::available_for_contraction() { 37.22 - 37.23 size_t uncommitted_bytes = virtual_space()->uncommitted_size(); 37.24 if (uncommitted_bytes != 0) { 37.25 return uncommitted_bytes; 37.26 @@ -94,8 +92,8 @@ 37.27 if (eden_space()->is_empty()) { 37.28 // Respect the minimum size for eden and for the young gen as a whole. 37.29 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 37.30 - const size_t eden_alignment = heap->intra_heap_alignment(); 37.31 - const size_t gen_alignment = heap->young_gen_alignment(); 37.32 + const size_t eden_alignment = heap->space_alignment(); 37.33 + const size_t gen_alignment = heap->generation_alignment(); 37.34 37.35 assert(eden_space()->capacity_in_bytes() >= eden_alignment, 37.36 "Alignment is wrong"); 37.37 @@ -121,7 +119,6 @@ 37.38 gclog_or_tty->print_cr(" gen_avail %d K", gen_avail/K); 37.39 } 37.40 return result_aligned; 37.41 - 37.42 } 37.43 37.44 return 0; 37.45 @@ -132,7 +129,7 @@ 37.46 // to_space can be. 37.47 size_t ASPSYoungGen::available_to_live() { 37.48 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 37.49 - const size_t alignment = heap->intra_heap_alignment(); 37.50 + const size_t alignment = heap->space_alignment(); 37.51 37.52 // Include any space that is committed but is not in eden. 37.53 size_t available = pointer_delta(eden_space()->bottom(), 37.54 @@ -296,7 +293,7 @@ 37.55 assert(eden_start < from_start, "Cannot push into from_space"); 37.56 37.57 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 37.58 - const size_t alignment = heap->intra_heap_alignment(); 37.59 + const size_t alignment = heap->space_alignment(); 37.60 const bool maintain_minimum = 37.61 (requested_eden_size + 2 * requested_survivor_size) <= min_gen_size(); 37.62
38.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 38.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp Thu Nov 21 12:30:35 2013 -0800 38.3 @@ -0,0 +1,85 @@ 38.4 +/* 38.5 + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. 38.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 38.7 + * 38.8 + * This code is free software; you can redistribute it and/or modify it 38.9 + * under the terms of the GNU General Public License version 2 only, as 38.10 + * published by the Free Software Foundation. 38.11 + * 38.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 38.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 38.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 38.15 + * version 2 for more details (a copy is included in the LICENSE file that 38.16 + * accompanied this code). 38.17 + * 38.18 + * You should have received a copy of the GNU General Public License version 38.19 + * 2 along with this work; if not, write to the Free Software Foundation, 38.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 38.21 + * 38.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 38.23 + * or visit www.oracle.com if you need additional information or have any 38.24 + * questions. 38.25 + * 38.26 + */ 38.27 + 38.28 +#include "precompiled.hpp" 38.29 +#include "gc_implementation/parallelScavenge/generationSizer.hpp" 38.30 +#include "memory/collectorPolicy.hpp" 38.31 + 38.32 +void GenerationSizer::trace_gen_sizes(const char* const str) { 38.33 + if (TracePageSizes) { 38.34 + tty->print_cr("%s: " SIZE_FORMAT "," SIZE_FORMAT " " 38.35 + SIZE_FORMAT "," SIZE_FORMAT " " 38.36 + SIZE_FORMAT, 38.37 + str, 38.38 + _min_gen1_size / K, _max_gen1_size / K, 38.39 + _min_gen0_size / K, _max_gen0_size / K, 38.40 + _max_heap_byte_size / K); 38.41 + } 38.42 +} 38.43 + 38.44 +void GenerationSizer::initialize_alignments() { 38.45 + _space_alignment = _gen_alignment = default_gen_alignment(); 38.46 + _heap_alignment = compute_heap_alignment(); 38.47 +} 38.48 + 38.49 +void GenerationSizer::initialize_flags() { 38.50 + // Do basic sizing work 38.51 + TwoGenerationCollectorPolicy::initialize_flags(); 38.52 + 38.53 + assert(UseSerialGC || 38.54 + !FLAG_IS_DEFAULT(ParallelGCThreads) || 38.55 + (ParallelGCThreads > 0), 38.56 + "ParallelGCThreads should be set before flag initialization"); 38.57 + 38.58 + // The survivor ratio's are calculated "raw", unlike the 38.59 + // default gc, which adds 2 to the ratio value. We need to 38.60 + // make sure the values are valid before using them. 38.61 + if (MinSurvivorRatio < 3) { 38.62 + FLAG_SET_ERGO(uintx, MinSurvivorRatio, 3); 38.63 + } 38.64 + 38.65 + if (InitialSurvivorRatio < 3) { 38.66 + FLAG_SET_ERGO(uintx, InitialSurvivorRatio, 3); 38.67 + } 38.68 +} 38.69 + 38.70 +void GenerationSizer::initialize_size_info() { 38.71 + trace_gen_sizes("ps heap raw"); 38.72 + const size_t page_sz = os::page_size_for_region(_min_heap_byte_size, 38.73 + _max_heap_byte_size, 38.74 + 8); 38.75 + 38.76 + // Can a page size be something else than a power of two? 38.77 + assert(is_power_of_2((intptr_t)page_sz), "must be a power of 2"); 38.78 + size_t new_alignment = round_to(page_sz, _gen_alignment); 38.79 + if (new_alignment != _gen_alignment) { 38.80 + _gen_alignment = new_alignment; 38.81 + _space_alignment = new_alignment; 38.82 + // Redo everything from the start 38.83 + initialize_flags(); 38.84 + } 38.85 + TwoGenerationCollectorPolicy::initialize_size_info(); 38.86 + 38.87 + trace_gen_sizes("ps heap rnd"); 38.88 +}
39.1 --- a/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp Wed Nov 20 11:08:09 2013 -0800 39.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp Thu Nov 21 12:30:35 2013 -0800 39.3 @@ -31,41 +31,17 @@ 39.4 // TwoGenerationCollectorPolicy. Lets reuse it! 39.5 39.6 class GenerationSizer : public TwoGenerationCollectorPolicy { 39.7 - public: 39.8 - GenerationSizer() { 39.9 - // Partial init only! 39.10 - initialize_flags(); 39.11 - initialize_size_info(); 39.12 - } 39.13 + private: 39.14 39.15 - void initialize_flags() { 39.16 - // Do basic sizing work 39.17 - TwoGenerationCollectorPolicy::initialize_flags(); 39.18 + void trace_gen_sizes(const char* const str); 39.19 39.20 - assert(UseSerialGC || 39.21 - !FLAG_IS_DEFAULT(ParallelGCThreads) || 39.22 - (ParallelGCThreads > 0), 39.23 - "ParallelGCThreads should be set before flag initialization"); 39.24 + // The alignment used for boundary between young gen and old gen 39.25 + static size_t default_gen_alignment() { return 64 * K * HeapWordSize; } 39.26 39.27 - // The survivor ratio's are calculated "raw", unlike the 39.28 - // default gc, which adds 2 to the ratio value. We need to 39.29 - // make sure the values are valid before using them. 39.30 - if (MinSurvivorRatio < 3) { 39.31 - MinSurvivorRatio = 3; 39.32 - } 39.33 + protected: 39.34 39.35 - if (InitialSurvivorRatio < 3) { 39.36 - InitialSurvivorRatio = 3; 39.37 - } 39.38 - } 39.39 - 39.40 - size_t min_young_gen_size() { return _min_gen0_size; } 39.41 - size_t young_gen_size() { return _initial_gen0_size; } 39.42 - size_t max_young_gen_size() { return _max_gen0_size; } 39.43 - 39.44 - size_t min_old_gen_size() { return _min_gen1_size; } 39.45 - size_t old_gen_size() { return _initial_gen1_size; } 39.46 - size_t max_old_gen_size() { return _max_gen1_size; } 39.47 + void initialize_alignments(); 39.48 + void initialize_flags(); 39.49 + void initialize_size_info(); 39.50 }; 39.51 - 39.52 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GENERATIONSIZER_HPP
40.1 --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Wed Nov 20 11:08:09 2013 -0800 40.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Thu Nov 21 12:30:35 2013 -0800 40.3 @@ -52,76 +52,20 @@ 40.4 ParallelScavengeHeap* ParallelScavengeHeap::_psh = NULL; 40.5 GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL; 40.6 40.7 -static void trace_gen_sizes(const char* const str, 40.8 - size_t og_min, size_t og_max, 40.9 - size_t yg_min, size_t yg_max) 40.10 -{ 40.11 - if (TracePageSizes) { 40.12 - tty->print_cr("%s: " SIZE_FORMAT "," SIZE_FORMAT " " 40.13 - SIZE_FORMAT "," SIZE_FORMAT " " 40.14 - SIZE_FORMAT, 40.15 - str, 40.16 - og_min / K, og_max / K, 40.17 - yg_min / K, yg_max / K, 40.18 - (og_max + yg_max) / K); 40.19 - } 40.20 -} 40.21 - 40.22 jint ParallelScavengeHeap::initialize() { 40.23 CollectedHeap::pre_initialize(); 40.24 40.25 - // Cannot be initialized until after the flags are parsed 40.26 - // GenerationSizer flag_parser; 40.27 + // Initialize collector policy 40.28 _collector_policy = new GenerationSizer(); 40.29 + _collector_policy->initialize_all(); 40.30 40.31 - size_t yg_min_size = _collector_policy->min_young_gen_size(); 40.32 - size_t yg_max_size = _collector_policy->max_young_gen_size(); 40.33 - size_t og_min_size = _collector_policy->min_old_gen_size(); 40.34 - size_t og_max_size = _collector_policy->max_old_gen_size(); 40.35 + const size_t heap_size = _collector_policy->max_heap_byte_size(); 40.36 40.37 - trace_gen_sizes("ps heap raw", 40.38 - og_min_size, og_max_size, 40.39 - yg_min_size, yg_max_size); 40.40 - 40.41 - const size_t og_page_sz = os::page_size_for_region(yg_min_size + og_min_size, 40.42 - yg_max_size + og_max_size, 40.43 - 8); 40.44 - 40.45 - const size_t og_align = set_alignment(_old_gen_alignment, og_page_sz); 40.46 - const size_t yg_align = set_alignment(_young_gen_alignment, og_page_sz); 40.47 - 40.48 - // Update sizes to reflect the selected page size(s). 40.49 - // 40.50 - // NEEDS_CLEANUP. The default TwoGenerationCollectorPolicy uses NewRatio; it 40.51 - // should check UseAdaptiveSizePolicy. Changes from generationSizer could 40.52 - // move to the common code. 40.53 - yg_min_size = align_size_up(yg_min_size, yg_align); 40.54 - yg_max_size = align_size_up(yg_max_size, yg_align); 40.55 - size_t yg_cur_size = 40.56 - align_size_up(_collector_policy->young_gen_size(), yg_align); 40.57 - yg_cur_size = MAX2(yg_cur_size, yg_min_size); 40.58 - 40.59 - og_min_size = align_size_up(og_min_size, og_align); 40.60 - // Align old gen size down to preserve specified heap size. 40.61 - assert(og_align == yg_align, "sanity"); 40.62 - og_max_size = align_size_down(og_max_size, og_align); 40.63 - og_max_size = MAX2(og_max_size, og_min_size); 40.64 - size_t og_cur_size = 40.65 - align_size_down(_collector_policy->old_gen_size(), og_align); 40.66 - og_cur_size = MAX2(og_cur_size, og_min_size); 40.67 - 40.68 - trace_gen_sizes("ps heap rnd", 40.69 - og_min_size, og_max_size, 40.70 - yg_min_size, yg_max_size); 40.71 - 40.72 - const size_t heap_size = og_max_size + yg_max_size; 40.73 - 40.74 - ReservedSpace heap_rs = Universe::reserve_heap(heap_size, og_align); 40.75 - 40.76 + ReservedSpace heap_rs = Universe::reserve_heap(heap_size, _collector_policy->heap_alignment()); 40.77 MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap); 40.78 40.79 - os::trace_page_sizes("ps main", og_min_size + yg_min_size, 40.80 - og_max_size + yg_max_size, og_page_sz, 40.81 + os::trace_page_sizes("ps main", _collector_policy->min_heap_byte_size(), 40.82 + heap_size, generation_alignment(), 40.83 heap_rs.base(), 40.84 heap_rs.size()); 40.85 if (!heap_rs.is_reserved()) { 40.86 @@ -142,12 +86,6 @@ 40.87 return JNI_ENOMEM; 40.88 } 40.89 40.90 - // Initial young gen size is 4 Mb 40.91 - // 40.92 - // XXX - what about flag_parser.young_gen_size()? 40.93 - const size_t init_young_size = align_size_up(4 * M, yg_align); 40.94 - yg_cur_size = MAX2(MIN2(init_young_size, yg_max_size), yg_cur_size); 40.95 - 40.96 // Make up the generations 40.97 // Calculate the maximum size that a generation can grow. This 40.98 // includes growth into the other generation. Note that the 40.99 @@ -157,14 +95,7 @@ 40.100 double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0; 40.101 double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0; 40.102 40.103 - _gens = new AdjoiningGenerations(heap_rs, 40.104 - og_cur_size, 40.105 - og_min_size, 40.106 - og_max_size, 40.107 - yg_cur_size, 40.108 - yg_min_size, 40.109 - yg_max_size, 40.110 - yg_align); 40.111 + _gens = new AdjoiningGenerations(heap_rs, _collector_policy, generation_alignment()); 40.112 40.113 _old_gen = _gens->old_gen(); 40.114 _young_gen = _gens->young_gen(); 40.115 @@ -176,7 +107,7 @@ 40.116 new PSAdaptiveSizePolicy(eden_capacity, 40.117 initial_promo_size, 40.118 young_gen()->to_space()->capacity_in_bytes(), 40.119 - intra_heap_alignment(), 40.120 + _collector_policy->gen_alignment(), 40.121 max_gc_pause_sec, 40.122 max_gc_minor_pause_sec, 40.123 GCTimeRatio
41.1 --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp Wed Nov 20 11:08:09 2013 -0800 41.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp Thu Nov 21 12:30:35 2013 -0800 41.3 @@ -25,6 +25,7 @@ 41.4 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP 41.5 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP 41.6 41.7 +#include "gc_implementation/parallelScavenge/generationSizer.hpp" 41.8 #include "gc_implementation/parallelScavenge/objectStartArray.hpp" 41.9 #include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp" 41.10 #include "gc_implementation/parallelScavenge/psOldGen.hpp" 41.11 @@ -32,14 +33,12 @@ 41.12 #include "gc_implementation/shared/gcPolicyCounters.hpp" 41.13 #include "gc_implementation/shared/gcWhen.hpp" 41.14 #include "gc_interface/collectedHeap.inline.hpp" 41.15 +#include "memory/collectorPolicy.hpp" 41.16 #include "utilities/ostream.hpp" 41.17 41.18 class AdjoiningGenerations; 41.19 -class CollectorPolicy; 41.20 class GCHeapSummary; 41.21 class GCTaskManager; 41.22 -class GenerationSizer; 41.23 -class CollectorPolicy; 41.24 class PSAdaptiveSizePolicy; 41.25 class PSHeapSummary; 41.26 41.27 @@ -50,24 +49,20 @@ 41.28 static PSOldGen* _old_gen; 41.29 41.30 // Sizing policy for entire heap 41.31 - static PSAdaptiveSizePolicy* _size_policy; 41.32 - static PSGCAdaptivePolicyCounters* _gc_policy_counters; 41.33 + static PSAdaptiveSizePolicy* _size_policy; 41.34 + static PSGCAdaptivePolicyCounters* _gc_policy_counters; 41.35 41.36 static ParallelScavengeHeap* _psh; 41.37 41.38 - size_t _young_gen_alignment; 41.39 - size_t _old_gen_alignment; 41.40 - 41.41 GenerationSizer* _collector_policy; 41.42 41.43 - inline size_t set_alignment(size_t& var, size_t val); 41.44 - 41.45 // Collection of generations that are adjacent in the 41.46 // space reserved for the heap. 41.47 AdjoiningGenerations* _gens; 41.48 unsigned int _death_march_count; 41.49 41.50 - static GCTaskManager* _gc_task_manager; // The task manager. 41.51 + // The task manager 41.52 + static GCTaskManager* _gc_task_manager; 41.53 41.54 void trace_heap(GCWhen::Type when, GCTracer* tracer); 41.55 41.56 @@ -80,16 +75,7 @@ 41.57 HeapWord* mem_allocate_old_gen(size_t size); 41.58 41.59 public: 41.60 - ParallelScavengeHeap() : CollectedHeap() { 41.61 - _death_march_count = 0; 41.62 - set_alignment(_young_gen_alignment, intra_heap_alignment()); 41.63 - set_alignment(_old_gen_alignment, intra_heap_alignment()); 41.64 - } 41.65 - 41.66 - // Return the (conservative) maximum heap alignment 41.67 - static size_t conservative_max_heap_alignment() { 41.68 - return intra_heap_alignment(); 41.69 - } 41.70 + ParallelScavengeHeap() : CollectedHeap(), _death_march_count(0) { } 41.71 41.72 // For use by VM operations 41.73 enum CollectionType { 41.74 @@ -103,8 +89,8 @@ 41.75 41.76 virtual CollectorPolicy* collector_policy() const { return (CollectorPolicy*) _collector_policy; } 41.77 41.78 - static PSYoungGen* young_gen() { return _young_gen; } 41.79 - static PSOldGen* old_gen() { return _old_gen; } 41.80 + static PSYoungGen* young_gen() { return _young_gen; } 41.81 + static PSOldGen* old_gen() { return _old_gen; } 41.82 41.83 virtual PSAdaptiveSizePolicy* size_policy() { return _size_policy; } 41.84 41.85 @@ -121,13 +107,15 @@ 41.86 41.87 void post_initialize(); 41.88 void update_counters(); 41.89 - // The alignment used for the various generations. 41.90 - size_t young_gen_alignment() const { return _young_gen_alignment; } 41.91 - size_t old_gen_alignment() const { return _old_gen_alignment; } 41.92 41.93 - // The alignment used for eden and survivors within the young gen 41.94 - // and for boundary between young gen and old gen. 41.95 - static size_t intra_heap_alignment() { return 64 * K * HeapWordSize; } 41.96 + // The alignment used for the various areas 41.97 + size_t space_alignment() { return _collector_policy->space_alignment(); } 41.98 + size_t generation_alignment() { return _collector_policy->gen_alignment(); } 41.99 + 41.100 + // Return the (conservative) maximum heap alignment 41.101 + static size_t conservative_max_heap_alignment() { 41.102 + return CollectorPolicy::compute_heap_alignment(); 41.103 + } 41.104 41.105 size_t capacity() const; 41.106 size_t used() const; 41.107 @@ -157,16 +145,15 @@ 41.108 virtual bool is_in_partial_collection(const void *p); 41.109 #endif 41.110 41.111 - bool is_in_young(oop p); // reserved part 41.112 - bool is_in_old(oop p); // reserved part 41.113 + bool is_in_young(oop p); // reserved part 41.114 + bool is_in_old(oop p); // reserved part 41.115 41.116 // Memory allocation. "gc_time_limit_was_exceeded" will 41.117 // be set to true if the adaptive size policy determine that 41.118 // an excessive amount of time is being spent doing collections 41.119 // and caused a NULL to be returned. If a NULL is not returned, 41.120 // "gc_time_limit_was_exceeded" has an undefined meaning. 41.121 - HeapWord* mem_allocate(size_t size, 41.122 - bool* gc_overhead_limit_was_exceeded); 41.123 + HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded); 41.124 41.125 // Allocation attempt(s) during a safepoint. It should never be called 41.126 // to allocate a new TLAB as this allocation might be satisfied out 41.127 @@ -257,17 +244,10 @@ 41.128 41.129 // Call these in sequential code around the processing of strong roots. 41.130 class ParStrongRootsScope : public MarkingCodeBlobClosure::MarkScope { 41.131 - public: 41.132 + public: 41.133 ParStrongRootsScope(); 41.134 ~ParStrongRootsScope(); 41.135 }; 41.136 }; 41.137 41.138 -inline size_t ParallelScavengeHeap::set_alignment(size_t& var, size_t val) 41.139 -{ 41.140 - assert(is_power_of_2((intptr_t)val), "must be a power of 2"); 41.141 - var = round_to(val, intra_heap_alignment()); 41.142 - return var; 41.143 -} 41.144 - 41.145 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP
42.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Wed Nov 20 11:08:09 2013 -0800 42.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Thu Nov 21 12:30:35 2013 -0800 42.3 @@ -37,7 +37,7 @@ 42.4 PSAdaptiveSizePolicy::PSAdaptiveSizePolicy(size_t init_eden_size, 42.5 size_t init_promo_size, 42.6 size_t init_survivor_size, 42.7 - size_t intra_generation_alignment, 42.8 + size_t space_alignment, 42.9 double gc_pause_goal_sec, 42.10 double gc_minor_pause_goal_sec, 42.11 uint gc_cost_ratio) : 42.12 @@ -46,9 +46,8 @@ 42.13 init_survivor_size, 42.14 gc_pause_goal_sec, 42.15 gc_cost_ratio), 42.16 - _collection_cost_margin_fraction(AdaptiveSizePolicyCollectionCostMargin/ 42.17 - 100.0), 42.18 - _intra_generation_alignment(intra_generation_alignment), 42.19 + _collection_cost_margin_fraction(AdaptiveSizePolicyCollectionCostMargin / 100.0), 42.20 + _space_alignment(space_alignment), 42.21 _live_at_last_full_gc(init_promo_size), 42.22 _gc_minor_pause_goal_sec(gc_minor_pause_goal_sec), 42.23 _latest_major_mutator_interval_seconds(0), 42.24 @@ -353,11 +352,10 @@ 42.25 } 42.26 42.27 // Align everything and make a final limit check 42.28 - const size_t alignment = _intra_generation_alignment; 42.29 - desired_eden_size = align_size_up(desired_eden_size, alignment); 42.30 - desired_eden_size = MAX2(desired_eden_size, alignment); 42.31 + desired_eden_size = align_size_up(desired_eden_size, _space_alignment); 42.32 + desired_eden_size = MAX2(desired_eden_size, _space_alignment); 42.33 42.34 - eden_limit = align_size_down(eden_limit, alignment); 42.35 + eden_limit = align_size_down(eden_limit, _space_alignment); 42.36 42.37 // And one last limit check, now that we've aligned things. 42.38 if (desired_eden_size > eden_limit) { 42.39 @@ -561,11 +559,10 @@ 42.40 } 42.41 42.42 // Align everything and make a final limit check 42.43 - const size_t alignment = _intra_generation_alignment; 42.44 - desired_promo_size = align_size_up(desired_promo_size, alignment); 42.45 - desired_promo_size = MAX2(desired_promo_size, alignment); 42.46 + desired_promo_size = align_size_up(desired_promo_size, _space_alignment); 42.47 + desired_promo_size = MAX2(desired_promo_size, _space_alignment); 42.48 42.49 - promo_limit = align_size_down(promo_limit, alignment); 42.50 + promo_limit = align_size_down(promo_limit, _space_alignment); 42.51 42.52 // And one last limit check, now that we've aligned things. 42.53 desired_promo_size = MIN2(desired_promo_size, promo_limit); 42.54 @@ -650,7 +647,7 @@ 42.55 } 42.56 // If the desired eden size is as small as it will get, 42.57 // try to adjust the old gen size. 42.58 - if (*desired_eden_size_ptr <= _intra_generation_alignment) { 42.59 + if (*desired_eden_size_ptr <= _space_alignment) { 42.60 // Vary the old gen size to reduce the young gen pause. This 42.61 // may not be a good idea. This is just a test. 42.62 if (minor_pause_old_estimator()->decrement_will_decrease()) { 42.63 @@ -755,7 +752,7 @@ 42.64 // If the promo size is at the minimum (i.e., the old gen 42.65 // size will not actually decrease), consider changing the 42.66 // young gen size. 42.67 - if (*desired_promo_size_ptr < _intra_generation_alignment) { 42.68 + if (*desired_promo_size_ptr < _space_alignment) { 42.69 // If increasing the young generation will decrease the old gen 42.70 // pause, do it. 42.71 // During startup there is noise in the statistics for deciding 42.72 @@ -1066,24 +1063,24 @@ 42.73 42.74 size_t PSAdaptiveSizePolicy::eden_increment_aligned_up(size_t cur_eden) { 42.75 size_t result = eden_increment(cur_eden, YoungGenerationSizeIncrement); 42.76 - return align_size_up(result, _intra_generation_alignment); 42.77 + return align_size_up(result, _space_alignment); 42.78 } 42.79 42.80 size_t PSAdaptiveSizePolicy::eden_increment_aligned_down(size_t cur_eden) { 42.81 size_t result = eden_increment(cur_eden); 42.82 - return align_size_down(result, _intra_generation_alignment); 42.83 + return align_size_down(result, _space_alignment); 42.84 } 42.85 42.86 size_t PSAdaptiveSizePolicy::eden_increment_with_supplement_aligned_up( 42.87 size_t cur_eden) { 42.88 size_t result = eden_increment(cur_eden, 42.89 YoungGenerationSizeIncrement + _young_gen_size_increment_supplement); 42.90 - return align_size_up(result, _intra_generation_alignment); 42.91 + return align_size_up(result, _space_alignment); 42.92 } 42.93 42.94 size_t PSAdaptiveSizePolicy::eden_decrement_aligned_down(size_t cur_eden) { 42.95 size_t eden_heap_delta = eden_decrement(cur_eden); 42.96 - return align_size_down(eden_heap_delta, _intra_generation_alignment); 42.97 + return align_size_down(eden_heap_delta, _space_alignment); 42.98 } 42.99 42.100 size_t PSAdaptiveSizePolicy::eden_decrement(size_t cur_eden) { 42.101 @@ -1105,24 +1102,24 @@ 42.102 42.103 size_t PSAdaptiveSizePolicy::promo_increment_aligned_up(size_t cur_promo) { 42.104 size_t result = promo_increment(cur_promo, TenuredGenerationSizeIncrement); 42.105 - return align_size_up(result, _intra_generation_alignment); 42.106 + return align_size_up(result, _space_alignment); 42.107 } 42.108 42.109 size_t PSAdaptiveSizePolicy::promo_increment_aligned_down(size_t cur_promo) { 42.110 size_t result = promo_increment(cur_promo, TenuredGenerationSizeIncrement); 42.111 - return align_size_down(result, _intra_generation_alignment); 42.112 + return align_size_down(result, _space_alignment); 42.113 } 42.114 42.115 size_t PSAdaptiveSizePolicy::promo_increment_with_supplement_aligned_up( 42.116 size_t cur_promo) { 42.117 size_t result = promo_increment(cur_promo, 42.118 TenuredGenerationSizeIncrement + _old_gen_size_increment_supplement); 42.119 - return align_size_up(result, _intra_generation_alignment); 42.120 + return align_size_up(result, _space_alignment); 42.121 } 42.122 42.123 size_t PSAdaptiveSizePolicy::promo_decrement_aligned_down(size_t cur_promo) { 42.124 size_t promo_heap_delta = promo_decrement(cur_promo); 42.125 - return align_size_down(promo_heap_delta, _intra_generation_alignment); 42.126 + return align_size_down(promo_heap_delta, _space_alignment); 42.127 } 42.128 42.129 size_t PSAdaptiveSizePolicy::promo_decrement(size_t cur_promo) { 42.130 @@ -1135,9 +1132,9 @@ 42.131 bool is_survivor_overflow, 42.132 uint tenuring_threshold, 42.133 size_t survivor_limit) { 42.134 - assert(survivor_limit >= _intra_generation_alignment, 42.135 + assert(survivor_limit >= _space_alignment, 42.136 "survivor_limit too small"); 42.137 - assert((size_t)align_size_down(survivor_limit, _intra_generation_alignment) 42.138 + assert((size_t)align_size_down(survivor_limit, _space_alignment) 42.139 == survivor_limit, "survivor_limit not aligned"); 42.140 42.141 // This method is called even if the tenuring threshold and survivor 42.142 @@ -1201,8 +1198,8 @@ 42.143 // We're trying to pad the survivor size as little as possible without 42.144 // overflowing the survivor spaces. 42.145 size_t target_size = align_size_up((size_t)_avg_survived->padded_average(), 42.146 - _intra_generation_alignment); 42.147 - target_size = MAX2(target_size, _intra_generation_alignment); 42.148 + _space_alignment); 42.149 + target_size = MAX2(target_size, _space_alignment); 42.150 42.151 if (target_size > survivor_limit) { 42.152 // Target size is bigger than we can handle. Let's also reduce
43.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Wed Nov 20 11:08:09 2013 -0800 43.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Thu Nov 21 12:30:35 2013 -0800 43.3 @@ -91,7 +91,7 @@ 43.4 // for making ergonomic decisions. 43.5 double _latest_major_mutator_interval_seconds; 43.6 43.7 - const size_t _intra_generation_alignment; // alignment for eden, survivors 43.8 + const size_t _space_alignment; // alignment for eden, survivors 43.9 43.10 const double _gc_minor_pause_goal_sec; // goal for maximum minor gc pause 43.11 43.12 @@ -229,7 +229,7 @@ 43.13 PSAdaptiveSizePolicy(size_t init_eden_size, 43.14 size_t init_promo_size, 43.15 size_t init_survivor_size, 43.16 - size_t intra_generation_alignment, 43.17 + size_t space_alignment, 43.18 double gc_pause_goal_sec, 43.19 double gc_minor_pause_goal_sec, 43.20 uint gc_time_ratio); 43.21 @@ -378,7 +378,7 @@ 43.22 // remain almost full anyway (top() will be near end(), but there will be a 43.23 // large filler object at the bottom). 43.24 const size_t sz = gen_size / MinSurvivorRatio; 43.25 - const size_t alignment = _intra_generation_alignment; 43.26 + const size_t alignment = _space_alignment; 43.27 return sz > alignment ? align_size_down(sz, alignment) : alignment; 43.28 } 43.29
44.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp Wed Nov 20 11:08:09 2013 -0800 44.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp Thu Nov 21 12:30:35 2013 -0800 44.3 @@ -103,7 +103,7 @@ 44.4 44.5 // Compute maximum space sizes for performance counters 44.6 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 44.7 - size_t alignment = heap->intra_heap_alignment(); 44.8 + size_t alignment = heap->space_alignment(); 44.9 size_t size = virtual_space()->reserved_size(); 44.10 44.11 size_t max_survivor_size; 44.12 @@ -156,8 +156,9 @@ 44.13 assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); 44.14 44.15 // Compute sizes 44.16 - size_t alignment = heap->intra_heap_alignment(); 44.17 + size_t alignment = heap->space_alignment(); 44.18 size_t size = virtual_space()->committed_size(); 44.19 + assert(size >= 3 * alignment, "Young space is not large enough for eden + 2 survivors"); 44.20 44.21 size_t survivor_size = size / InitialSurvivorRatio; 44.22 survivor_size = align_size_down(survivor_size, alignment); 44.23 @@ -207,7 +208,7 @@ 44.24 #ifndef PRODUCT 44.25 void PSYoungGen::space_invariants() { 44.26 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 44.27 - const size_t alignment = heap->intra_heap_alignment(); 44.28 + const size_t alignment = heap->space_alignment(); 44.29 44.30 // Currently, our eden size cannot shrink to zero 44.31 guarantee(eden_space()->capacity_in_bytes() >= alignment, "eden too small"); 44.32 @@ -491,7 +492,7 @@ 44.33 char* to_end = (char*)to_space()->end(); 44.34 44.35 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 44.36 - const size_t alignment = heap->intra_heap_alignment(); 44.37 + const size_t alignment = heap->space_alignment(); 44.38 const bool maintain_minimum = 44.39 (requested_eden_size + 2 * requested_survivor_size) <= min_gen_size(); 44.40 44.41 @@ -840,8 +841,8 @@ 44.42 size_t PSYoungGen::available_to_live() { 44.43 size_t delta_in_survivor = 0; 44.44 ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); 44.45 - const size_t space_alignment = heap->intra_heap_alignment(); 44.46 - const size_t gen_alignment = heap->young_gen_alignment(); 44.47 + const size_t space_alignment = heap->space_alignment(); 44.48 + const size_t gen_alignment = heap->generation_alignment(); 44.49 44.50 MutableSpace* space_shrinking = NULL; 44.51 if (from_space()->end() > to_space()->end()) {
45.1 --- a/src/share/vm/gc_interface/collectedHeap.cpp Wed Nov 20 11:08:09 2013 -0800 45.2 +++ b/src/share/vm/gc_interface/collectedHeap.cpp Thu Nov 21 12:30:35 2013 -0800 45.3 @@ -469,6 +469,10 @@ 45.4 fill_with_object_impl(start, words, zap); 45.5 } 45.6 45.7 +void CollectedHeap::post_initialize() { 45.8 + collector_policy()->post_heap_initialize(); 45.9 +} 45.10 + 45.11 HeapWord* CollectedHeap::allocate_new_tlab(size_t size) { 45.12 guarantee(false, "thread-local allocation buffers not supported"); 45.13 return NULL;
46.1 --- a/src/share/vm/interpreter/linkResolver.cpp Wed Nov 20 11:08:09 2013 -0800 46.2 +++ b/src/share/vm/interpreter/linkResolver.cpp Thu Nov 21 12:30:35 2013 -0800 46.3 @@ -152,11 +152,13 @@ 46.4 // Could be an Object method inherited into an interface, but still a vtable call. 46.5 kind = CallInfo::vtable_call; 46.6 } else if (!resolved_klass->is_interface()) { 46.7 - // A miranda method. Compute the vtable index. 46.8 + // A default or miranda method. Compute the vtable index. 46.9 ResourceMark rm; 46.10 klassVtable* vt = InstanceKlass::cast(resolved_klass)->vtable(); 46.11 - index = vt->index_of_miranda(resolved_method->name(), 46.12 - resolved_method->signature()); 46.13 + index = LinkResolver::vtable_index_of_interface_method(resolved_klass, 46.14 + resolved_method); 46.15 + assert(index >= 0 , "we should have valid vtable index at this point"); 46.16 + 46.17 kind = CallInfo::vtable_call; 46.18 } else if (resolved_method->has_vtable_index()) { 46.19 // Can occur if an interface redeclares a method of Object. 46.20 @@ -279,7 +281,7 @@ 46.21 } 46.22 46.23 int LinkResolver::vtable_index_of_interface_method(KlassHandle klass, 46.24 - methodHandle resolved_method, TRAPS) { 46.25 + methodHandle resolved_method) { 46.26 46.27 int vtable_index = Method::invalid_vtable_index; 46.28 Symbol* name = resolved_method->name(); 46.29 @@ -295,7 +297,7 @@ 46.30 } 46.31 if (vtable_index == Method::invalid_vtable_index) { 46.32 // get vtable_index for miranda methods 46.33 - ResourceMark rm(THREAD); 46.34 + ResourceMark rm; 46.35 klassVtable *vt = InstanceKlass::cast(klass())->vtable(); 46.36 vtable_index = vt->index_of_miranda(name, signature); 46.37 } 46.38 @@ -691,7 +693,7 @@ 46.39 ); 46.40 resolved_method->access_flags().print_on(tty); 46.41 if (resolved_method->is_default_method()) { 46.42 - tty->print("default"); 46.43 + tty->print("default "); 46.44 } 46.45 if (resolved_method->is_overpass()) { 46.46 tty->print("overpass"); 46.47 @@ -937,7 +939,7 @@ 46.48 ); 46.49 resolved_method->access_flags().print_on(tty); 46.50 if (resolved_method->is_default_method()) { 46.51 - tty->print("default"); 46.52 + tty->print("default "); 46.53 } 46.54 if (resolved_method->is_overpass()) { 46.55 tty->print("overpass"); 46.56 @@ -1017,7 +1019,7 @@ 46.57 ); 46.58 sel_method->access_flags().print_on(tty); 46.59 if (sel_method->is_default_method()) { 46.60 - tty->print("default"); 46.61 + tty->print("default "); 46.62 } 46.63 if (sel_method->is_overpass()) { 46.64 tty->print("overpass"); 46.65 @@ -1081,7 +1083,7 @@ 46.66 ); 46.67 resolved_method->access_flags().print_on(tty); 46.68 if (resolved_method->is_default_method()) { 46.69 - tty->print("default"); 46.70 + tty->print("default "); 46.71 } 46.72 if (resolved_method->is_overpass()) { 46.73 tty->print("overpass"); 46.74 @@ -1118,7 +1120,7 @@ 46.75 // do lookup based on receiver klass using the vtable index 46.76 if (resolved_method->method_holder()->is_interface()) { // miranda method 46.77 vtable_index = vtable_index_of_interface_method(resolved_klass, 46.78 - resolved_method, CHECK); 46.79 + resolved_method); 46.80 assert(vtable_index >= 0 , "we should have valid vtable index at this point"); 46.81 46.82 InstanceKlass* inst = InstanceKlass::cast(recv_klass()); 46.83 @@ -1175,7 +1177,7 @@ 46.84 ); 46.85 selected_method->access_flags().print_on(tty); 46.86 if (selected_method->is_default_method()) { 46.87 - tty->print("default"); 46.88 + tty->print("default "); 46.89 } 46.90 if (selected_method->is_overpass()) { 46.91 tty->print("overpass"); 46.92 @@ -1268,14 +1270,6 @@ 46.93 sel_method->name(), 46.94 sel_method->signature())); 46.95 } 46.96 - // setup result 46.97 - if (!resolved_method->has_itable_index()) { 46.98 - int vtable_index = resolved_method->vtable_index(); 46.99 - assert(vtable_index == sel_method->vtable_index(), "sanity check"); 46.100 - result.set_virtual(resolved_klass, recv_klass, resolved_method, sel_method, vtable_index, CHECK); 46.101 - return; 46.102 - } 46.103 - int itable_index = resolved_method()->itable_index(); 46.104 46.105 if (TraceItables && Verbose) { 46.106 ResourceMark rm(THREAD); 46.107 @@ -1289,14 +1283,22 @@ 46.108 ); 46.109 sel_method->access_flags().print_on(tty); 46.110 if (sel_method->is_default_method()) { 46.111 - tty->print("default"); 46.112 + tty->print("default "); 46.113 } 46.114 if (sel_method->is_overpass()) { 46.115 tty->print("overpass"); 46.116 } 46.117 tty->cr(); 46.118 } 46.119 - result.set_interface(resolved_klass, recv_klass, resolved_method, sel_method, itable_index, CHECK); 46.120 + // setup result 46.121 + if (!resolved_method->has_itable_index()) { 46.122 + int vtable_index = resolved_method->vtable_index(); 46.123 + assert(vtable_index == sel_method->vtable_index(), "sanity check"); 46.124 + result.set_virtual(resolved_klass, recv_klass, resolved_method, sel_method, vtable_index, CHECK); 46.125 + } else { 46.126 + int itable_index = resolved_method()->itable_index(); 46.127 + result.set_interface(resolved_klass, recv_klass, resolved_method, sel_method, itable_index, CHECK); 46.128 + } 46.129 } 46.130 46.131
47.1 --- a/src/share/vm/interpreter/linkResolver.hpp Wed Nov 20 11:08:09 2013 -0800 47.2 +++ b/src/share/vm/interpreter/linkResolver.hpp Thu Nov 21 12:30:35 2013 -0800 47.3 @@ -130,7 +130,6 @@ 47.4 static void lookup_polymorphic_method (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, 47.5 KlassHandle current_klass, Handle *appendix_result_or_null, Handle *method_type_result, TRAPS); 47.6 47.7 - static int vtable_index_of_interface_method(KlassHandle klass, methodHandle resolved_method, TRAPS); 47.8 static void resolve_klass (KlassHandle& result, constantPoolHandle pool, int index, TRAPS); 47.9 47.10 static void resolve_pool (KlassHandle& resolved_klass, Symbol*& method_name, Symbol*& method_signature, KlassHandle& current_klass, constantPoolHandle pool, int index, TRAPS); 47.11 @@ -186,6 +185,7 @@ 47.12 static methodHandle resolve_interface_call_or_null(KlassHandle receiver_klass, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass); 47.13 static methodHandle resolve_static_call_or_null (KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass); 47.14 static methodHandle resolve_special_call_or_null (KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass); 47.15 + static int vtable_index_of_interface_method(KlassHandle klass, methodHandle resolved_method); 47.16 47.17 // same as above for compile-time resolution; returns vtable_index if current_klass if linked 47.18 static int resolve_virtual_vtable_index (KlassHandle receiver_klass, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass);
48.1 --- a/src/share/vm/interpreter/rewriter.cpp Wed Nov 20 11:08:09 2013 -0800 48.2 +++ b/src/share/vm/interpreter/rewriter.cpp Thu Nov 21 12:30:35 2013 -0800 48.3 @@ -70,21 +70,21 @@ 48.4 } 48.5 48.6 // Unrewrite the bytecodes if an error occurs. 48.7 -void Rewriter::restore_bytecodes() { 48.8 +void Rewriter::restore_bytecodes(TRAPS) { 48.9 int len = _methods->length(); 48.10 48.11 for (int i = len-1; i >= 0; i--) { 48.12 Method* method = _methods->at(i); 48.13 - scan_method(method, true); 48.14 + scan_method(method, true, CHECK); 48.15 } 48.16 } 48.17 48.18 // Creates a constant pool cache given a CPC map 48.19 void Rewriter::make_constant_pool_cache(TRAPS) { 48.20 - const int length = _cp_cache_map.length(); 48.21 ClassLoaderData* loader_data = _pool->pool_holder()->class_loader_data(); 48.22 ConstantPoolCache* cache = 48.23 - ConstantPoolCache::allocate(loader_data, length, _cp_cache_map, 48.24 + ConstantPoolCache::allocate(loader_data, _cp_cache_map, 48.25 + _invokedynamic_cp_cache_map, 48.26 _invokedynamic_references_map, CHECK); 48.27 48.28 // initialize object cache in constant pool 48.29 @@ -154,6 +154,31 @@ 48.30 } 48.31 } 48.32 48.33 +// If the constant pool entry for invokespecial is InterfaceMethodref, 48.34 +// we need to add a separate cpCache entry for its resolution, because it is 48.35 +// different than the resolution for invokeinterface with InterfaceMethodref. 48.36 +// These cannot share cpCache entries. It's unclear if all invokespecial to 48.37 +// InterfaceMethodrefs would resolve to the same thing so a new cpCache entry 48.38 +// is created for each one. This was added with lambda. 48.39 +void Rewriter::rewrite_invokespecial(address bcp, int offset, bool reverse, TRAPS) { 48.40 + static int count = 0; 48.41 + address p = bcp + offset; 48.42 + if (!reverse) { 48.43 + int cp_index = Bytes::get_Java_u2(p); 48.44 + int cache_index = add_invokespecial_cp_cache_entry(cp_index); 48.45 + if (cache_index != (int)(jushort) cache_index) { 48.46 + THROW_MSG(vmSymbols::java_lang_InternalError(), 48.47 + "This classfile overflows invokespecial for interfaces " 48.48 + "and cannot be loaded"); 48.49 + } 48.50 + Bytes::put_native_u2(p, cache_index); 48.51 + } else { 48.52 + int cache_index = Bytes::get_native_u2(p); 48.53 + int cp_index = cp_cache_entry_pool_index(cache_index); 48.54 + Bytes::put_Java_u2(p, cp_index); 48.55 + } 48.56 +} 48.57 + 48.58 48.59 // Adjust the invocation bytecode for a signature-polymorphic method (MethodHandle.invoke, etc.) 48.60 void Rewriter::maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse) { 48.61 @@ -203,7 +228,7 @@ 48.62 if (!reverse) { 48.63 int cp_index = Bytes::get_Java_u2(p); 48.64 int cache_index = add_invokedynamic_cp_cache_entry(cp_index); 48.65 - add_invokedynamic_resolved_references_entries(cp_index, cache_index); 48.66 + int resolved_index = add_invokedynamic_resolved_references_entries(cp_index, cache_index); 48.67 // Replace the trailing four bytes with a CPC index for the dynamic 48.68 // call site. Unlike other CPC entries, there is one per bytecode, 48.69 // not just one per distinct CP entry. In other words, the 48.70 @@ -212,13 +237,20 @@ 48.71 // all these entries. That is the main reason invokedynamic 48.72 // must have a five-byte instruction format. (Of course, other JVM 48.73 // implementations can use the bytes for other purposes.) 48.74 + // Note: We use native_u4 format exclusively for 4-byte indexes. 48.75 Bytes::put_native_u4(p, ConstantPool::encode_invokedynamic_index(cache_index)); 48.76 - // Note: We use native_u4 format exclusively for 4-byte indexes. 48.77 + // add the bcp in case we need to patch this bytecode if we also find a 48.78 + // invokespecial/InterfaceMethodref in the bytecode stream 48.79 + _patch_invokedynamic_bcps->push(p); 48.80 + _patch_invokedynamic_refs->push(resolved_index); 48.81 } else { 48.82 - // callsite index 48.83 int cache_index = ConstantPool::decode_invokedynamic_index( 48.84 Bytes::get_native_u4(p)); 48.85 - int cp_index = cp_cache_entry_pool_index(cache_index); 48.86 + // We will reverse the bytecode rewriting _after_ adjusting them. 48.87 + // Adjust the cache index by offset to the invokedynamic entries in the 48.88 + // cpCache plus the delta if the invokedynamic bytecodes were adjusted. 48.89 + cache_index = cp_cache_delta() + _first_iteration_cp_cache_limit; 48.90 + int cp_index = invokedynamic_cp_cache_entry_pool_index(cache_index); 48.91 assert(_pool->tag_at(cp_index).is_invoke_dynamic(), "wrong index"); 48.92 // zero out 4 bytes 48.93 Bytes::put_Java_u4(p, 0); 48.94 @@ -226,6 +258,34 @@ 48.95 } 48.96 } 48.97 48.98 +void Rewriter::patch_invokedynamic_bytecodes() { 48.99 + // If the end of the cp_cache is the same as after initializing with the 48.100 + // cpool, nothing needs to be done. Invokedynamic bytecodes are at the 48.101 + // correct offsets. ie. no invokespecials added 48.102 + int delta = cp_cache_delta(); 48.103 + if (delta > 0) { 48.104 + int length = _patch_invokedynamic_bcps->length(); 48.105 + assert(length == _patch_invokedynamic_refs->length(), 48.106 + "lengths should match"); 48.107 + for (int i = 0; i < length; i++) { 48.108 + address p = _patch_invokedynamic_bcps->at(i); 48.109 + int cache_index = ConstantPool::decode_invokedynamic_index( 48.110 + Bytes::get_native_u4(p)); 48.111 + Bytes::put_native_u4(p, ConstantPool::encode_invokedynamic_index(cache_index + delta)); 48.112 + 48.113 + // invokedynamic resolved references map also points to cp cache and must 48.114 + // add delta to each. 48.115 + int resolved_index = _patch_invokedynamic_refs->at(i); 48.116 + for (int entry = 0; entry < ConstantPoolCacheEntry::_indy_resolved_references_entries; entry++) { 48.117 + assert(_invokedynamic_references_map[resolved_index+entry] == cache_index, 48.118 + "should be the same index"); 48.119 + _invokedynamic_references_map.at_put(resolved_index+entry, 48.120 + cache_index + delta); 48.121 + } 48.122 + } 48.123 + } 48.124 +} 48.125 + 48.126 48.127 // Rewrite some ldc bytecodes to _fast_aldc 48.128 void Rewriter::maybe_rewrite_ldc(address bcp, int offset, bool is_wide, 48.129 @@ -269,7 +329,7 @@ 48.130 48.131 48.132 // Rewrites a method given the index_map information 48.133 -void Rewriter::scan_method(Method* method, bool reverse) { 48.134 +void Rewriter::scan_method(Method* method, bool reverse, TRAPS) { 48.135 48.136 int nof_jsrs = 0; 48.137 bool has_monitor_bytecodes = false; 48.138 @@ -329,12 +389,25 @@ 48.139 #endif 48.140 break; 48.141 } 48.142 + 48.143 + case Bytecodes::_invokespecial : { 48.144 + int offset = prefix_length + 1; 48.145 + address p = bcp + offset; 48.146 + int cp_index = Bytes::get_Java_u2(p); 48.147 + // InterfaceMethodref 48.148 + if (_pool->tag_at(cp_index).is_interface_method()) { 48.149 + rewrite_invokespecial(bcp, offset, reverse, CHECK); 48.150 + } else { 48.151 + rewrite_member_reference(bcp, offset, reverse); 48.152 + } 48.153 + break; 48.154 + } 48.155 + 48.156 case Bytecodes::_getstatic : // fall through 48.157 case Bytecodes::_putstatic : // fall through 48.158 case Bytecodes::_getfield : // fall through 48.159 case Bytecodes::_putfield : // fall through 48.160 case Bytecodes::_invokevirtual : // fall through 48.161 - case Bytecodes::_invokespecial : // fall through 48.162 case Bytecodes::_invokestatic : 48.163 case Bytecodes::_invokeinterface: 48.164 case Bytecodes::_invokehandle : // if reverse=true 48.165 @@ -426,16 +499,21 @@ 48.166 48.167 for (int i = len-1; i >= 0; i--) { 48.168 Method* method = _methods->at(i); 48.169 - scan_method(method); 48.170 + scan_method(method, false, CHECK); // If you get an error here, 48.171 + // there is no reversing bytecodes 48.172 } 48.173 48.174 + // May have to fix invokedynamic bytecodes if invokestatic/InterfaceMethodref 48.175 + // entries had to be added. 48.176 + patch_invokedynamic_bytecodes(); 48.177 + 48.178 // allocate constant pool cache, now that we've seen all the bytecodes 48.179 make_constant_pool_cache(THREAD); 48.180 48.181 // Restore bytecodes to their unrewritten state if there are exceptions 48.182 // rewriting bytecodes or allocating the cpCache 48.183 if (HAS_PENDING_EXCEPTION) { 48.184 - restore_bytecodes(); 48.185 + restore_bytecodes(CATCH); 48.186 return; 48.187 } 48.188 48.189 @@ -452,7 +530,7 @@ 48.190 // relocating bytecodes. If some are relocated, that is ok because that 48.191 // doesn't affect constant pool to cpCache rewriting. 48.192 if (HAS_PENDING_EXCEPTION) { 48.193 - restore_bytecodes(); 48.194 + restore_bytecodes(CATCH); 48.195 return; 48.196 } 48.197 // Method might have gotten rewritten.
49.1 --- a/src/share/vm/interpreter/rewriter.hpp Wed Nov 20 11:08:09 2013 -0800 49.2 +++ b/src/share/vm/interpreter/rewriter.hpp Thu Nov 21 12:30:35 2013 -0800 49.3 @@ -1,5 +1,5 @@ 49.4 /* 49.5 - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. 49.6 + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. 49.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 49.8 * 49.9 * This code is free software; you can redistribute it and/or modify it 49.10 @@ -46,55 +46,102 @@ 49.11 intArray _method_handle_invokers; 49.12 int _resolved_reference_limit; 49.13 49.14 + // For mapping invokedynamic bytecodes, which are discovered during method 49.15 + // scanning. The invokedynamic entries are added at the end of the cpCache. 49.16 + // If there are any invokespecial/InterfaceMethodref special case bytecodes, 49.17 + // these entries are added before invokedynamic entries so that the 49.18 + // invokespecial bytecode 16 bit index doesn't overflow. 49.19 + intStack _invokedynamic_cp_cache_map; 49.20 + 49.21 + // For patching. 49.22 + GrowableArray<address>* _patch_invokedynamic_bcps; 49.23 + GrowableArray<int>* _patch_invokedynamic_refs; 49.24 + 49.25 void init_maps(int length) { 49.26 _cp_map.initialize(length, -1); 49.27 // Choose an initial value large enough that we don't get frequent 49.28 // calls to grow(). 49.29 - _cp_cache_map.initialize(length / 2); 49.30 + _cp_cache_map.initialize(length/2); 49.31 // Also cache resolved objects, in another different cache. 49.32 _reference_map.initialize(length, -1); 49.33 - _resolved_references_map.initialize(length / 2); 49.34 - _invokedynamic_references_map.initialize(length / 2); 49.35 + _resolved_references_map.initialize(length/2); 49.36 + _invokedynamic_references_map.initialize(length/2); 49.37 _resolved_reference_limit = -1; 49.38 - DEBUG_ONLY(_cp_cache_index_limit = -1); 49.39 + _first_iteration_cp_cache_limit = -1; 49.40 + 49.41 + // invokedynamic specific fields 49.42 + _invokedynamic_cp_cache_map.initialize(length/4); 49.43 + _patch_invokedynamic_bcps = new GrowableArray<address>(length/4); 49.44 + _patch_invokedynamic_refs = new GrowableArray<int>(length/4); 49.45 } 49.46 49.47 - int _cp_cache_index_limit; 49.48 + int _first_iteration_cp_cache_limit; 49.49 void record_map_limits() { 49.50 -#ifdef ASSERT 49.51 - // Record initial size of the two arrays generated for the CP cache: 49.52 - _cp_cache_index_limit = _cp_cache_map.length(); 49.53 -#endif //ASSERT 49.54 + // Record initial size of the two arrays generated for the CP cache 49.55 + // relative to walking the constant pool. 49.56 + _first_iteration_cp_cache_limit = _cp_cache_map.length(); 49.57 _resolved_reference_limit = _resolved_references_map.length(); 49.58 } 49.59 49.60 + int cp_cache_delta() { 49.61 + // How many cp cache entries were added since recording map limits after 49.62 + // cp cache initialization? 49.63 + assert(_first_iteration_cp_cache_limit != -1, "only valid after first iteration"); 49.64 + return _cp_cache_map.length() - _first_iteration_cp_cache_limit; 49.65 + } 49.66 + 49.67 int cp_entry_to_cp_cache(int i) { assert(has_cp_cache(i), "oob"); return _cp_map[i]; } 49.68 bool has_cp_cache(int i) { return (uint)i < (uint)_cp_map.length() && _cp_map[i] >= 0; } 49.69 49.70 + int add_map_entry(int cp_index, intArray* cp_map, intStack* cp_cache_map) { 49.71 + assert(cp_map->at(cp_index) == -1, "not twice on same cp_index"); 49.72 + int cache_index = cp_cache_map->append(cp_index); 49.73 + cp_map->at_put(cp_index, cache_index); 49.74 + return cache_index; 49.75 + } 49.76 + 49.77 int add_cp_cache_entry(int cp_index) { 49.78 assert(_pool->tag_at(cp_index).value() != JVM_CONSTANT_InvokeDynamic, "use indy version"); 49.79 - assert(_cp_map[cp_index] == -1, "not twice on same cp_index"); 49.80 - assert(_cp_cache_index_limit == -1, "do not add cache entries after first iteration"); 49.81 - int cache_index = _cp_cache_map.append(cp_index); 49.82 - _cp_map.at_put(cp_index, cache_index); 49.83 + assert(_first_iteration_cp_cache_limit == -1, "do not add cache entries after first iteration"); 49.84 + int cache_index = add_map_entry(cp_index, &_cp_map, &_cp_cache_map); 49.85 assert(cp_entry_to_cp_cache(cp_index) == cache_index, ""); 49.86 assert(cp_cache_entry_pool_index(cache_index) == cp_index, ""); 49.87 return cache_index; 49.88 } 49.89 49.90 - // add a new CP cache entry beyond the normal cache (for invokedynamic only) 49.91 int add_invokedynamic_cp_cache_entry(int cp_index) { 49.92 assert(_pool->tag_at(cp_index).value() == JVM_CONSTANT_InvokeDynamic, "use non-indy version"); 49.93 - assert(_cp_map[cp_index] == -1, "do not map from cp_index"); 49.94 - assert(_cp_cache_index_limit >= 0, "add indy cache entries after first iteration"); 49.95 + assert(_first_iteration_cp_cache_limit >= 0, "add indy cache entries after first iteration"); 49.96 + // add to the invokedynamic index map. 49.97 + int cache_index = _invokedynamic_cp_cache_map.append(cp_index); 49.98 + // do not update _cp_map, since the mapping is one-to-many 49.99 + assert(invokedynamic_cp_cache_entry_pool_index(cache_index) == cp_index, ""); 49.100 + // this index starts at one but in the bytecode it's appended to the end. 49.101 + return cache_index + _first_iteration_cp_cache_limit; 49.102 + } 49.103 + 49.104 + int invokedynamic_cp_cache_entry_pool_index(int cache_index) { 49.105 + int cp_index = _invokedynamic_cp_cache_map[cache_index]; 49.106 + return cp_index; 49.107 + } 49.108 + 49.109 + // add a new CP cache entry beyond the normal cache for the special case of 49.110 + // invokespecial with InterfaceMethodref as cpool operand. 49.111 + int add_invokespecial_cp_cache_entry(int cp_index) { 49.112 + assert(_first_iteration_cp_cache_limit >= 0, "add these special cache entries after first iteration"); 49.113 + // Don't add InterfaceMethodref if it already exists at the end. 49.114 + for (int i = _first_iteration_cp_cache_limit; i < _cp_cache_map.length(); i++) { 49.115 + if (cp_cache_entry_pool_index(i) == cp_index) { 49.116 + return i; 49.117 + } 49.118 + } 49.119 int cache_index = _cp_cache_map.append(cp_index); 49.120 - assert(cache_index >= _cp_cache_index_limit, ""); 49.121 + assert(cache_index >= _first_iteration_cp_cache_limit, ""); 49.122 // do not update _cp_map, since the mapping is one-to-many 49.123 assert(cp_cache_entry_pool_index(cache_index) == cp_index, ""); 49.124 return cache_index; 49.125 } 49.126 49.127 - // fix duplicated code later 49.128 int cp_entry_to_resolved_references(int cp_index) const { 49.129 assert(has_entry_in_resolved_references(cp_index), "oob"); 49.130 return _reference_map[cp_index]; 49.131 @@ -105,10 +152,7 @@ 49.132 49.133 // add a new entry to the resolved_references map 49.134 int add_resolved_references_entry(int cp_index) { 49.135 - assert(_reference_map[cp_index] == -1, "not twice on same cp_index"); 49.136 - assert(_resolved_reference_limit == -1, "do not add CP refs after first iteration"); 49.137 - int ref_index = _resolved_references_map.append(cp_index); 49.138 - _reference_map.at_put(cp_index, ref_index); 49.139 + int ref_index = add_map_entry(cp_index, &_reference_map, &_resolved_references_map); 49.140 assert(cp_entry_to_resolved_references(cp_index) == ref_index, ""); 49.141 return ref_index; 49.142 } 49.143 @@ -137,7 +181,7 @@ 49.144 // Access the contents of _cp_cache_map to determine CP cache layout. 49.145 int cp_cache_entry_pool_index(int cache_index) { 49.146 int cp_index = _cp_cache_map[cache_index]; 49.147 - return cp_index; 49.148 + return cp_index; 49.149 } 49.150 49.151 // All the work goes in here: 49.152 @@ -145,14 +189,18 @@ 49.153 49.154 void compute_index_maps(); 49.155 void make_constant_pool_cache(TRAPS); 49.156 - void scan_method(Method* m, bool reverse = false); 49.157 + void scan_method(Method* m, bool reverse, TRAPS); 49.158 void rewrite_Object_init(methodHandle m, TRAPS); 49.159 - void rewrite_member_reference(address bcp, int offset, bool reverse = false); 49.160 - void maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse = false); 49.161 - void rewrite_invokedynamic(address bcp, int offset, bool reverse = false); 49.162 - void maybe_rewrite_ldc(address bcp, int offset, bool is_wide, bool reverse = false); 49.163 + void rewrite_member_reference(address bcp, int offset, bool reverse); 49.164 + void maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse); 49.165 + void rewrite_invokedynamic(address bcp, int offset, bool reverse); 49.166 + void maybe_rewrite_ldc(address bcp, int offset, bool is_wide, bool reverse); 49.167 + void rewrite_invokespecial(address bcp, int offset, bool reverse, TRAPS); 49.168 + 49.169 + void patch_invokedynamic_bytecodes(); 49.170 + 49.171 // Revert bytecodes in case of an exception. 49.172 - void restore_bytecodes(); 49.173 + void restore_bytecodes(TRAPS); 49.174 49.175 static methodHandle rewrite_jsrs(methodHandle m, TRAPS); 49.176 public:
50.1 --- a/src/share/vm/memory/collectorPolicy.cpp Wed Nov 20 11:08:09 2013 -0800 50.2 +++ b/src/share/vm/memory/collectorPolicy.cpp Thu Nov 21 12:30:35 2013 -0800 50.3 @@ -47,54 +47,107 @@ 50.4 50.5 // CollectorPolicy methods. 50.6 50.7 +CollectorPolicy::CollectorPolicy() : 50.8 + _space_alignment(0), 50.9 + _heap_alignment(0), 50.10 + _initial_heap_byte_size(InitialHeapSize), 50.11 + _max_heap_byte_size(MaxHeapSize), 50.12 + _min_heap_byte_size(Arguments::min_heap_size()), 50.13 + _max_heap_size_cmdline(false), 50.14 + _size_policy(NULL), 50.15 + _should_clear_all_soft_refs(false), 50.16 + _all_soft_refs_clear(false) 50.17 +{} 50.18 + 50.19 +#ifdef ASSERT 50.20 +void CollectorPolicy::assert_flags() { 50.21 + assert(InitialHeapSize <= MaxHeapSize, "Ergonomics decided on incompatible initial and maximum heap sizes"); 50.22 + assert(InitialHeapSize % _heap_alignment == 0, "InitialHeapSize alignment"); 50.23 + assert(MaxHeapSize % _heap_alignment == 0, "MaxHeapSize alignment"); 50.24 +} 50.25 + 50.26 +void CollectorPolicy::assert_size_info() { 50.27 + assert(InitialHeapSize == _initial_heap_byte_size, "Discrepancy between InitialHeapSize flag and local storage"); 50.28 + assert(MaxHeapSize == _max_heap_byte_size, "Discrepancy between MaxHeapSize flag and local storage"); 50.29 + assert(_max_heap_byte_size >= _min_heap_byte_size, "Ergonomics decided on incompatible minimum and maximum heap sizes"); 50.30 + assert(_initial_heap_byte_size >= _min_heap_byte_size, "Ergonomics decided on incompatible initial and minimum heap sizes"); 50.31 + assert(_max_heap_byte_size >= _initial_heap_byte_size, "Ergonomics decided on incompatible initial and maximum heap sizes"); 50.32 + assert(_min_heap_byte_size % _heap_alignment == 0, "min_heap_byte_size alignment"); 50.33 + assert(_initial_heap_byte_size % _heap_alignment == 0, "initial_heap_byte_size alignment"); 50.34 + assert(_max_heap_byte_size % _heap_alignment == 0, "max_heap_byte_size alignment"); 50.35 +} 50.36 +#endif // ASSERT 50.37 + 50.38 void CollectorPolicy::initialize_flags() { 50.39 - assert(_max_alignment >= _min_alignment, 50.40 - err_msg("max_alignment: " SIZE_FORMAT " less than min_alignment: " SIZE_FORMAT, 50.41 - _max_alignment, _min_alignment)); 50.42 - assert(_max_alignment % _min_alignment == 0, 50.43 - err_msg("max_alignment: " SIZE_FORMAT " not aligned by min_alignment: " SIZE_FORMAT, 50.44 - _max_alignment, _min_alignment)); 50.45 + assert(_space_alignment != 0, "Space alignment not set up properly"); 50.46 + assert(_heap_alignment != 0, "Heap alignment not set up properly"); 50.47 + assert(_heap_alignment >= _space_alignment, 50.48 + err_msg("heap_alignment: " SIZE_FORMAT " less than space_alignment: " SIZE_FORMAT, 50.49 + _heap_alignment, _space_alignment)); 50.50 + assert(_heap_alignment % _space_alignment == 0, 50.51 + err_msg("heap_alignment: " SIZE_FORMAT " not aligned by space_alignment: " SIZE_FORMAT, 50.52 + _heap_alignment, _space_alignment)); 50.53 50.54 - if (MaxHeapSize < InitialHeapSize) { 50.55 - vm_exit_during_initialization("Incompatible initial and maximum heap sizes specified"); 50.56 + if (FLAG_IS_CMDLINE(MaxHeapSize)) { 50.57 + if (FLAG_IS_CMDLINE(InitialHeapSize) && InitialHeapSize > MaxHeapSize) { 50.58 + vm_exit_during_initialization("Initial heap size set to a larger value than the maximum heap size"); 50.59 + } 50.60 + if (_min_heap_byte_size != 0 && MaxHeapSize < _min_heap_byte_size) { 50.61 + vm_exit_during_initialization("Incompatible minimum and maximum heap sizes specified"); 50.62 + } 50.63 + _max_heap_size_cmdline = true; 50.64 } 50.65 50.66 - MinHeapDeltaBytes = align_size_up(MinHeapDeltaBytes, _min_alignment); 50.67 + // Check heap parameter properties 50.68 + if (InitialHeapSize < M) { 50.69 + vm_exit_during_initialization("Too small initial heap"); 50.70 + } 50.71 + if (_min_heap_byte_size < M) { 50.72 + vm_exit_during_initialization("Too small minimum heap"); 50.73 + } 50.74 + 50.75 + // User inputs from -Xmx and -Xms must be aligned 50.76 + _min_heap_byte_size = align_size_up(_min_heap_byte_size, _heap_alignment); 50.77 + uintx aligned_initial_heap_size = align_size_up(InitialHeapSize, _heap_alignment); 50.78 + uintx aligned_max_heap_size = align_size_up(MaxHeapSize, _heap_alignment); 50.79 + 50.80 + // Write back to flags if the values changed 50.81 + if (aligned_initial_heap_size != InitialHeapSize) { 50.82 + FLAG_SET_ERGO(uintx, InitialHeapSize, aligned_initial_heap_size); 50.83 + } 50.84 + if (aligned_max_heap_size != MaxHeapSize) { 50.85 + FLAG_SET_ERGO(uintx, MaxHeapSize, aligned_max_heap_size); 50.86 + } 50.87 + 50.88 + if (FLAG_IS_CMDLINE(InitialHeapSize) && _min_heap_byte_size != 0 && 50.89 + InitialHeapSize < _min_heap_byte_size) { 50.90 + vm_exit_during_initialization("Incompatible minimum and initial heap sizes specified"); 50.91 + } 50.92 + if (!FLAG_IS_DEFAULT(InitialHeapSize) && InitialHeapSize > MaxHeapSize) { 50.93 + FLAG_SET_ERGO(uintx, MaxHeapSize, InitialHeapSize); 50.94 + } else if (!FLAG_IS_DEFAULT(MaxHeapSize) && InitialHeapSize > MaxHeapSize) { 50.95 + FLAG_SET_ERGO(uintx, InitialHeapSize, MaxHeapSize); 50.96 + if (InitialHeapSize < _min_heap_byte_size) { 50.97 + _min_heap_byte_size = InitialHeapSize; 50.98 + } 50.99 + } 50.100 + 50.101 + _initial_heap_byte_size = InitialHeapSize; 50.102 + _max_heap_byte_size = MaxHeapSize; 50.103 + 50.104 + FLAG_SET_ERGO(uintx, MinHeapDeltaBytes, align_size_up(MinHeapDeltaBytes, _space_alignment)); 50.105 + 50.106 + DEBUG_ONLY(CollectorPolicy::assert_flags();) 50.107 } 50.108 50.109 void CollectorPolicy::initialize_size_info() { 50.110 - // User inputs from -mx and ms must be aligned 50.111 - _min_heap_byte_size = align_size_up(Arguments::min_heap_size(), _min_alignment); 50.112 - _initial_heap_byte_size = align_size_up(InitialHeapSize, _min_alignment); 50.113 - _max_heap_byte_size = align_size_up(MaxHeapSize, _max_alignment); 50.114 - 50.115 - // Check heap parameter properties 50.116 - if (_initial_heap_byte_size < M) { 50.117 - vm_exit_during_initialization("Too small initial heap"); 50.118 - } 50.119 - // Check heap parameter properties 50.120 - if (_min_heap_byte_size < M) { 50.121 - vm_exit_during_initialization("Too small minimum heap"); 50.122 - } 50.123 - if (_initial_heap_byte_size <= NewSize) { 50.124 - // make sure there is at least some room in old space 50.125 - vm_exit_during_initialization("Too small initial heap for new size specified"); 50.126 - } 50.127 - if (_max_heap_byte_size < _min_heap_byte_size) { 50.128 - vm_exit_during_initialization("Incompatible minimum and maximum heap sizes specified"); 50.129 - } 50.130 - if (_initial_heap_byte_size < _min_heap_byte_size) { 50.131 - vm_exit_during_initialization("Incompatible minimum and initial heap sizes specified"); 50.132 - } 50.133 - if (_max_heap_byte_size < _initial_heap_byte_size) { 50.134 - vm_exit_during_initialization("Incompatible initial and maximum heap sizes specified"); 50.135 - } 50.136 - 50.137 if (PrintGCDetails && Verbose) { 50.138 gclog_or_tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap " 50.139 SIZE_FORMAT " Maximum heap " SIZE_FORMAT, 50.140 _min_heap_byte_size, _initial_heap_byte_size, _max_heap_byte_size); 50.141 } 50.142 + 50.143 + DEBUG_ONLY(CollectorPolicy::assert_size_info();) 50.144 } 50.145 50.146 bool CollectorPolicy::use_should_clear_all_soft_refs(bool v) { 50.147 @@ -105,7 +158,6 @@ 50.148 50.149 GenRemSet* CollectorPolicy::create_rem_set(MemRegion whole_heap, 50.150 int max_covered_regions) { 50.151 - assert(rem_set_name() == GenRemSet::CardTable, "unrecognized GenRemSet::Name"); 50.152 return new CardTableRS(whole_heap, max_covered_regions); 50.153 } 50.154 50.155 @@ -119,7 +171,7 @@ 50.156 _all_soft_refs_clear = true; 50.157 } 50.158 50.159 -size_t CollectorPolicy::compute_max_alignment() { 50.160 +size_t CollectorPolicy::compute_heap_alignment() { 50.161 // The card marking array and the offset arrays for old generations are 50.162 // committed in os pages as well. Make sure they are entirely full (to 50.163 // avoid partial page problems), e.g. if 512 bytes heap corresponds to 1 50.164 @@ -146,18 +198,21 @@ 50.165 50.166 // GenCollectorPolicy methods. 50.167 50.168 +GenCollectorPolicy::GenCollectorPolicy() : 50.169 + _min_gen0_size(0), 50.170 + _initial_gen0_size(0), 50.171 + _max_gen0_size(0), 50.172 + _gen_alignment(0), 50.173 + _generations(NULL) 50.174 +{} 50.175 + 50.176 size_t GenCollectorPolicy::scale_by_NewRatio_aligned(size_t base_size) { 50.177 - size_t x = base_size / (NewRatio+1); 50.178 - size_t new_gen_size = x > _min_alignment ? 50.179 - align_size_down(x, _min_alignment) : 50.180 - _min_alignment; 50.181 - return new_gen_size; 50.182 + return align_size_down_bounded(base_size / (NewRatio + 1), _gen_alignment); 50.183 } 50.184 50.185 size_t GenCollectorPolicy::bound_minus_alignment(size_t desired_size, 50.186 size_t maximum_size) { 50.187 - size_t alignment = _min_alignment; 50.188 - size_t max_minus = maximum_size - alignment; 50.189 + size_t max_minus = maximum_size - _gen_alignment; 50.190 return desired_size < max_minus ? desired_size : max_minus; 50.191 } 50.192 50.193 @@ -165,7 +220,7 @@ 50.194 void GenCollectorPolicy::initialize_size_policy(size_t init_eden_size, 50.195 size_t init_promo_size, 50.196 size_t init_survivor_size) { 50.197 - const double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0; 50.198 + const double max_gc_pause_sec = ((double) MaxGCPauseMillis) / 1000.0; 50.199 _size_policy = new AdaptiveSizePolicy(init_eden_size, 50.200 init_promo_size, 50.201 init_survivor_size, 50.202 @@ -173,100 +228,181 @@ 50.203 GCTimeRatio); 50.204 } 50.205 50.206 +size_t GenCollectorPolicy::young_gen_size_lower_bound() { 50.207 + // The young generation must be aligned and have room for eden + two survivors 50.208 + return align_size_up(3 * _space_alignment, _gen_alignment); 50.209 +} 50.210 + 50.211 +#ifdef ASSERT 50.212 +void GenCollectorPolicy::assert_flags() { 50.213 + CollectorPolicy::assert_flags(); 50.214 + assert(NewSize >= _min_gen0_size, "Ergonomics decided on a too small young gen size"); 50.215 + assert(NewSize <= MaxNewSize, "Ergonomics decided on incompatible initial and maximum young gen sizes"); 50.216 + assert(FLAG_IS_DEFAULT(MaxNewSize) || MaxNewSize < MaxHeapSize, "Ergonomics decided on incompatible maximum young gen and heap sizes"); 50.217 + assert(NewSize % _gen_alignment == 0, "NewSize alignment"); 50.218 + assert(FLAG_IS_DEFAULT(MaxNewSize) || MaxNewSize % _gen_alignment == 0, "MaxNewSize alignment"); 50.219 +} 50.220 + 50.221 +void TwoGenerationCollectorPolicy::assert_flags() { 50.222 + GenCollectorPolicy::assert_flags(); 50.223 + assert(OldSize + NewSize <= MaxHeapSize, "Ergonomics decided on incompatible generation and heap sizes"); 50.224 + assert(OldSize % _gen_alignment == 0, "OldSize alignment"); 50.225 +} 50.226 + 50.227 +void GenCollectorPolicy::assert_size_info() { 50.228 + CollectorPolicy::assert_size_info(); 50.229 + // GenCollectorPolicy::initialize_size_info may update the MaxNewSize 50.230 + assert(MaxNewSize < MaxHeapSize, "Ergonomics decided on incompatible maximum young and heap sizes"); 50.231 + assert(NewSize == _initial_gen0_size, "Discrepancy between NewSize flag and local storage"); 50.232 + assert(MaxNewSize == _max_gen0_size, "Discrepancy between MaxNewSize flag and local storage"); 50.233 + assert(_min_gen0_size <= _initial_gen0_size, "Ergonomics decided on incompatible minimum and initial young gen sizes"); 50.234 + assert(_initial_gen0_size <= _max_gen0_size, "Ergonomics decided on incompatible initial and maximum young gen sizes"); 50.235 + assert(_min_gen0_size % _gen_alignment == 0, "_min_gen0_size alignment"); 50.236 + assert(_initial_gen0_size % _gen_alignment == 0, "_initial_gen0_size alignment"); 50.237 + assert(_max_gen0_size % _gen_alignment == 0, "_max_gen0_size alignment"); 50.238 +} 50.239 + 50.240 +void TwoGenerationCollectorPolicy::assert_size_info() { 50.241 + GenCollectorPolicy::assert_size_info(); 50.242 + assert(OldSize == _initial_gen1_size, "Discrepancy between OldSize flag and local storage"); 50.243 + assert(_min_gen1_size <= _initial_gen1_size, "Ergonomics decided on incompatible minimum and initial old gen sizes"); 50.244 + assert(_initial_gen1_size <= _max_gen1_size, "Ergonomics decided on incompatible initial and maximum old gen sizes"); 50.245 + assert(_max_gen1_size % _gen_alignment == 0, "_max_gen1_size alignment"); 50.246 + assert(_initial_gen1_size % _gen_alignment == 0, "_initial_gen1_size alignment"); 50.247 + assert(_max_heap_byte_size <= (_max_gen0_size + _max_gen1_size), "Total maximum heap sizes must be sum of generation maximum sizes"); 50.248 +} 50.249 +#endif // ASSERT 50.250 + 50.251 void GenCollectorPolicy::initialize_flags() { 50.252 - // All sizes must be multiples of the generation granularity. 50.253 - _min_alignment = (uintx) Generation::GenGrain; 50.254 - _max_alignment = compute_max_alignment(); 50.255 - 50.256 CollectorPolicy::initialize_flags(); 50.257 50.258 - // All generational heaps have a youngest gen; handle those flags here. 50.259 + assert(_gen_alignment != 0, "Generation alignment not set up properly"); 50.260 + assert(_heap_alignment >= _gen_alignment, 50.261 + err_msg("heap_alignment: " SIZE_FORMAT " less than gen_alignment: " SIZE_FORMAT, 50.262 + _heap_alignment, _gen_alignment)); 50.263 + assert(_gen_alignment % _space_alignment == 0, 50.264 + err_msg("gen_alignment: " SIZE_FORMAT " not aligned by space_alignment: " SIZE_FORMAT, 50.265 + _gen_alignment, _space_alignment)); 50.266 + assert(_heap_alignment % _gen_alignment == 0, 50.267 + err_msg("heap_alignment: " SIZE_FORMAT " not aligned by gen_alignment: " SIZE_FORMAT, 50.268 + _heap_alignment, _gen_alignment)); 50.269 50.270 - // Adjust max size parameters 50.271 + // All generational heaps have a youngest gen; handle those flags here 50.272 + 50.273 + // Make sure the heap is large enough for two generations 50.274 + uintx smallest_new_size = young_gen_size_lower_bound(); 50.275 + uintx smallest_heap_size = align_size_up(smallest_new_size + align_size_up(_space_alignment, _gen_alignment), 50.276 + _heap_alignment); 50.277 + if (MaxHeapSize < smallest_heap_size) { 50.278 + FLAG_SET_ERGO(uintx, MaxHeapSize, smallest_heap_size); 50.279 + _max_heap_byte_size = MaxHeapSize; 50.280 + } 50.281 + // If needed, synchronize _min_heap_byte size and _initial_heap_byte_size 50.282 + if (_min_heap_byte_size < smallest_heap_size) { 50.283 + _min_heap_byte_size = smallest_heap_size; 50.284 + if (InitialHeapSize < _min_heap_byte_size) { 50.285 + FLAG_SET_ERGO(uintx, InitialHeapSize, smallest_heap_size); 50.286 + _initial_heap_byte_size = smallest_heap_size; 50.287 + } 50.288 + } 50.289 + 50.290 + // Now take the actual NewSize into account. We will silently increase NewSize 50.291 + // if the user specified a smaller value. 50.292 + smallest_new_size = MAX2(smallest_new_size, (uintx)align_size_down(NewSize, _gen_alignment)); 50.293 + if (smallest_new_size != NewSize) { 50.294 + FLAG_SET_ERGO(uintx, NewSize, smallest_new_size); 50.295 + } 50.296 + _initial_gen0_size = NewSize; 50.297 + 50.298 + if (!FLAG_IS_DEFAULT(MaxNewSize)) { 50.299 + uintx min_new_size = MAX2(_gen_alignment, _min_gen0_size); 50.300 + 50.301 + if (MaxNewSize >= MaxHeapSize) { 50.302 + // Make sure there is room for an old generation 50.303 + uintx smaller_max_new_size = MaxHeapSize - _gen_alignment; 50.304 + if (FLAG_IS_CMDLINE(MaxNewSize)) { 50.305 + warning("MaxNewSize (" SIZE_FORMAT "k) is equal to or greater than the entire " 50.306 + "heap (" SIZE_FORMAT "k). A new max generation size of " SIZE_FORMAT "k will be used.", 50.307 + MaxNewSize/K, MaxHeapSize/K, smaller_max_new_size/K); 50.308 + } 50.309 + FLAG_SET_ERGO(uintx, MaxNewSize, smaller_max_new_size); 50.310 + if (NewSize > MaxNewSize) { 50.311 + FLAG_SET_ERGO(uintx, NewSize, MaxNewSize); 50.312 + _initial_gen0_size = NewSize; 50.313 + } 50.314 + } else if (MaxNewSize < min_new_size) { 50.315 + FLAG_SET_ERGO(uintx, MaxNewSize, min_new_size); 50.316 + } else if (!is_size_aligned(MaxNewSize, _gen_alignment)) { 50.317 + FLAG_SET_ERGO(uintx, MaxNewSize, align_size_down(MaxNewSize, _gen_alignment)); 50.318 + } 50.319 + _max_gen0_size = MaxNewSize; 50.320 + } 50.321 + 50.322 if (NewSize > MaxNewSize) { 50.323 - MaxNewSize = NewSize; 50.324 + // At this point this should only happen if the user specifies a large NewSize and/or 50.325 + // a small (but not too small) MaxNewSize. 50.326 + if (FLAG_IS_CMDLINE(MaxNewSize)) { 50.327 + warning("NewSize (" SIZE_FORMAT "k) is greater than the MaxNewSize (" SIZE_FORMAT "k). " 50.328 + "A new max generation size of " SIZE_FORMAT "k will be used.", 50.329 + NewSize/K, MaxNewSize/K, NewSize/K); 50.330 + } 50.331 + FLAG_SET_ERGO(uintx, MaxNewSize, NewSize); 50.332 + _max_gen0_size = MaxNewSize; 50.333 } 50.334 - NewSize = align_size_down(NewSize, _min_alignment); 50.335 - MaxNewSize = align_size_down(MaxNewSize, _min_alignment); 50.336 50.337 - // Check validity of heap flags 50.338 - assert(NewSize % _min_alignment == 0, "eden space alignment"); 50.339 - assert(MaxNewSize % _min_alignment == 0, "survivor space alignment"); 50.340 - 50.341 - if (NewSize < 3 * _min_alignment) { 50.342 - // make sure there room for eden and two survivor spaces 50.343 - vm_exit_during_initialization("Too small new size specified"); 50.344 - } 50.345 if (SurvivorRatio < 1 || NewRatio < 1) { 50.346 vm_exit_during_initialization("Invalid young gen ratio specified"); 50.347 } 50.348 + 50.349 + DEBUG_ONLY(GenCollectorPolicy::assert_flags();) 50.350 } 50.351 50.352 void TwoGenerationCollectorPolicy::initialize_flags() { 50.353 GenCollectorPolicy::initialize_flags(); 50.354 50.355 - OldSize = align_size_down(OldSize, _min_alignment); 50.356 + if (!is_size_aligned(OldSize, _gen_alignment)) { 50.357 + FLAG_SET_ERGO(uintx, OldSize, align_size_down(OldSize, _gen_alignment)); 50.358 + } 50.359 50.360 - if (FLAG_IS_CMDLINE(OldSize) && FLAG_IS_DEFAULT(NewSize)) { 50.361 + if (FLAG_IS_CMDLINE(OldSize) && FLAG_IS_DEFAULT(MaxHeapSize)) { 50.362 // NewRatio will be used later to set the young generation size so we use 50.363 // it to calculate how big the heap should be based on the requested OldSize 50.364 // and NewRatio. 50.365 assert(NewRatio > 0, "NewRatio should have been set up earlier"); 50.366 size_t calculated_heapsize = (OldSize / NewRatio) * (NewRatio + 1); 50.367 50.368 - calculated_heapsize = align_size_up(calculated_heapsize, _max_alignment); 50.369 - MaxHeapSize = calculated_heapsize; 50.370 - InitialHeapSize = calculated_heapsize; 50.371 + calculated_heapsize = align_size_up(calculated_heapsize, _heap_alignment); 50.372 + FLAG_SET_ERGO(uintx, MaxHeapSize, calculated_heapsize); 50.373 + _max_heap_byte_size = MaxHeapSize; 50.374 + FLAG_SET_ERGO(uintx, InitialHeapSize, calculated_heapsize); 50.375 + _initial_heap_byte_size = InitialHeapSize; 50.376 } 50.377 - MaxHeapSize = align_size_up(MaxHeapSize, _max_alignment); 50.378 50.379 // adjust max heap size if necessary 50.380 if (NewSize + OldSize > MaxHeapSize) { 50.381 - if (FLAG_IS_CMDLINE(MaxHeapSize)) { 50.382 + if (_max_heap_size_cmdline) { 50.383 // somebody set a maximum heap size with the intention that we should not 50.384 // exceed it. Adjust New/OldSize as necessary. 50.385 uintx calculated_size = NewSize + OldSize; 50.386 double shrink_factor = (double) MaxHeapSize / calculated_size; 50.387 - // align 50.388 - NewSize = align_size_down((uintx) (NewSize * shrink_factor), _min_alignment); 50.389 + uintx smaller_new_size = align_size_down((uintx)(NewSize * shrink_factor), _gen_alignment); 50.390 + FLAG_SET_ERGO(uintx, NewSize, MAX2(young_gen_size_lower_bound(), smaller_new_size)); 50.391 + _initial_gen0_size = NewSize; 50.392 + 50.393 // OldSize is already aligned because above we aligned MaxHeapSize to 50.394 - // _max_alignment, and we just made sure that NewSize is aligned to 50.395 - // _min_alignment. In initialize_flags() we verified that _max_alignment 50.396 - // is a multiple of _min_alignment. 50.397 - OldSize = MaxHeapSize - NewSize; 50.398 + // _heap_alignment, and we just made sure that NewSize is aligned to 50.399 + // _gen_alignment. In initialize_flags() we verified that _heap_alignment 50.400 + // is a multiple of _gen_alignment. 50.401 + FLAG_SET_ERGO(uintx, OldSize, MaxHeapSize - NewSize); 50.402 } else { 50.403 - MaxHeapSize = NewSize + OldSize; 50.404 + FLAG_SET_ERGO(uintx, MaxHeapSize, align_size_up(NewSize + OldSize, _heap_alignment)); 50.405 + _max_heap_byte_size = MaxHeapSize; 50.406 } 50.407 } 50.408 - // need to do this again 50.409 - MaxHeapSize = align_size_up(MaxHeapSize, _max_alignment); 50.410 - 50.411 - // adjust max heap size if necessary 50.412 - if (NewSize + OldSize > MaxHeapSize) { 50.413 - if (FLAG_IS_CMDLINE(MaxHeapSize)) { 50.414 - // somebody set a maximum heap size with the intention that we should not 50.415 - // exceed it. Adjust New/OldSize as necessary. 50.416 - uintx calculated_size = NewSize + OldSize; 50.417 - double shrink_factor = (double) MaxHeapSize / calculated_size; 50.418 - // align 50.419 - NewSize = align_size_down((uintx) (NewSize * shrink_factor), _min_alignment); 50.420 - // OldSize is already aligned because above we aligned MaxHeapSize to 50.421 - // _max_alignment, and we just made sure that NewSize is aligned to 50.422 - // _min_alignment. In initialize_flags() we verified that _max_alignment 50.423 - // is a multiple of _min_alignment. 50.424 - OldSize = MaxHeapSize - NewSize; 50.425 - } else { 50.426 - MaxHeapSize = NewSize + OldSize; 50.427 - } 50.428 - } 50.429 - // need to do this again 50.430 - MaxHeapSize = align_size_up(MaxHeapSize, _max_alignment); 50.431 50.432 always_do_update_barrier = UseConcMarkSweepGC; 50.433 50.434 - // Check validity of heap flags 50.435 - assert(OldSize % _min_alignment == 0, "old space alignment"); 50.436 - assert(MaxHeapSize % _max_alignment == 0, "maximum heap alignment"); 50.437 + DEBUG_ONLY(TwoGenerationCollectorPolicy::assert_flags();) 50.438 } 50.439 50.440 // Values set on the command line win over any ergonomically 50.441 @@ -281,7 +417,7 @@ 50.442 void GenCollectorPolicy::initialize_size_info() { 50.443 CollectorPolicy::initialize_size_info(); 50.444 50.445 - // _min_alignment is used for alignment within a generation. 50.446 + // _space_alignment is used for alignment within a generation. 50.447 // There is additional alignment done down stream for some 50.448 // collectors that sometimes causes unwanted rounding up of 50.449 // generations sizes. 50.450 @@ -289,35 +425,8 @@ 50.451 // Determine maximum size of gen0 50.452 50.453 size_t max_new_size = 0; 50.454 - if (FLAG_IS_CMDLINE(MaxNewSize) || FLAG_IS_ERGO(MaxNewSize)) { 50.455 - if (MaxNewSize < _min_alignment) { 50.456 - max_new_size = _min_alignment; 50.457 - } 50.458 - if (MaxNewSize >= _max_heap_byte_size) { 50.459 - max_new_size = align_size_down(_max_heap_byte_size - _min_alignment, 50.460 - _min_alignment); 50.461 - warning("MaxNewSize (" SIZE_FORMAT "k) is equal to or " 50.462 - "greater than the entire heap (" SIZE_FORMAT "k). A " 50.463 - "new generation size of " SIZE_FORMAT "k will be used.", 50.464 - MaxNewSize/K, _max_heap_byte_size/K, max_new_size/K); 50.465 - } else { 50.466 - max_new_size = align_size_down(MaxNewSize, _min_alignment); 50.467 - } 50.468 - 50.469 - // The case for FLAG_IS_ERGO(MaxNewSize) could be treated 50.470 - // specially at this point to just use an ergonomically set 50.471 - // MaxNewSize to set max_new_size. For cases with small 50.472 - // heaps such a policy often did not work because the MaxNewSize 50.473 - // was larger than the entire heap. The interpretation given 50.474 - // to ergonomically set flags is that the flags are set 50.475 - // by different collectors for their own special needs but 50.476 - // are not allowed to badly shape the heap. This allows the 50.477 - // different collectors to decide what's best for themselves 50.478 - // without having to factor in the overall heap shape. It 50.479 - // can be the case in the future that the collectors would 50.480 - // only make "wise" ergonomics choices and this policy could 50.481 - // just accept those choices. The choices currently made are 50.482 - // not always "wise". 50.483 + if (!FLAG_IS_DEFAULT(MaxNewSize)) { 50.484 + max_new_size = MaxNewSize; 50.485 } else { 50.486 max_new_size = scale_by_NewRatio_aligned(_max_heap_byte_size); 50.487 // Bound the maximum size by NewSize below (since it historically 50.488 @@ -386,11 +495,22 @@ 50.489 _min_gen0_size = MIN2(_min_gen0_size, _initial_gen0_size); 50.490 } 50.491 50.492 + // Write back to flags if necessary 50.493 + if (NewSize != _initial_gen0_size) { 50.494 + FLAG_SET_ERGO(uintx, NewSize, _initial_gen0_size); 50.495 + } 50.496 + 50.497 + if (MaxNewSize != _max_gen0_size) { 50.498 + FLAG_SET_ERGO(uintx, MaxNewSize, _max_gen0_size); 50.499 + } 50.500 + 50.501 if (PrintGCDetails && Verbose) { 50.502 gclog_or_tty->print_cr("1: Minimum gen0 " SIZE_FORMAT " Initial gen0 " 50.503 SIZE_FORMAT " Maximum gen0 " SIZE_FORMAT, 50.504 _min_gen0_size, _initial_gen0_size, _max_gen0_size); 50.505 } 50.506 + 50.507 + DEBUG_ONLY(GenCollectorPolicy::assert_size_info();) 50.508 } 50.509 50.510 // Call this method during the sizing of the gen1 to make 50.511 @@ -403,23 +523,18 @@ 50.512 // keeping it simple also seems a worthwhile goal. 50.513 bool TwoGenerationCollectorPolicy::adjust_gen0_sizes(size_t* gen0_size_ptr, 50.514 size_t* gen1_size_ptr, 50.515 - const size_t heap_size, 50.516 - const size_t min_gen1_size) { 50.517 + const size_t heap_size) { 50.518 bool result = false; 50.519 50.520 - if ((*gen1_size_ptr + *gen0_size_ptr) > heap_size) { 50.521 - if ((heap_size < (*gen0_size_ptr + min_gen1_size)) && 50.522 - (heap_size >= min_gen1_size + _min_alignment)) { 50.523 - // Adjust gen0 down to accommodate min_gen1_size 50.524 - *gen0_size_ptr = heap_size - min_gen1_size; 50.525 - *gen0_size_ptr = 50.526 - MAX2((uintx)align_size_down(*gen0_size_ptr, _min_alignment), _min_alignment); 50.527 - assert(*gen0_size_ptr > 0, "Min gen0 is too large"); 50.528 + if ((*gen0_size_ptr + *gen1_size_ptr) > heap_size) { 50.529 + uintx smallest_new_size = young_gen_size_lower_bound(); 50.530 + if ((heap_size < (*gen0_size_ptr + _min_gen1_size)) && 50.531 + (heap_size >= _min_gen1_size + smallest_new_size)) { 50.532 + // Adjust gen0 down to accommodate _min_gen1_size 50.533 + *gen0_size_ptr = align_size_down_bounded(heap_size - _min_gen1_size, _gen_alignment); 50.534 result = true; 50.535 } else { 50.536 - *gen1_size_ptr = heap_size - *gen0_size_ptr; 50.537 - *gen1_size_ptr = 50.538 - MAX2((uintx)align_size_down(*gen1_size_ptr, _min_alignment), _min_alignment); 50.539 + *gen1_size_ptr = align_size_down_bounded(heap_size - *gen0_size_ptr, _gen_alignment); 50.540 } 50.541 } 50.542 return result; 50.543 @@ -440,41 +555,36 @@ 50.544 // The maximum gen1 size can be determined from the maximum gen0 50.545 // and maximum heap size since no explicit flags exits 50.546 // for setting the gen1 maximum. 50.547 - _max_gen1_size = _max_heap_byte_size - _max_gen0_size; 50.548 - _max_gen1_size = 50.549 - MAX2((uintx)align_size_down(_max_gen1_size, _min_alignment), _min_alignment); 50.550 + _max_gen1_size = MAX2(_max_heap_byte_size - _max_gen0_size, _gen_alignment); 50.551 + 50.552 // If no explicit command line flag has been set for the 50.553 // gen1 size, use what is left for gen1. 50.554 - if (FLAG_IS_DEFAULT(OldSize) || FLAG_IS_ERGO(OldSize)) { 50.555 - // The user has not specified any value or ergonomics 50.556 - // has chosen a value (which may or may not be consistent 50.557 + if (!FLAG_IS_CMDLINE(OldSize)) { 50.558 + // The user has not specified any value but the ergonomics 50.559 + // may have chosen a value (which may or may not be consistent 50.560 // with the overall heap size). In either case make 50.561 // the minimum, maximum and initial sizes consistent 50.562 // with the gen0 sizes and the overall heap sizes. 50.563 - assert(_min_heap_byte_size > _min_gen0_size, 50.564 - "gen0 has an unexpected minimum size"); 50.565 - _min_gen1_size = _min_heap_byte_size - _min_gen0_size; 50.566 - _min_gen1_size = 50.567 - MAX2((uintx)align_size_down(_min_gen1_size, _min_alignment), _min_alignment); 50.568 - _initial_gen1_size = _initial_heap_byte_size - _initial_gen0_size; 50.569 - _initial_gen1_size = 50.570 - MAX2((uintx)align_size_down(_initial_gen1_size, _min_alignment), _min_alignment); 50.571 + _min_gen1_size = MAX2(_min_heap_byte_size - _min_gen0_size, _gen_alignment); 50.572 + _initial_gen1_size = MAX2(_initial_heap_byte_size - _initial_gen0_size, _gen_alignment); 50.573 + // _max_gen1_size has already been made consistent above 50.574 + FLAG_SET_ERGO(uintx, OldSize, _initial_gen1_size); 50.575 } else { 50.576 // It's been explicitly set on the command line. Use the 50.577 // OldSize and then determine the consequences. 50.578 - _min_gen1_size = OldSize; 50.579 + _min_gen1_size = MIN2(OldSize, _min_heap_byte_size - _min_gen0_size); 50.580 _initial_gen1_size = OldSize; 50.581 50.582 // If the user has explicitly set an OldSize that is inconsistent 50.583 // with other command line flags, issue a warning. 50.584 // The generation minimums and the overall heap mimimum should 50.585 - // be within one heap alignment. 50.586 - if ((_min_gen1_size + _min_gen0_size + _min_alignment) < _min_heap_byte_size) { 50.587 + // be within one generation alignment. 50.588 + if ((_min_gen1_size + _min_gen0_size + _gen_alignment) < _min_heap_byte_size) { 50.589 warning("Inconsistency between minimum heap size and minimum " 50.590 "generation sizes: using minimum heap = " SIZE_FORMAT, 50.591 _min_heap_byte_size); 50.592 } 50.593 - if ((OldSize > _max_gen1_size)) { 50.594 + if (OldSize > _max_gen1_size) { 50.595 warning("Inconsistency between maximum heap size and maximum " 50.596 "generation sizes: using maximum heap = " SIZE_FORMAT 50.597 " -XX:OldSize flag is being ignored", 50.598 @@ -482,8 +592,7 @@ 50.599 } 50.600 // If there is an inconsistency between the OldSize and the minimum and/or 50.601 // initial size of gen0, since OldSize was explicitly set, OldSize wins. 50.602 - if (adjust_gen0_sizes(&_min_gen0_size, &_min_gen1_size, 50.603 - _min_heap_byte_size, OldSize)) { 50.604 + if (adjust_gen0_sizes(&_min_gen0_size, &_min_gen1_size, _min_heap_byte_size)) { 50.605 if (PrintGCDetails && Verbose) { 50.606 gclog_or_tty->print_cr("2: Minimum gen0 " SIZE_FORMAT " Initial gen0 " 50.607 SIZE_FORMAT " Maximum gen0 " SIZE_FORMAT, 50.608 @@ -492,7 +601,7 @@ 50.609 } 50.610 // Initial size 50.611 if (adjust_gen0_sizes(&_initial_gen0_size, &_initial_gen1_size, 50.612 - _initial_heap_byte_size, OldSize)) { 50.613 + _initial_heap_byte_size)) { 50.614 if (PrintGCDetails && Verbose) { 50.615 gclog_or_tty->print_cr("3: Minimum gen0 " SIZE_FORMAT " Initial gen0 " 50.616 SIZE_FORMAT " Maximum gen0 " SIZE_FORMAT, 50.617 @@ -507,11 +616,26 @@ 50.618 _initial_gen1_size = MAX2(_initial_gen1_size, _min_gen1_size); 50.619 _initial_gen1_size = MIN2(_initial_gen1_size, _max_gen1_size); 50.620 50.621 + // Write back to flags if necessary 50.622 + if (NewSize != _initial_gen0_size) { 50.623 + FLAG_SET_ERGO(uintx, NewSize, _initial_gen0_size); 50.624 + } 50.625 + 50.626 + if (MaxNewSize != _max_gen0_size) { 50.627 + FLAG_SET_ERGO(uintx, MaxNewSize, _max_gen0_size); 50.628 + } 50.629 + 50.630 + if (OldSize != _initial_gen1_size) { 50.631 + FLAG_SET_ERGO(uintx, OldSize, _initial_gen1_size); 50.632 + } 50.633 + 50.634 if (PrintGCDetails && Verbose) { 50.635 gclog_or_tty->print_cr("Minimum gen1 " SIZE_FORMAT " Initial gen1 " 50.636 SIZE_FORMAT " Maximum gen1 " SIZE_FORMAT, 50.637 _min_gen1_size, _initial_gen1_size, _max_gen1_size); 50.638 } 50.639 + 50.640 + DEBUG_ONLY(TwoGenerationCollectorPolicy::assert_size_info();) 50.641 } 50.642 50.643 HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, 50.644 @@ -605,9 +729,7 @@ 50.645 gc_count_before = Universe::heap()->total_collections(); 50.646 } 50.647 50.648 - VM_GenCollectForAllocation op(size, 50.649 - is_tlab, 50.650 - gc_count_before); 50.651 + VM_GenCollectForAllocation op(size, is_tlab, gc_count_before); 50.652 VMThread::execute(&op); 50.653 if (op.prologue_succeeded()) { 50.654 result = op.result(); 50.655 @@ -836,14 +958,16 @@ 50.656 // MarkSweepPolicy methods 50.657 // 50.658 50.659 -MarkSweepPolicy::MarkSweepPolicy() { 50.660 - initialize_all(); 50.661 +void MarkSweepPolicy::initialize_alignments() { 50.662 + _space_alignment = _gen_alignment = (uintx)Generation::GenGrain; 50.663 + _heap_alignment = compute_heap_alignment(); 50.664 } 50.665 50.666 void MarkSweepPolicy::initialize_generations() { 50.667 _generations = NEW_C_HEAP_ARRAY3(GenerationSpecPtr, number_of_generations(), mtGC, 0, AllocFailStrategy::RETURN_NULL); 50.668 - if (_generations == NULL) 50.669 + if (_generations == NULL) { 50.670 vm_exit_during_initialization("Unable to allocate gen spec"); 50.671 + } 50.672 50.673 if (UseParNewGC) { 50.674 _generations[0] = new GenerationSpec(Generation::ParNew, _initial_gen0_size, _max_gen0_size); 50.675 @@ -852,8 +976,9 @@ 50.676 } 50.677 _generations[1] = new GenerationSpec(Generation::MarkSweepCompact, _initial_gen1_size, _max_gen1_size); 50.678 50.679 - if (_generations[0] == NULL || _generations[1] == NULL) 50.680 + if (_generations[0] == NULL || _generations[1] == NULL) { 50.681 vm_exit_during_initialization("Unable to allocate gen spec"); 50.682 + } 50.683 } 50.684 50.685 void MarkSweepPolicy::initialize_gc_policy_counters() {
51.1 --- a/src/share/vm/memory/collectorPolicy.hpp Wed Nov 20 11:08:09 2013 -0800 51.2 +++ b/src/share/vm/memory/collectorPolicy.hpp Thu Nov 21 12:30:35 2013 -0800 51.3 @@ -61,17 +61,23 @@ 51.4 protected: 51.5 GCPolicyCounters* _gc_policy_counters; 51.6 51.7 - // Requires that the concrete subclass sets the alignment constraints 51.8 - // before calling. 51.9 + virtual void initialize_alignments() = 0; 51.10 virtual void initialize_flags(); 51.11 virtual void initialize_size_info(); 51.12 51.13 + DEBUG_ONLY(virtual void assert_flags();) 51.14 + DEBUG_ONLY(virtual void assert_size_info();) 51.15 + 51.16 size_t _initial_heap_byte_size; 51.17 size_t _max_heap_byte_size; 51.18 size_t _min_heap_byte_size; 51.19 51.20 - size_t _min_alignment; 51.21 - size_t _max_alignment; 51.22 + size_t _space_alignment; 51.23 + size_t _heap_alignment; 51.24 + 51.25 + // Needed to keep information if MaxHeapSize was set on the command line 51.26 + // when the flag value is aligned etc by ergonomics 51.27 + bool _max_heap_size_cmdline; 51.28 51.29 // The sizing of the heap are controlled by a sizing policy. 51.30 AdaptiveSizePolicy* _size_policy; 51.31 @@ -79,6 +85,7 @@ 51.32 // Set to true when policy wants soft refs cleared. 51.33 // Reset to false by gc after it clears all soft refs. 51.34 bool _should_clear_all_soft_refs; 51.35 + 51.36 // Set to true by the GC if the just-completed gc cleared all 51.37 // softrefs. This is set to true whenever a gc clears all softrefs, and 51.38 // set to false each time gc returns to the mutator. For example, in the 51.39 @@ -86,23 +93,20 @@ 51.40 // mem_allocate() where it returns op.result() 51.41 bool _all_soft_refs_clear; 51.42 51.43 - CollectorPolicy() : 51.44 - _min_alignment(1), 51.45 - _max_alignment(1), 51.46 - _initial_heap_byte_size(0), 51.47 - _max_heap_byte_size(0), 51.48 - _min_heap_byte_size(0), 51.49 - _size_policy(NULL), 51.50 - _should_clear_all_soft_refs(false), 51.51 - _all_soft_refs_clear(false) 51.52 - {} 51.53 + CollectorPolicy(); 51.54 51.55 public: 51.56 + virtual void initialize_all() { 51.57 + initialize_alignments(); 51.58 + initialize_flags(); 51.59 + initialize_size_info(); 51.60 + } 51.61 + 51.62 // Return maximum heap alignment that may be imposed by the policy 51.63 - static size_t compute_max_alignment(); 51.64 + static size_t compute_heap_alignment(); 51.65 51.66 - size_t min_alignment() { return _min_alignment; } 51.67 - size_t max_alignment() { return _max_alignment; } 51.68 + size_t space_alignment() { return _space_alignment; } 51.69 + size_t heap_alignment() { return _heap_alignment; } 51.70 51.71 size_t initial_heap_byte_size() { return _initial_heap_byte_size; } 51.72 size_t max_heap_byte_size() { return _max_heap_byte_size; } 51.73 @@ -151,7 +155,6 @@ 51.74 51.75 51.76 virtual BarrierSet::Name barrier_set_name() = 0; 51.77 - virtual GenRemSet::Name rem_set_name() = 0; 51.78 51.79 // Create the remembered set (to cover the given reserved region, 51.80 // allowing breaking up into at most "max_covered_regions"). 51.81 @@ -195,6 +198,9 @@ 51.82 return false; 51.83 } 51.84 51.85 + // Do any updates required to global flags that are due to heap initialization 51.86 + // changes 51.87 + virtual void post_heap_initialize() = 0; 51.88 }; 51.89 51.90 class ClearedAllSoftRefs : public StackObj { 51.91 @@ -219,6 +225,10 @@ 51.92 size_t _initial_gen0_size; 51.93 size_t _max_gen0_size; 51.94 51.95 + // _gen_alignment and _space_alignment will have the same value most of the 51.96 + // time. When using large pages they can differ. 51.97 + size_t _gen_alignment; 51.98 + 51.99 GenerationSpec **_generations; 51.100 51.101 // Return true if an allocation should be attempted in the older 51.102 @@ -229,41 +239,50 @@ 51.103 void initialize_flags(); 51.104 void initialize_size_info(); 51.105 51.106 + DEBUG_ONLY(void assert_flags();) 51.107 + DEBUG_ONLY(void assert_size_info();) 51.108 + 51.109 // Try to allocate space by expanding the heap. 51.110 virtual HeapWord* expand_heap_and_allocate(size_t size, bool is_tlab); 51.111 51.112 - // Scale the base_size by NewRation according to 51.113 + // Compute max heap alignment 51.114 + size_t compute_max_alignment(); 51.115 + 51.116 + // Scale the base_size by NewRatio according to 51.117 // result = base_size / (NewRatio + 1) 51.118 // and align by min_alignment() 51.119 size_t scale_by_NewRatio_aligned(size_t base_size); 51.120 51.121 - // Bound the value by the given maximum minus the 51.122 - // min_alignment. 51.123 + // Bound the value by the given maximum minus the min_alignment 51.124 size_t bound_minus_alignment(size_t desired_size, size_t maximum_size); 51.125 51.126 public: 51.127 + GenCollectorPolicy(); 51.128 + 51.129 // Accessors 51.130 size_t min_gen0_size() { return _min_gen0_size; } 51.131 size_t initial_gen0_size() { return _initial_gen0_size; } 51.132 size_t max_gen0_size() { return _max_gen0_size; } 51.133 + size_t gen_alignment() { return _gen_alignment; } 51.134 51.135 virtual int number_of_generations() = 0; 51.136 51.137 - virtual GenerationSpec **generations() { 51.138 + virtual GenerationSpec **generations() { 51.139 assert(_generations != NULL, "Sanity check"); 51.140 return _generations; 51.141 } 51.142 51.143 virtual GenCollectorPolicy* as_generation_policy() { return this; } 51.144 51.145 - virtual void initialize_generations() = 0; 51.146 + virtual void initialize_generations() { }; 51.147 51.148 virtual void initialize_all() { 51.149 - initialize_flags(); 51.150 - initialize_size_info(); 51.151 + CollectorPolicy::initialize_all(); 51.152 initialize_generations(); 51.153 } 51.154 51.155 + size_t young_gen_size_lower_bound(); 51.156 + 51.157 HeapWord* mem_allocate_work(size_t size, 51.158 bool is_tlab, 51.159 bool* gc_overhead_limit_was_exceeded); 51.160 @@ -274,6 +293,10 @@ 51.161 virtual void initialize_size_policy(size_t init_eden_size, 51.162 size_t init_promo_size, 51.163 size_t init_survivor_size); 51.164 + 51.165 + virtual void post_heap_initialize() { 51.166 + assert(_max_gen0_size == MaxNewSize, "Should be taken care of by initialize_size_info"); 51.167 + } 51.168 }; 51.169 51.170 // All of hotspot's current collectors are subtypes of this 51.171 @@ -290,9 +313,14 @@ 51.172 51.173 void initialize_flags(); 51.174 void initialize_size_info(); 51.175 - void initialize_generations() { ShouldNotReachHere(); } 51.176 + 51.177 + DEBUG_ONLY(void assert_flags();) 51.178 + DEBUG_ONLY(void assert_size_info();) 51.179 51.180 public: 51.181 + TwoGenerationCollectorPolicy() : GenCollectorPolicy(), _min_gen1_size(0), 51.182 + _initial_gen1_size(0), _max_gen1_size(0) {} 51.183 + 51.184 // Accessors 51.185 size_t min_gen1_size() { return _min_gen1_size; } 51.186 size_t initial_gen1_size() { return _initial_gen1_size; } 51.187 @@ -301,25 +329,25 @@ 51.188 // Inherited methods 51.189 TwoGenerationCollectorPolicy* as_two_generation_policy() { return this; } 51.190 51.191 - int number_of_generations() { return 2; } 51.192 - BarrierSet::Name barrier_set_name() { return BarrierSet::CardTableModRef; } 51.193 - GenRemSet::Name rem_set_name() { return GenRemSet::CardTable; } 51.194 + int number_of_generations() { return 2; } 51.195 + BarrierSet::Name barrier_set_name() { return BarrierSet::CardTableModRef; } 51.196 51.197 virtual CollectorPolicy::Name kind() { 51.198 return CollectorPolicy::TwoGenerationCollectorPolicyKind; 51.199 } 51.200 51.201 - // Returns true is gen0 sizes were adjusted 51.202 + // Returns true if gen0 sizes were adjusted 51.203 bool adjust_gen0_sizes(size_t* gen0_size_ptr, size_t* gen1_size_ptr, 51.204 - const size_t heap_size, const size_t min_gen1_size); 51.205 + const size_t heap_size); 51.206 }; 51.207 51.208 class MarkSweepPolicy : public TwoGenerationCollectorPolicy { 51.209 protected: 51.210 + void initialize_alignments(); 51.211 void initialize_generations(); 51.212 51.213 public: 51.214 - MarkSweepPolicy(); 51.215 + MarkSweepPolicy() {} 51.216 51.217 MarkSweepPolicy* as_mark_sweep_policy() { return this; } 51.218
52.1 --- a/src/share/vm/memory/defNewGeneration.cpp Wed Nov 20 11:08:09 2013 -0800 52.2 +++ b/src/share/vm/memory/defNewGeneration.cpp Thu Nov 21 12:30:35 2013 -0800 52.3 @@ -204,7 +204,7 @@ 52.4 // Compute the maximum eden and survivor space sizes. These sizes 52.5 // are computed assuming the entire reserved space is committed. 52.6 // These values are exported as performance counters. 52.7 - uintx alignment = GenCollectedHeap::heap()->collector_policy()->min_alignment(); 52.8 + uintx alignment = GenCollectedHeap::heap()->collector_policy()->space_alignment(); 52.9 uintx size = _virtual_space.reserved_size(); 52.10 _max_survivor_size = compute_survivor_size(size, alignment); 52.11 _max_eden_size = size - (2*_max_survivor_size); 52.12 @@ -235,7 +235,7 @@ 52.13 bool clear_space, 52.14 bool mangle_space) { 52.15 uintx alignment = 52.16 - GenCollectedHeap::heap()->collector_policy()->min_alignment(); 52.17 + GenCollectedHeap::heap()->collector_policy()->space_alignment(); 52.18 52.19 // If the spaces are being cleared (only done at heap initialization 52.20 // currently), the survivor spaces need not be empty. 52.21 @@ -473,7 +473,7 @@ 52.22 } 52.23 52.24 size_t DefNewGeneration::max_capacity() const { 52.25 - const size_t alignment = GenCollectedHeap::heap()->collector_policy()->min_alignment(); 52.26 + const size_t alignment = GenCollectedHeap::heap()->collector_policy()->space_alignment(); 52.27 const size_t reserved_bytes = reserved().byte_size(); 52.28 return reserved_bytes - compute_survivor_size(reserved_bytes, alignment); 52.29 }
53.1 --- a/src/share/vm/memory/genCollectedHeap.cpp Wed Nov 20 11:08:09 2013 -0800 53.2 +++ b/src/share/vm/memory/genCollectedHeap.cpp Thu Nov 21 12:30:35 2013 -0800 53.3 @@ -111,7 +111,7 @@ 53.4 int n_covered_regions = 0; 53.5 ReservedSpace heap_rs; 53.6 53.7 - size_t heap_alignment = collector_policy()->max_alignment(); 53.8 + size_t heap_alignment = collector_policy()->heap_alignment(); 53.9 53.10 heap_address = allocate(heap_alignment, &total_reserved, 53.11 &n_covered_regions, &heap_rs); 53.12 @@ -1053,12 +1053,6 @@ 53.13 } 53.14 } 53.15 53.16 -void GenCollectedHeap::compute_new_generation_sizes(int collectedGen) { 53.17 - for (int i = 0; i <= collectedGen; i++) { 53.18 - _gens[i]->compute_new_size(); 53.19 - } 53.20 -} 53.21 - 53.22 GenCollectedHeap* GenCollectedHeap::heap() { 53.23 assert(_gch != NULL, "Uninitialized access to GenCollectedHeap::heap()"); 53.24 assert(_gch->kind() == CollectedHeap::GenCollectedHeap, "not a generational heap");
54.1 --- a/src/share/vm/memory/genCollectedHeap.hpp Wed Nov 20 11:08:09 2013 -0800 54.2 +++ b/src/share/vm/memory/genCollectedHeap.hpp Thu Nov 21 12:30:35 2013 -0800 54.3 @@ -86,10 +86,6 @@ 54.4 NOT_PRODUCT(static size_t _skip_header_HeapWords;) 54.5 54.6 protected: 54.7 - // Directs each generation up to and including "collectedGen" to recompute 54.8 - // its desired size. 54.9 - void compute_new_generation_sizes(int collectedGen); 54.10 - 54.11 // Helper functions for allocation 54.12 HeapWord* attempt_allocation(size_t size, 54.13 bool is_tlab,
55.1 --- a/src/share/vm/memory/metaspace.cpp Wed Nov 20 11:08:09 2013 -0800 55.2 +++ b/src/share/vm/memory/metaspace.cpp Thu Nov 21 12:30:35 2013 -0800 55.3 @@ -2869,7 +2869,7 @@ 55.4 55.5 Universe::set_narrow_klass_base(lower_base); 55.6 55.7 - if ((uint64_t)(higher_address - lower_base) < UnscaledClassSpaceMax) { 55.8 + if ((uint64_t)(higher_address - lower_base) <= UnscaledClassSpaceMax) { 55.9 Universe::set_narrow_klass_shift(0); 55.10 } else { 55.11 assert(!UseSharedSpaces, "Cannot shift with UseSharedSpaces"); 55.12 @@ -2885,7 +2885,7 @@ 55.13 address lower_base = MIN2((address)metaspace_base, cds_base); 55.14 address higher_address = MAX2((address)(cds_base + FileMapInfo::shared_spaces_size()), 55.15 (address)(metaspace_base + compressed_class_space_size())); 55.16 - return ((uint64_t)(higher_address - lower_base) < UnscaledClassSpaceMax); 55.17 + return ((uint64_t)(higher_address - lower_base) <= UnscaledClassSpaceMax); 55.18 } 55.19 55.20 // Try to allocate the metaspace at the requested addr. 55.21 @@ -2975,11 +2975,6 @@ 55.22 55.23 #endif 55.24 55.25 -// Align down. If the aligning result in 0, return 'alignment'. 55.26 -static size_t restricted_align_down(size_t size, size_t alignment) { 55.27 - return MAX2(alignment, align_size_down_(size, alignment)); 55.28 -} 55.29 - 55.30 void Metaspace::ergo_initialize() { 55.31 if (DumpSharedSpaces) { 55.32 // Using large pages when dumping the shared archive is currently not implemented. 55.33 @@ -3002,13 +2997,13 @@ 55.34 // Ideally, we would be able to set the default value of MaxMetaspaceSize in 55.35 // globals.hpp to the aligned value, but this is not possible, since the 55.36 // alignment depends on other flags being parsed. 55.37 - MaxMetaspaceSize = restricted_align_down(MaxMetaspaceSize, _reserve_alignment); 55.38 + MaxMetaspaceSize = align_size_down_bounded(MaxMetaspaceSize, _reserve_alignment); 55.39 55.40 if (MetaspaceSize > MaxMetaspaceSize) { 55.41 MetaspaceSize = MaxMetaspaceSize; 55.42 } 55.43 55.44 - MetaspaceSize = restricted_align_down(MetaspaceSize, _commit_alignment); 55.45 + MetaspaceSize = align_size_down_bounded(MetaspaceSize, _commit_alignment); 55.46 55.47 assert(MetaspaceSize <= MaxMetaspaceSize, "MetaspaceSize should be limited by MaxMetaspaceSize"); 55.48 55.49 @@ -3016,10 +3011,10 @@ 55.50 vm_exit_during_initialization("Too small initial Metaspace size"); 55.51 } 55.52 55.53 - MinMetaspaceExpansion = restricted_align_down(MinMetaspaceExpansion, _commit_alignment); 55.54 - MaxMetaspaceExpansion = restricted_align_down(MaxMetaspaceExpansion, _commit_alignment); 55.55 - 55.56 - CompressedClassSpaceSize = restricted_align_down(CompressedClassSpaceSize, _reserve_alignment); 55.57 + MinMetaspaceExpansion = align_size_down_bounded(MinMetaspaceExpansion, _commit_alignment); 55.58 + MaxMetaspaceExpansion = align_size_down_bounded(MaxMetaspaceExpansion, _commit_alignment); 55.59 + 55.60 + CompressedClassSpaceSize = align_size_down_bounded(CompressedClassSpaceSize, _reserve_alignment); 55.61 set_compressed_class_space_size(CompressedClassSpaceSize); 55.62 } 55.63
56.1 --- a/src/share/vm/memory/sharedHeap.cpp Wed Nov 20 11:08:09 2013 -0800 56.2 +++ b/src/share/vm/memory/sharedHeap.cpp Thu Nov 21 12:30:35 2013 -0800 56.3 @@ -247,6 +247,7 @@ 56.4 } 56.5 56.6 void SharedHeap::post_initialize() { 56.7 + CollectedHeap::post_initialize(); 56.8 ref_processing_init(); 56.9 } 56.10
57.1 --- a/src/share/vm/memory/universe.cpp Wed Nov 20 11:08:09 2013 -0800 57.2 +++ b/src/share/vm/memory/universe.cpp Thu Nov 21 12:30:35 2013 -0800 57.3 @@ -785,6 +785,7 @@ 57.4 } else if (UseG1GC) { 57.5 #if INCLUDE_ALL_GCS 57.6 G1CollectorPolicy* g1p = new G1CollectorPolicy(); 57.7 + g1p->initialize_all(); 57.8 G1CollectedHeap* g1h = new G1CollectedHeap(g1p); 57.9 Universe::_collectedHeap = g1h; 57.10 #else // INCLUDE_ALL_GCS 57.11 @@ -809,6 +810,7 @@ 57.12 } else { // default old generation 57.13 gc_policy = new MarkSweepPolicy(); 57.14 } 57.15 + gc_policy->initialize_all(); 57.16 57.17 Universe::_collectedHeap = new GenCollectedHeap(gc_policy); 57.18 } 57.19 @@ -1046,7 +1048,7 @@ 57.20 Universe::_virtual_machine_error_instance = 57.21 InstanceKlass::cast(k)->allocate_instance(CHECK_false); 57.22 57.23 - Universe::_vm_exception = InstanceKlass::cast(k)->allocate_instance(CHECK_false); 57.24 + Universe::_vm_exception = InstanceKlass::cast(k)->allocate_instance(CHECK_false); 57.25 57.26 if (!DumpSharedSpaces) { 57.27 // These are the only Java fields that are currently set during shared space dumping.
58.1 --- a/src/share/vm/oops/cpCache.cpp Wed Nov 20 11:08:09 2013 -0800 58.2 +++ b/src/share/vm/oops/cpCache.cpp Thu Nov 21 12:30:35 2013 -0800 58.3 @@ -554,24 +554,37 @@ 58.4 // Implementation of ConstantPoolCache 58.5 58.6 ConstantPoolCache* ConstantPoolCache::allocate(ClassLoaderData* loader_data, 58.7 - int length, 58.8 const intStack& index_map, 58.9 + const intStack& invokedynamic_index_map, 58.10 const intStack& invokedynamic_map, TRAPS) { 58.11 + 58.12 + const int length = index_map.length() + invokedynamic_index_map.length(); 58.13 int size = ConstantPoolCache::size(length); 58.14 58.15 return new (loader_data, size, false, MetaspaceObj::ConstantPoolCacheType, THREAD) 58.16 - ConstantPoolCache(length, index_map, invokedynamic_map); 58.17 + ConstantPoolCache(length, index_map, invokedynamic_index_map, invokedynamic_map); 58.18 } 58.19 58.20 void ConstantPoolCache::initialize(const intArray& inverse_index_map, 58.21 + const intArray& invokedynamic_inverse_index_map, 58.22 const intArray& invokedynamic_references_map) { 58.23 - assert(inverse_index_map.length() == length(), "inverse index map must have same length as cache"); 58.24 - for (int i = 0; i < length(); i++) { 58.25 + for (int i = 0; i < inverse_index_map.length(); i++) { 58.26 ConstantPoolCacheEntry* e = entry_at(i); 58.27 int original_index = inverse_index_map[i]; 58.28 e->initialize_entry(original_index); 58.29 assert(entry_at(i) == e, "sanity"); 58.30 } 58.31 + 58.32 + // Append invokedynamic entries at the end 58.33 + int invokedynamic_offset = inverse_index_map.length(); 58.34 + for (int i = 0; i < invokedynamic_inverse_index_map.length(); i++) { 58.35 + int offset = i + invokedynamic_offset; 58.36 + ConstantPoolCacheEntry* e = entry_at(offset); 58.37 + int original_index = invokedynamic_inverse_index_map[i]; 58.38 + e->initialize_entry(original_index); 58.39 + assert(entry_at(offset) == e, "sanity"); 58.40 + } 58.41 + 58.42 for (int ref = 0; ref < invokedynamic_references_map.length(); ref++) { 58.43 const int cpci = invokedynamic_references_map[ref]; 58.44 if (cpci >= 0) {
59.1 --- a/src/share/vm/oops/cpCache.hpp Wed Nov 20 11:08:09 2013 -0800 59.2 +++ b/src/share/vm/oops/cpCache.hpp Thu Nov 21 12:30:35 2013 -0800 59.3 @@ -31,6 +31,10 @@ 59.4 59.5 class PSPromotionManager; 59.6 59.7 +// The ConstantPoolCache is not a cache! It is the resolution table that the 59.8 +// interpreter uses to avoid going into the runtime and a way to access resolved 59.9 +// values. 59.10 + 59.11 // A ConstantPoolCacheEntry describes an individual entry of the constant 59.12 // pool cache. There's 2 principal kinds of entries: field entries for in- 59.13 // stance & static field access, and method entries for invokes. Some of 59.14 @@ -392,26 +396,33 @@ 59.15 friend class MetadataFactory; 59.16 private: 59.17 int _length; 59.18 - ConstantPool* _constant_pool; // the corresponding constant pool 59.19 + ConstantPool* _constant_pool; // the corresponding constant pool 59.20 59.21 // Sizing 59.22 debug_only(friend class ClassVerifier;) 59.23 59.24 // Constructor 59.25 - ConstantPoolCache(int length, const intStack& inverse_index_map, 59.26 + ConstantPoolCache(int length, 59.27 + const intStack& inverse_index_map, 59.28 + const intStack& invokedynamic_inverse_index_map, 59.29 const intStack& invokedynamic_references_map) : 59.30 - _length(length), _constant_pool(NULL) { 59.31 - initialize(inverse_index_map, invokedynamic_references_map); 59.32 + _length(length), 59.33 + _constant_pool(NULL) { 59.34 + initialize(inverse_index_map, invokedynamic_inverse_index_map, 59.35 + invokedynamic_references_map); 59.36 for (int i = 0; i < length; i++) { 59.37 assert(entry_at(i)->is_f1_null(), "Failed to clear?"); 59.38 } 59.39 } 59.40 59.41 // Initialization 59.42 - void initialize(const intArray& inverse_index_map, const intArray& invokedynamic_references_map); 59.43 + void initialize(const intArray& inverse_index_map, 59.44 + const intArray& invokedynamic_inverse_index_map, 59.45 + const intArray& invokedynamic_references_map); 59.46 public: 59.47 - static ConstantPoolCache* allocate(ClassLoaderData* loader_data, int length, 59.48 - const intStack& inverse_index_map, 59.49 + static ConstantPoolCache* allocate(ClassLoaderData* loader_data, 59.50 + const intStack& cp_cache_map, 59.51 + const intStack& invokedynamic_cp_cache_map, 59.52 const intStack& invokedynamic_references_map, TRAPS); 59.53 bool is_constantPoolCache() const { return true; } 59.54
60.1 --- a/src/share/vm/oops/instanceKlass.cpp Wed Nov 20 11:08:09 2013 -0800 60.2 +++ b/src/share/vm/oops/instanceKlass.cpp Thu Nov 21 12:30:35 2013 -0800 60.3 @@ -2211,6 +2211,10 @@ 60.4 data = mdo->next_data(data)) { 60.5 data->clean_weak_klass_links(is_alive); 60.6 } 60.7 + ParametersTypeData* parameters = mdo->parameters_type_data(); 60.8 + if (parameters != NULL) { 60.9 + parameters->clean_weak_klass_links(is_alive); 60.10 + } 60.11 } 60.12 } 60.13 }
61.1 --- a/src/share/vm/oops/klassVtable.cpp Wed Nov 20 11:08:09 2013 -0800 61.2 +++ b/src/share/vm/oops/klassVtable.cpp Thu Nov 21 12:30:35 2013 -0800 61.3 @@ -86,7 +86,11 @@ 61.4 get_mirandas(&new_mirandas, all_mirandas, super, methods, NULL, local_interfaces); 61.5 *num_new_mirandas = new_mirandas.length(); 61.6 61.7 - vtable_length += *num_new_mirandas * vtableEntry::size(); 61.8 + // Interfaces do not need interface methods in their vtables 61.9 + // This includes miranda methods and during later processing, default methods 61.10 + if (!class_flags.is_interface()) { 61.11 + vtable_length += *num_new_mirandas * vtableEntry::size(); 61.12 + } 61.13 61.14 if (Universe::is_bootstrapping() && vtable_length == 0) { 61.15 // array classes don't have their superclass set correctly during 61.16 @@ -224,7 +228,11 @@ 61.17 } 61.18 61.19 // add miranda methods; it will also return the updated initialized 61.20 - initialized = fill_in_mirandas(initialized); 61.21 + // Interfaces do not need interface methods in their vtables 61.22 + // This includes miranda methods and during later processing, default methods 61.23 + if (!ik()->is_interface()) { 61.24 + initialized = fill_in_mirandas(initialized); 61.25 + } 61.26 61.27 // In class hierarchies where the accessibility is not increasing (i.e., going from private -> 61.28 // package_private -> public/protected), the vtable might actually be smaller than our initial 61.29 @@ -264,12 +272,12 @@ 61.30 _klass->internal_name(), sig, vtable_index); 61.31 super_method->access_flags().print_on(tty); 61.32 if (super_method->is_default_method()) { 61.33 - tty->print("default"); 61.34 + tty->print("default "); 61.35 } 61.36 tty->print("overriders flags: "); 61.37 target_method->access_flags().print_on(tty); 61.38 if (target_method->is_default_method()) { 61.39 - tty->print("default"); 61.40 + tty->print("default "); 61.41 } 61.42 } 61.43 #endif /*PRODUCT*/ 61.44 @@ -332,9 +340,15 @@ 61.45 // An interface never allocates new vtable slots, only inherits old ones. 61.46 // This method will either be assigned its own itable index later, 61.47 // or be assigned an inherited vtable index in the loop below. 61.48 - // default methods store their vtable indices in the inheritors default_vtable_indices 61.49 - assert (default_index == -1, "interfaces don't store resolved default methods"); 61.50 - target_method()->set_vtable_index(Method::pending_itable_index); 61.51 + // default methods inherited by classes store their vtable indices 61.52 + // in the inheritor's default_vtable_indices 61.53 + // default methods inherited by interfaces may already have a 61.54 + // valid itable index, if so, don't change it 61.55 + // overpass methods in an interface will be assigned an itable index later 61.56 + // by an inheriting class 61.57 + if (!is_default || !target_method()->has_itable_index()) { 61.58 + target_method()->set_vtable_index(Method::pending_itable_index); 61.59 + } 61.60 } 61.61 61.62 // we need a new entry if there is no superclass 61.63 @@ -441,7 +455,7 @@ 61.64 target_klass->internal_name(), sig, i); 61.65 super_method->access_flags().print_on(tty); 61.66 if (super_method->is_default_method()) { 61.67 - tty->print("default"); 61.68 + tty->print("default "); 61.69 } 61.70 if (super_method->is_overpass()) { 61.71 tty->print("overpass"); 61.72 @@ -449,7 +463,7 @@ 61.73 tty->print("overriders flags: "); 61.74 target_method->access_flags().print_on(tty); 61.75 if (target_method->is_default_method()) { 61.76 - tty->print("default"); 61.77 + tty->print("default "); 61.78 } 61.79 if (target_method->is_overpass()) { 61.80 tty->print("overpass"); 61.81 @@ -468,7 +482,7 @@ 61.82 target_klass->internal_name(), sig,i); 61.83 super_method->access_flags().print_on(tty); 61.84 if (super_method->is_default_method()) { 61.85 - tty->print("default"); 61.86 + tty->print("default "); 61.87 } 61.88 if (super_method->is_overpass()) { 61.89 tty->print("overpass"); 61.90 @@ -476,7 +490,7 @@ 61.91 tty->print("overriders flags: "); 61.92 target_method->access_flags().print_on(tty); 61.93 if (target_method->is_default_method()) { 61.94 - tty->print("default"); 61.95 + tty->print("default "); 61.96 } 61.97 if (target_method->is_overpass()) { 61.98 tty->print("overpass"); 61.99 @@ -494,8 +508,18 @@ 61.100 #ifndef PRODUCT 61.101 if (PrintVtables && Verbose) { 61.102 ResourceMark rm; 61.103 - tty->print_cr("adding %s::%s at index %d", _klass->internal_name(), 61.104 - (m != NULL) ? m->name()->as_C_string() : "<NULL>", index); 61.105 + const char* sig = (m != NULL) ? m->name_and_sig_as_C_string() : "<NULL>"; 61.106 + tty->print("adding %s at index %d, flags: ", sig, index); 61.107 + if (m != NULL) { 61.108 + m->access_flags().print_on(tty); 61.109 + if (m->is_default_method()) { 61.110 + tty->print("default "); 61.111 + } 61.112 + if (m->is_overpass()) { 61.113 + tty->print("overpass"); 61.114 + } 61.115 + } 61.116 + tty->cr(); 61.117 } 61.118 #endif 61.119 table()[index].set(m); 61.120 @@ -631,8 +655,10 @@ 61.121 if (mhk->is_interface()) { 61.122 assert(m->is_public(), "should be public"); 61.123 assert(ik()->implements_interface(method_holder) , "this class should implement the interface"); 61.124 - assert(is_miranda(m, ik()->methods(), ik()->default_methods(), ik()->super()), "should be a miranda_method"); 61.125 - return true; 61.126 + // the search could find a miranda or a default method 61.127 + if (is_miranda(m, ik()->methods(), ik()->default_methods(), ik()->super())) { 61.128 + return true; 61.129 + } 61.130 } 61.131 return false; 61.132 } 61.133 @@ -644,9 +670,10 @@ 61.134 // the caller must make sure that the method belongs to an interface implemented by the class 61.135 // Miranda methods only include public interface instance methods 61.136 // Not private methods, not static methods, not default == concrete abstract 61.137 +// Miranda methods also do not include overpass methods in interfaces 61.138 bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods, 61.139 Array<Method*>* default_methods, Klass* super) { 61.140 - if (m->is_static() || m->is_private()) { 61.141 + if (m->is_static() || m->is_private() || m->is_overpass()) { 61.142 return false; 61.143 } 61.144 Symbol* name = m->name(); 61.145 @@ -744,6 +771,8 @@ 61.146 // Discover miranda methods ("miranda" = "interface abstract, no binding"), 61.147 // and append them into the vtable starting at index initialized, 61.148 // return the new value of initialized. 61.149 +// Miranda methods use vtable entries, but do not get assigned a vtable_index 61.150 +// The vtable_index is discovered by searching from the end of the vtable 61.151 int klassVtable::fill_in_mirandas(int initialized) { 61.152 GrowableArray<Method*> mirandas(20); 61.153 get_mirandas(&mirandas, NULL, ik()->super(), ik()->methods(), 61.154 @@ -758,7 +787,7 @@ 61.155 sig, initialized); 61.156 meth->access_flags().print_on(tty); 61.157 if (meth->is_default_method()) { 61.158 - tty->print("default"); 61.159 + tty->print("default "); 61.160 } 61.161 tty->cr(); 61.162 } 61.163 @@ -858,7 +887,7 @@ 61.164 tty->print(" (%5d) ", i); 61.165 m->access_flags().print_on(tty); 61.166 if (m->is_default_method()) { 61.167 - tty->print("default"); 61.168 + tty->print("default "); 61.169 } 61.170 if (m->is_overpass()) { 61.171 tty->print("overpass"); 61.172 @@ -977,6 +1006,25 @@ 61.173 if (interface_method_needs_itable_index(m)) { 61.174 assert(!m->is_final_method(), "no final interface methods"); 61.175 // If m is already assigned a vtable index, do not disturb it. 61.176 + if (TraceItables && Verbose) { 61.177 + ResourceMark rm; 61.178 + const char* sig = (m != NULL) ? m->name_and_sig_as_C_string() : "<NULL>"; 61.179 + if (m->has_vtable_index()) { 61.180 + tty->print("itable index %d for method: %s, flags: ", m->vtable_index(), sig); 61.181 + } else { 61.182 + tty->print("itable index %d for method: %s, flags: ", ime_num, sig); 61.183 + } 61.184 + if (m != NULL) { 61.185 + m->access_flags().print_on(tty); 61.186 + if (m->is_default_method()) { 61.187 + tty->print("default "); 61.188 + } 61.189 + if (m->is_overpass()) { 61.190 + tty->print("overpass"); 61.191 + } 61.192 + } 61.193 + tty->cr(); 61.194 + } 61.195 if (!m->has_vtable_index()) { 61.196 assert(m->vtable_index() == Method::pending_itable_index, "set by initialize_vtable"); 61.197 m->set_itable_index(ime_num); 61.198 @@ -1079,7 +1127,7 @@ 61.199 tty->print("target_method flags: "); 61.200 target()->access_flags().print_on(tty); 61.201 if (target()->is_default_method()) { 61.202 - tty->print("default"); 61.203 + tty->print("default "); 61.204 } 61.205 tty->cr(); 61.206 } 61.207 @@ -1158,7 +1206,7 @@ 61.208 tty->print(" (%5d) ", i); 61.209 m->access_flags().print_on(tty); 61.210 if (m->is_default_method()) { 61.211 - tty->print("default"); 61.212 + tty->print("default "); 61.213 } 61.214 tty->print(" -- "); 61.215 m->print_name(tty);
62.1 --- a/src/share/vm/oops/methodData.cpp Wed Nov 20 11:08:09 2013 -0800 62.2 +++ b/src/share/vm/oops/methodData.cpp Thu Nov 21 12:30:35 2013 -0800 62.3 @@ -275,23 +275,23 @@ 62.4 } 62.5 62.6 bool TypeEntries::is_loader_alive(BoolObjectClosure* is_alive_cl, intptr_t p) { 62.7 - return !is_type_none(p) && 62.8 - !((Klass*)klass_part(p))->is_loader_alive(is_alive_cl); 62.9 + Klass* k = (Klass*)klass_part(p); 62.10 + return k != NULL && k->is_loader_alive(is_alive_cl); 62.11 } 62.12 62.13 void TypeStackSlotEntries::clean_weak_klass_links(BoolObjectClosure* is_alive_cl) { 62.14 for (int i = 0; i < _number_of_entries; i++) { 62.15 intptr_t p = type(i); 62.16 - if (is_loader_alive(is_alive_cl, p)) { 62.17 - set_type(i, type_none()); 62.18 + if (!is_loader_alive(is_alive_cl, p)) { 62.19 + set_type(i, with_status((Klass*)NULL, p)); 62.20 } 62.21 } 62.22 } 62.23 62.24 void ReturnTypeEntry::clean_weak_klass_links(BoolObjectClosure* is_alive_cl) { 62.25 intptr_t p = type(); 62.26 - if (is_loader_alive(is_alive_cl, p)) { 62.27 - set_type(type_none()); 62.28 + if (!is_loader_alive(is_alive_cl, p)) { 62.29 + set_type(with_status((Klass*)NULL, p)); 62.30 } 62.31 } 62.32
63.1 --- a/src/share/vm/oops/methodData.hpp Wed Nov 20 11:08:09 2013 -0800 63.2 +++ b/src/share/vm/oops/methodData.hpp Thu Nov 21 12:30:35 2013 -0800 63.3 @@ -777,7 +777,6 @@ 63.4 // recorded type: cell without bit 0 and 1 63.5 static intptr_t klass_part(intptr_t v) { 63.6 intptr_t r = v & type_klass_mask; 63.7 - assert (r != 0, "invalid"); 63.8 return r; 63.9 } 63.10 63.11 @@ -785,7 +784,9 @@ 63.12 static Klass* valid_klass(intptr_t k) { 63.13 if (!is_type_none(k) && 63.14 !is_type_unknown(k)) { 63.15 - return (Klass*)klass_part(k); 63.16 + Klass* res = (Klass*)klass_part(k); 63.17 + assert(res != NULL, "invalid"); 63.18 + return res; 63.19 } else { 63.20 return NULL; 63.21 }
64.1 --- a/src/share/vm/opto/bytecodeInfo.cpp Wed Nov 20 11:08:09 2013 -0800 64.2 +++ b/src/share/vm/opto/bytecodeInfo.cpp Thu Nov 21 12:30:35 2013 -0800 64.3 @@ -389,6 +389,10 @@ 64.4 return false; 64.5 } 64.6 if (inline_level() > _max_inline_level) { 64.7 + if (callee_method->force_inline() && inline_level() > MaxForceInlineLevel) { 64.8 + set_msg("MaxForceInlineLevel"); 64.9 + return false; 64.10 + } 64.11 if (!callee_method->force_inline() || !IncrementalInline) { 64.12 set_msg("inlining too deep"); 64.13 return false;
65.1 --- a/src/share/vm/opto/callGenerator.cpp Wed Nov 20 11:08:09 2013 -0800 65.2 +++ b/src/share/vm/opto/callGenerator.cpp Thu Nov 21 12:30:35 2013 -0800 65.3 @@ -776,7 +776,7 @@ 65.4 guarantee(!target->is_method_handle_intrinsic(), "should not happen"); // XXX remove 65.5 const int vtable_index = Method::invalid_vtable_index; 65.6 CallGenerator* cg = C->call_generator(target, vtable_index, false, jvms, true, PROB_ALWAYS, NULL, true, true); 65.7 - assert(!cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here"); 65.8 + assert(cg == NULL || !cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here"); 65.9 if (cg != NULL && cg->is_inline()) 65.10 return cg; 65.11 } 65.12 @@ -846,7 +846,7 @@ 65.13 } 65.14 65.15 CallGenerator* cg = C->call_generator(target, vtable_index, call_does_dispatch, jvms, true, PROB_ALWAYS, speculative_receiver_type, true, true); 65.16 - assert(!cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here"); 65.17 + assert(cg == NULL || !cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here"); 65.18 if (cg != NULL && cg->is_inline()) 65.19 return cg; 65.20 }
66.1 --- a/src/share/vm/opto/compile.cpp Wed Nov 20 11:08:09 2013 -0800 66.2 +++ b/src/share/vm/opto/compile.cpp Thu Nov 21 12:30:35 2013 -0800 66.3 @@ -851,6 +851,7 @@ 66.4 } 66.5 #endif 66.6 66.7 + NOT_PRODUCT( verify_barriers(); ) 66.8 // Now that we know the size of all the monitors we can add a fixed slot 66.9 // for the original deopt pc. 66.10 66.11 @@ -3027,12 +3028,17 @@ 66.12 // Phi nodes shouldn't be moved. They would only match below if they 66.13 // had the same control as the MathExactNode. The only time that 66.14 // would happen is if the Phi is also an input to the MathExact 66.15 - if (!out->is_Phi()) { 66.16 - if (out->in(0) == NULL) { 66.17 - out->set_req(0, non_throwing); 66.18 - } else if (out->in(0) == ctrl) { 66.19 - out->set_req(0, non_throwing); 66.20 - } 66.21 + // 66.22 + // Cmp nodes shouldn't have control set at all. 66.23 + if (out->is_Phi() || 66.24 + out->is_Cmp()) { 66.25 + continue; 66.26 + } 66.27 + 66.28 + if (out->in(0) == NULL) { 66.29 + out->set_req(0, non_throwing); 66.30 + } else if (out->in(0) == ctrl) { 66.31 + out->set_req(0, non_throwing); 66.32 } 66.33 } 66.34 } 66.35 @@ -3377,6 +3383,72 @@ 66.36 } 66.37 } 66.38 } 66.39 + 66.40 +// Verify GC barriers consistency 66.41 +// Currently supported: 66.42 +// - G1 pre-barriers (see GraphKit::g1_write_barrier_pre()) 66.43 +void Compile::verify_barriers() { 66.44 + if (UseG1GC) { 66.45 + // Verify G1 pre-barriers 66.46 + const int marking_offset = in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_active()); 66.47 + 66.48 + ResourceArea *area = Thread::current()->resource_area(); 66.49 + Unique_Node_List visited(area); 66.50 + Node_List worklist(area); 66.51 + // We're going to walk control flow backwards starting from the Root 66.52 + worklist.push(_root); 66.53 + while (worklist.size() > 0) { 66.54 + Node* x = worklist.pop(); 66.55 + if (x == NULL || x == top()) continue; 66.56 + if (visited.member(x)) { 66.57 + continue; 66.58 + } else { 66.59 + visited.push(x); 66.60 + } 66.61 + 66.62 + if (x->is_Region()) { 66.63 + for (uint i = 1; i < x->req(); i++) { 66.64 + worklist.push(x->in(i)); 66.65 + } 66.66 + } else { 66.67 + worklist.push(x->in(0)); 66.68 + // We are looking for the pattern: 66.69 + // /->ThreadLocal 66.70 + // If->Bool->CmpI->LoadB->AddP->ConL(marking_offset) 66.71 + // \->ConI(0) 66.72 + // We want to verify that the If and the LoadB have the same control 66.73 + // See GraphKit::g1_write_barrier_pre() 66.74 + if (x->is_If()) { 66.75 + IfNode *iff = x->as_If(); 66.76 + if (iff->in(1)->is_Bool() && iff->in(1)->in(1)->is_Cmp()) { 66.77 + CmpNode *cmp = iff->in(1)->in(1)->as_Cmp(); 66.78 + if (cmp->Opcode() == Op_CmpI && cmp->in(2)->is_Con() && cmp->in(2)->bottom_type()->is_int()->get_con() == 0 66.79 + && cmp->in(1)->is_Load()) { 66.80 + LoadNode* load = cmp->in(1)->as_Load(); 66.81 + if (load->Opcode() == Op_LoadB && load->in(2)->is_AddP() && load->in(2)->in(2)->Opcode() == Op_ThreadLocal 66.82 + && load->in(2)->in(3)->is_Con() 66.83 + && load->in(2)->in(3)->bottom_type()->is_intptr_t()->get_con() == marking_offset) { 66.84 + 66.85 + Node* if_ctrl = iff->in(0); 66.86 + Node* load_ctrl = load->in(0); 66.87 + 66.88 + if (if_ctrl != load_ctrl) { 66.89 + // Skip possible CProj->NeverBranch in infinite loops 66.90 + if ((if_ctrl->is_Proj() && if_ctrl->Opcode() == Op_CProj) 66.91 + && (if_ctrl->in(0)->is_MultiBranch() && if_ctrl->in(0)->Opcode() == Op_NeverBranch)) { 66.92 + if_ctrl = if_ctrl->in(0)->in(0); 66.93 + } 66.94 + } 66.95 + assert(load_ctrl != NULL && if_ctrl == load_ctrl, "controls must match"); 66.96 + } 66.97 + } 66.98 + } 66.99 + } 66.100 + } 66.101 + } 66.102 + } 66.103 +} 66.104 + 66.105 #endif 66.106 66.107 // The Compile object keeps track of failure reasons separately from the ciEnv.
67.1 --- a/src/share/vm/opto/compile.hpp Wed Nov 20 11:08:09 2013 -0800 67.2 +++ b/src/share/vm/opto/compile.hpp Thu Nov 21 12:30:35 2013 -0800 67.3 @@ -1148,6 +1148,9 @@ 67.4 // graph is strongly connected from root in both directions. 67.5 void verify_graph_edges(bool no_dead_code = false) PRODUCT_RETURN; 67.6 67.7 + // Verify GC barrier patterns 67.8 + void verify_barriers() PRODUCT_RETURN; 67.9 + 67.10 // End-of-run dumps. 67.11 static void print_statistics() PRODUCT_RETURN; 67.12
68.1 --- a/src/share/vm/opto/loopTransform.cpp Wed Nov 20 11:08:09 2013 -0800 68.2 +++ b/src/share/vm/opto/loopTransform.cpp Thu Nov 21 12:30:35 2013 -0800 68.3 @@ -1964,7 +1964,7 @@ 68.4 // Find loads off the surviving projection; remove their control edge 68.5 for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) { 68.6 Node* cd = dp->fast_out(i); // Control-dependent node 68.7 - if( cd->is_Load() ) { // Loads can now float around in the loop 68.8 + if (cd->is_Load() && cd->depends_only_on_test()) { // Loads can now float around in the loop 68.9 // Allow the load to float around in the loop, or before it 68.10 // but NOT before the pre-loop. 68.11 _igvn.replace_input_of(cd, 0, ctrl); // ctrl, not NULL
69.1 --- a/src/share/vm/opto/loopopts.cpp Wed Nov 20 11:08:09 2013 -0800 69.2 +++ b/src/share/vm/opto/loopopts.cpp Thu Nov 21 12:30:35 2013 -0800 69.3 @@ -42,6 +42,13 @@ 69.4 // so disable this for now 69.5 return NULL; 69.6 } 69.7 + 69.8 + if (n->is_MathExact()) { 69.9 + // MathExact has projections that are not correctly handled in the code 69.10 + // below. 69.11 + return NULL; 69.12 + } 69.13 + 69.14 int wins = 0; 69.15 assert(!n->is_CFG(), ""); 69.16 assert(region->is_Region(), "");
70.1 --- a/src/share/vm/opto/matcher.cpp Wed Nov 20 11:08:09 2013 -0800 70.2 +++ b/src/share/vm/opto/matcher.cpp Thu Nov 21 12:30:35 2013 -0800 70.3 @@ -467,17 +467,17 @@ 70.4 C->FIRST_STACK_mask().Clear(); 70.5 70.6 // Add in the incoming argument area 70.7 - OptoReg::Name init = OptoReg::add(_old_SP, C->out_preserve_stack_slots()); 70.8 - for (i = init; i < _in_arg_limit; i = OptoReg::add(i,1)) 70.9 + OptoReg::Name init_in = OptoReg::add(_old_SP, C->out_preserve_stack_slots()); 70.10 + for (i = init_in; i < _in_arg_limit; i = OptoReg::add(i,1)) { 70.11 C->FIRST_STACK_mask().Insert(i); 70.12 - 70.13 + } 70.14 // Add in all bits past the outgoing argument area 70.15 guarantee(RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1)), 70.16 "must be able to represent all call arguments in reg mask"); 70.17 - init = _out_arg_limit; 70.18 - for (i = init; RegMask::can_represent(i); i = OptoReg::add(i,1)) 70.19 + OptoReg::Name init = _out_arg_limit; 70.20 + for (i = init; RegMask::can_represent(i); i = OptoReg::add(i,1)) { 70.21 C->FIRST_STACK_mask().Insert(i); 70.22 - 70.23 + } 70.24 // Finally, set the "infinite stack" bit. 70.25 C->FIRST_STACK_mask().set_AllStack(); 70.26 70.27 @@ -509,16 +509,36 @@ 70.28 idealreg2spillmask[Op_VecS]->OR(C->FIRST_STACK_mask()); 70.29 } 70.30 if (Matcher::vector_size_supported(T_FLOAT,2)) { 70.31 + // For VecD we need dual alignment and 8 bytes (2 slots) for spills. 70.32 + // RA guarantees such alignment since it is needed for Double and Long values. 70.33 *idealreg2spillmask[Op_VecD] = *idealreg2regmask[Op_VecD]; 70.34 idealreg2spillmask[Op_VecD]->OR(aligned_stack_mask); 70.35 } 70.36 if (Matcher::vector_size_supported(T_FLOAT,4)) { 70.37 + // For VecX we need quadro alignment and 16 bytes (4 slots) for spills. 70.38 + // 70.39 + // RA can use input arguments stack slots for spills but until RA 70.40 + // we don't know frame size and offset of input arg stack slots. 70.41 + // 70.42 + // Exclude last input arg stack slots to avoid spilling vectors there 70.43 + // otherwise vector spills could stomp over stack slots in caller frame. 70.44 + OptoReg::Name in = OptoReg::add(_in_arg_limit, -1); 70.45 + for (int k = 1; (in >= init_in) && (k < RegMask::SlotsPerVecX); k++) { 70.46 + aligned_stack_mask.Remove(in); 70.47 + in = OptoReg::add(in, -1); 70.48 + } 70.49 aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecX); 70.50 assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); 70.51 *idealreg2spillmask[Op_VecX] = *idealreg2regmask[Op_VecX]; 70.52 idealreg2spillmask[Op_VecX]->OR(aligned_stack_mask); 70.53 } 70.54 if (Matcher::vector_size_supported(T_FLOAT,8)) { 70.55 + // For VecY we need octo alignment and 32 bytes (8 slots) for spills. 70.56 + OptoReg::Name in = OptoReg::add(_in_arg_limit, -1); 70.57 + for (int k = 1; (in >= init_in) && (k < RegMask::SlotsPerVecY); k++) { 70.58 + aligned_stack_mask.Remove(in); 70.59 + in = OptoReg::add(in, -1); 70.60 + } 70.61 aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecY); 70.62 assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); 70.63 *idealreg2spillmask[Op_VecY] = *idealreg2regmask[Op_VecY];
71.1 --- a/src/share/vm/opto/mathexactnode.hpp Wed Nov 20 11:08:09 2013 -0800 71.2 +++ b/src/share/vm/opto/mathexactnode.hpp Thu Nov 21 12:30:35 2013 -0800 71.3 @@ -49,7 +49,7 @@ 71.4 virtual Node* Identity(PhaseTransform* phase) { return this; } 71.5 virtual Node* Ideal(PhaseGVN* phase, bool can_reshape) { return NULL; } 71.6 virtual const Type* Value(PhaseTransform* phase) const { return bottom_type(); } 71.7 - virtual uint hash() const { return Node::hash(); } 71.8 + virtual uint hash() const { return NO_HASH; } 71.9 virtual bool is_CFG() const { return false; } 71.10 virtual uint ideal_reg() const { return NotAMachineReg; } 71.11
72.1 --- a/src/share/vm/opto/memnode.hpp Wed Nov 20 11:08:09 2013 -0800 72.2 +++ b/src/share/vm/opto/memnode.hpp Thu Nov 21 12:30:35 2013 -0800 72.3 @@ -220,6 +220,17 @@ 72.4 protected: 72.5 const Type* load_array_final_field(const TypeKlassPtr *tkls, 72.6 ciKlass* klass) const; 72.7 + // depends_only_on_test is almost always true, and needs to be almost always 72.8 + // true to enable key hoisting & commoning optimizations. However, for the 72.9 + // special case of RawPtr loads from TLS top & end, and other loads performed by 72.10 + // GC barriers, the control edge carries the dependence preventing hoisting past 72.11 + // a Safepoint instead of the memory edge. (An unfortunate consequence of having 72.12 + // Safepoints not set Raw Memory; itself an unfortunate consequence of having Nodes 72.13 + // which produce results (new raw memory state) inside of loops preventing all 72.14 + // manner of other optimizations). Basically, it's ugly but so is the alternative. 72.15 + // See comment in macro.cpp, around line 125 expand_allocate_common(). 72.16 + virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; } 72.17 + 72.18 }; 72.19 72.20 //------------------------------LoadBNode-------------------------------------- 72.21 @@ -384,16 +395,6 @@ 72.22 virtual uint ideal_reg() const { return Op_RegP; } 72.23 virtual int store_Opcode() const { return Op_StoreP; } 72.24 virtual BasicType memory_type() const { return T_ADDRESS; } 72.25 - // depends_only_on_test is almost always true, and needs to be almost always 72.26 - // true to enable key hoisting & commoning optimizations. However, for the 72.27 - // special case of RawPtr loads from TLS top & end, the control edge carries 72.28 - // the dependence preventing hoisting past a Safepoint instead of the memory 72.29 - // edge. (An unfortunate consequence of having Safepoints not set Raw 72.30 - // Memory; itself an unfortunate consequence of having Nodes which produce 72.31 - // results (new raw memory state) inside of loops preventing all manner of 72.32 - // other optimizations). Basically, it's ugly but so is the alternative. 72.33 - // See comment in macro.cpp, around line 125 expand_allocate_common(). 72.34 - virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; } 72.35 }; 72.36 72.37 72.38 @@ -407,16 +408,6 @@ 72.39 virtual uint ideal_reg() const { return Op_RegN; } 72.40 virtual int store_Opcode() const { return Op_StoreN; } 72.41 virtual BasicType memory_type() const { return T_NARROWOOP; } 72.42 - // depends_only_on_test is almost always true, and needs to be almost always 72.43 - // true to enable key hoisting & commoning optimizations. However, for the 72.44 - // special case of RawPtr loads from TLS top & end, the control edge carries 72.45 - // the dependence preventing hoisting past a Safepoint instead of the memory 72.46 - // edge. (An unfortunate consequence of having Safepoints not set Raw 72.47 - // Memory; itself an unfortunate consequence of having Nodes which produce 72.48 - // results (new raw memory state) inside of loops preventing all manner of 72.49 - // other optimizations). Basically, it's ugly but so is the alternative. 72.50 - // See comment in macro.cpp, around line 125 expand_allocate_common(). 72.51 - virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; } 72.52 }; 72.53 72.54 //------------------------------LoadKlassNode----------------------------------
73.1 --- a/src/share/vm/prims/jvmtiImpl.cpp Wed Nov 20 11:08:09 2013 -0800 73.2 +++ b/src/share/vm/prims/jvmtiImpl.cpp Thu Nov 21 12:30:35 2013 -0800 73.3 @@ -210,6 +210,14 @@ 73.4 } 73.5 } 73.6 73.7 +void GrowableCache::metadata_do(void f(Metadata*)) { 73.8 + int len = _elements->length(); 73.9 + for (int i=0; i<len; i++) { 73.10 + GrowableElement *e = _elements->at(i); 73.11 + e->metadata_do(f); 73.12 + } 73.13 +} 73.14 + 73.15 void GrowableCache::gc_epilogue() { 73.16 int len = _elements->length(); 73.17 for (int i=0; i<len; i++) { 73.18 @@ -224,20 +232,20 @@ 73.19 JvmtiBreakpoint::JvmtiBreakpoint() { 73.20 _method = NULL; 73.21 _bci = 0; 73.22 - _class_loader = NULL; 73.23 + _class_holder = NULL; 73.24 } 73.25 73.26 JvmtiBreakpoint::JvmtiBreakpoint(Method* m_method, jlocation location) { 73.27 _method = m_method; 73.28 - _class_loader = _method->method_holder()->class_loader_data()->class_loader(); 73.29 + _class_holder = _method->method_holder()->klass_holder(); 73.30 #ifdef CHECK_UNHANDLED_OOPS 73.31 - // _class_loader can't be wrapped in a Handle, because JvmtiBreakpoint:s are 73.32 - // eventually allocated on the heap. 73.33 + // _class_holder can't be wrapped in a Handle, because JvmtiBreakpoints are 73.34 + // sometimes allocated on the heap. 73.35 // 73.36 - // The code handling JvmtiBreakpoint:s allocated on the stack can't be 73.37 - // interrupted by a GC until _class_loader is reachable by the GC via the 73.38 + // The code handling JvmtiBreakpoints allocated on the stack can't be 73.39 + // interrupted by a GC until _class_holder is reachable by the GC via the 73.40 // oops_do method. 73.41 - Thread::current()->allow_unhandled_oop(&_class_loader); 73.42 + Thread::current()->allow_unhandled_oop(&_class_holder); 73.43 #endif // CHECK_UNHANDLED_OOPS 73.44 assert(_method != NULL, "_method != NULL"); 73.45 _bci = (int) location; 73.46 @@ -247,7 +255,7 @@ 73.47 void JvmtiBreakpoint::copy(JvmtiBreakpoint& bp) { 73.48 _method = bp._method; 73.49 _bci = bp._bci; 73.50 - _class_loader = bp._class_loader; 73.51 + _class_holder = bp._class_holder; 73.52 } 73.53 73.54 bool JvmtiBreakpoint::lessThan(JvmtiBreakpoint& bp) { 73.55 @@ -365,6 +373,13 @@ 73.56 } 73.57 } 73.58 73.59 +void VM_ChangeBreakpoints::metadata_do(void f(Metadata*)) { 73.60 + // Walk metadata in breakpoints to keep from being deallocated with RedefineClasses 73.61 + if (_bp != NULL) { 73.62 + _bp->metadata_do(f); 73.63 + } 73.64 +} 73.65 + 73.66 // 73.67 // class JvmtiBreakpoints 73.68 // 73.69 @@ -381,6 +396,10 @@ 73.70 _bps.oops_do(f); 73.71 } 73.72 73.73 +void JvmtiBreakpoints::metadata_do(void f(Metadata*)) { 73.74 + _bps.metadata_do(f); 73.75 +} 73.76 + 73.77 void JvmtiBreakpoints::gc_epilogue() { 73.78 _bps.gc_epilogue(); 73.79 } 73.80 @@ -499,6 +518,12 @@ 73.81 } 73.82 } 73.83 73.84 +void JvmtiCurrentBreakpoints::metadata_do(void f(Metadata*)) { 73.85 + if (_jvmti_breakpoints != NULL) { 73.86 + _jvmti_breakpoints->metadata_do(f); 73.87 + } 73.88 +} 73.89 + 73.90 void JvmtiCurrentBreakpoints::gc_epilogue() { 73.91 if (_jvmti_breakpoints != NULL) { 73.92 _jvmti_breakpoints->gc_epilogue();
74.1 --- a/src/share/vm/prims/jvmtiImpl.hpp Wed Nov 20 11:08:09 2013 -0800 74.2 +++ b/src/share/vm/prims/jvmtiImpl.hpp Thu Nov 21 12:30:35 2013 -0800 74.3 @@ -69,6 +69,7 @@ 74.4 virtual bool lessThan(GrowableElement *e)=0; 74.5 virtual GrowableElement *clone() =0; 74.6 virtual void oops_do(OopClosure* f) =0; 74.7 + virtual void metadata_do(void f(Metadata*)) =0; 74.8 }; 74.9 74.10 class GrowableCache VALUE_OBJ_CLASS_SPEC { 74.11 @@ -115,6 +116,8 @@ 74.12 void clear(); 74.13 // apply f to every element and update the cache 74.14 void oops_do(OopClosure* f); 74.15 + // walk metadata to preserve for RedefineClasses 74.16 + void metadata_do(void f(Metadata*)); 74.17 // update the cache after a full gc 74.18 void gc_epilogue(); 74.19 }; 74.20 @@ -148,6 +151,7 @@ 74.21 void remove (int index) { _cache.remove(index); } 74.22 void clear() { _cache.clear(); } 74.23 void oops_do(OopClosure* f) { _cache.oops_do(f); } 74.24 + void metadata_do(void f(Metadata*)) { _cache.metadata_do(f); } 74.25 void gc_epilogue() { _cache.gc_epilogue(); } 74.26 }; 74.27 74.28 @@ -169,7 +173,7 @@ 74.29 Method* _method; 74.30 int _bci; 74.31 Bytecodes::Code _orig_bytecode; 74.32 - oop _class_loader; 74.33 + oop _class_holder; // keeps _method memory from being deallocated 74.34 74.35 public: 74.36 JvmtiBreakpoint(); 74.37 @@ -191,9 +195,15 @@ 74.38 bool lessThan(GrowableElement* e) { Unimplemented(); return false; } 74.39 bool equals(GrowableElement* e) { return equals((JvmtiBreakpoint&) *e); } 74.40 void oops_do(OopClosure* f) { 74.41 - // Mark the method loader as live 74.42 - f->do_oop(&_class_loader); 74.43 + // Mark the method loader as live so the Method* class loader doesn't get 74.44 + // unloaded and Method* memory reclaimed. 74.45 + f->do_oop(&_class_holder); 74.46 } 74.47 + void metadata_do(void f(Metadata*)) { 74.48 + // walk metadata to preserve for RedefineClasses 74.49 + f(_method); 74.50 + } 74.51 + 74.52 GrowableElement *clone() { 74.53 JvmtiBreakpoint *bp = new JvmtiBreakpoint(); 74.54 bp->copy(*this); 74.55 @@ -239,6 +249,7 @@ 74.56 74.57 int length(); 74.58 void oops_do(OopClosure* f); 74.59 + void metadata_do(void f(Metadata*)); 74.60 void print(); 74.61 74.62 int set(JvmtiBreakpoint& bp); 74.63 @@ -288,6 +299,7 @@ 74.64 static inline bool is_breakpoint(address bcp); 74.65 74.66 static void oops_do(OopClosure* f); 74.67 + static void metadata_do(void f(Metadata*)); 74.68 static void gc_epilogue(); 74.69 }; 74.70 74.71 @@ -332,6 +344,7 @@ 74.72 VMOp_Type type() const { return VMOp_ChangeBreakpoints; } 74.73 void doit(); 74.74 void oops_do(OopClosure* f); 74.75 + void metadata_do(void f(Metadata*)); 74.76 }; 74.77 74.78
75.1 --- a/src/share/vm/prims/whitebox.cpp Wed Nov 20 11:08:09 2013 -0800 75.2 +++ b/src/share/vm/prims/whitebox.cpp Thu Nov 21 12:30:35 2013 -0800 75.3 @@ -53,6 +53,8 @@ 75.4 #include "compiler/compileBroker.hpp" 75.5 #include "runtime/compilationPolicy.hpp" 75.6 75.7 +#define SIZE_T_MAX_VALUE ((size_t) -1) 75.8 + 75.9 bool WhiteBox::_used = false; 75.10 75.11 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj)) 75.12 @@ -105,10 +107,116 @@ 75.13 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap " 75.14 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT, 75.15 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), 75.16 - p->min_alignment(), p->max_alignment()); 75.17 + p->space_alignment(), p->heap_alignment()); 75.18 } 75.19 WB_END 75.20 75.21 +#ifndef PRODUCT 75.22 +// Forward declaration 75.23 +void TestReservedSpace_test(); 75.24 +void TestReserveMemorySpecial_test(); 75.25 +void TestVirtualSpace_test(); 75.26 +void TestMetaspaceAux_test(); 75.27 +#endif 75.28 + 75.29 +WB_ENTRY(void, WB_RunMemoryUnitTests(JNIEnv* env, jobject o)) 75.30 +#ifndef PRODUCT 75.31 + TestReservedSpace_test(); 75.32 + TestReserveMemorySpecial_test(); 75.33 + TestVirtualSpace_test(); 75.34 + TestMetaspaceAux_test(); 75.35 +#endif 75.36 +WB_END 75.37 + 75.38 +WB_ENTRY(void, WB_ReadFromNoaccessArea(JNIEnv* env, jobject o)) 75.39 + size_t granularity = os::vm_allocation_granularity(); 75.40 + ReservedHeapSpace rhs(100 * granularity, granularity, false, NULL); 75.41 + VirtualSpace vs; 75.42 + vs.initialize(rhs, 50 * granularity); 75.43 + 75.44 + //Check if constraints are complied 75.45 + if (!( UseCompressedOops && rhs.base() != NULL && 75.46 + Universe::narrow_oop_base() != NULL && 75.47 + Universe::narrow_oop_use_implicit_null_checks() )) { 75.48 + tty->print_cr("WB_ReadFromNoaccessArea method is useless:\n " 75.49 + "\tUseCompressedOops is %d\n" 75.50 + "\trhs.base() is "PTR_FORMAT"\n" 75.51 + "\tUniverse::narrow_oop_base() is "PTR_FORMAT"\n" 75.52 + "\tUniverse::narrow_oop_use_implicit_null_checks() is %d", 75.53 + UseCompressedOops, 75.54 + rhs.base(), 75.55 + Universe::narrow_oop_base(), 75.56 + Universe::narrow_oop_use_implicit_null_checks()); 75.57 + return; 75.58 + } 75.59 + tty->print_cr("Reading from no access area... "); 75.60 + tty->print_cr("*(vs.low_boundary() - rhs.noaccess_prefix() / 2 ) = %c", 75.61 + *(vs.low_boundary() - rhs.noaccess_prefix() / 2 )); 75.62 +WB_END 75.63 + 75.64 +static jint wb_stress_virtual_space_resize(size_t reserved_space_size, 75.65 + size_t magnitude, size_t iterations) { 75.66 + size_t granularity = os::vm_allocation_granularity(); 75.67 + ReservedHeapSpace rhs(reserved_space_size * granularity, granularity, false, NULL); 75.68 + VirtualSpace vs; 75.69 + if (!vs.initialize(rhs, 0)) { 75.70 + tty->print_cr("Failed to initialize VirtualSpace. Can't proceed."); 75.71 + return 3; 75.72 + } 75.73 + 75.74 + long seed = os::random(); 75.75 + tty->print_cr("Random seed is %ld", seed); 75.76 + os::init_random(seed); 75.77 + 75.78 + for (size_t i = 0; i < iterations; i++) { 75.79 + 75.80 + // Whether we will shrink or grow 75.81 + bool shrink = os::random() % 2L == 0; 75.82 + 75.83 + // Get random delta to resize virtual space 75.84 + size_t delta = (size_t)os::random() % magnitude; 75.85 + 75.86 + // If we are about to shrink virtual space below zero, then expand instead 75.87 + if (shrink && vs.committed_size() < delta) { 75.88 + shrink = false; 75.89 + } 75.90 + 75.91 + // Resizing by delta 75.92 + if (shrink) { 75.93 + vs.shrink_by(delta); 75.94 + } else { 75.95 + // If expanding fails expand_by will silently return false 75.96 + vs.expand_by(delta, true); 75.97 + } 75.98 + } 75.99 + return 0; 75.100 +} 75.101 + 75.102 +WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o, 75.103 + jlong reserved_space_size, jlong magnitude, jlong iterations)) 75.104 + tty->print_cr("reservedSpaceSize="JLONG_FORMAT", magnitude="JLONG_FORMAT", " 75.105 + "iterations="JLONG_FORMAT"\n", reserved_space_size, magnitude, 75.106 + iterations); 75.107 + if (reserved_space_size < 0 || magnitude < 0 || iterations < 0) { 75.108 + tty->print_cr("One of variables printed above is negative. Can't proceed.\n"); 75.109 + return 1; 75.110 + } 75.111 + 75.112 + // sizeof(size_t) depends on whether OS is 32bit or 64bit. sizeof(jlong) is 75.113 + // always 8 byte. That's why we should avoid overflow in case of 32bit platform. 75.114 + if (sizeof(size_t) < sizeof(jlong)) { 75.115 + jlong size_t_max_value = (jlong) SIZE_T_MAX_VALUE; 75.116 + if (reserved_space_size > size_t_max_value || magnitude > size_t_max_value 75.117 + || iterations > size_t_max_value) { 75.118 + tty->print_cr("One of variables printed above overflows size_t. Can't proceed.\n"); 75.119 + return 2; 75.120 + } 75.121 + } 75.122 + 75.123 + return wb_stress_virtual_space_resize((size_t) reserved_space_size, 75.124 + (size_t) magnitude, (size_t) iterations); 75.125 +WB_END 75.126 + 75.127 #if INCLUDE_ALL_GCS 75.128 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj)) 75.129 G1CollectedHeap* g1 = G1CollectedHeap::heap(); 75.130 @@ -445,6 +553,9 @@ 75.131 {CC"getCompressedOopsMaxHeapSize", CC"()J", 75.132 (void*)&WB_GetCompressedOopsMaxHeapSize}, 75.133 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes }, 75.134 + {CC"runMemoryUnitTests", CC"()V", (void*)&WB_RunMemoryUnitTests}, 75.135 + {CC"readFromNoaccessArea",CC"()V", (void*)&WB_ReadFromNoaccessArea}, 75.136 + {CC"stressVirtualSpaceResize",CC"(JJJ)I", (void*)&WB_StressVirtualSpaceResize}, 75.137 #if INCLUDE_ALL_GCS 75.138 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark}, 75.139 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
76.1 --- a/src/share/vm/runtime/arguments.cpp Wed Nov 20 11:08:09 2013 -0800 76.2 +++ b/src/share/vm/runtime/arguments.cpp Thu Nov 21 12:30:35 2013 -0800 76.3 @@ -1135,9 +1135,6 @@ 76.4 Tier3InvokeNotifyFreqLog = 0; 76.5 Tier4InvocationThreshold = 0; 76.6 } 76.7 - if (FLAG_IS_DEFAULT(NmethodSweepFraction)) { 76.8 - FLAG_SET_DEFAULT(NmethodSweepFraction, 1 + ReservedCodeCacheSize / (16 * M)); 76.9 - } 76.10 } 76.11 76.12 #if INCLUDE_ALL_GCS 76.13 @@ -1411,7 +1408,7 @@ 76.14 // NULL page is located before the heap, we pad the NULL page to the conservative 76.15 // maximum alignment that the GC may ever impose upon the heap. 76.16 size_t displacement_due_to_null_page = align_size_up_(os::vm_page_size(), 76.17 - Arguments::conservative_max_heap_alignment()); 76.18 + _conservative_max_heap_alignment); 76.19 76.20 LP64_ONLY(return OopEncodingHeapMax - displacement_due_to_null_page); 76.21 NOT_LP64(ShouldNotReachHere(); return 0); 76.22 @@ -1508,7 +1505,7 @@ 76.23 } 76.24 #endif // INCLUDE_ALL_GCS 76.25 _conservative_max_heap_alignment = MAX3(heap_alignment, os::max_page_size(), 76.26 - CollectorPolicy::compute_max_alignment()); 76.27 + CollectorPolicy::compute_heap_alignment()); 76.28 } 76.29 76.30 void Arguments::set_ergonomics_flags() { 76.31 @@ -2168,6 +2165,10 @@ 76.32 76.33 #if INCLUDE_ALL_GCS 76.34 if (UseG1GC) { 76.35 + status = status && verify_percentage(G1NewSizePercent, "G1NewSizePercent"); 76.36 + status = status && verify_percentage(G1MaxNewSizePercent, "G1MaxNewSizePercent"); 76.37 + status = status && verify_interval(G1NewSizePercent, 0, G1MaxNewSizePercent, "G1NewSizePercent"); 76.38 + 76.39 status = status && verify_percentage(InitiatingHeapOccupancyPercent, 76.40 "InitiatingHeapOccupancyPercent"); 76.41 status = status && verify_min_value(G1RefProcDrainInterval, 1, 76.42 @@ -2684,9 +2685,10 @@ 76.43 describe_range_error(errcode); 76.44 return JNI_EINVAL; 76.45 } 76.46 + set_min_heap_size((uintx)long_initial_heap_size); 76.47 + // Currently the minimum size and the initial heap sizes are the same. 76.48 + // Can be overridden with -XX:InitialHeapSize. 76.49 FLAG_SET_CMDLINE(uintx, InitialHeapSize, (uintx)long_initial_heap_size); 76.50 - // Currently the minimum size and the initial heap sizes are the same. 76.51 - set_min_heap_size(InitialHeapSize); 76.52 // -Xmx 76.53 } else if (match_option(option, "-Xmx", &tail) || match_option(option, "-XX:MaxHeapSize=", &tail)) { 76.54 julong long_max_heap_size = 0; 76.55 @@ -3646,6 +3648,11 @@ 76.56 "Incompatible compilation policy selected", NULL); 76.57 } 76.58 } 76.59 + // Set NmethodSweepFraction after the size of the code cache is adapted (in case of tiered) 76.60 + if (FLAG_IS_DEFAULT(NmethodSweepFraction)) { 76.61 + FLAG_SET_DEFAULT(NmethodSweepFraction, 1 + ReservedCodeCacheSize / (16 * M)); 76.62 + } 76.63 + 76.64 76.65 // Set heap size based on available physical memory 76.66 set_heap_size();
77.1 --- a/src/share/vm/runtime/globals.hpp Wed Nov 20 11:08:09 2013 -0800 77.2 +++ b/src/share/vm/runtime/globals.hpp Thu Nov 21 12:30:35 2013 -0800 77.3 @@ -2973,6 +2973,9 @@ 77.4 product(intx, MaxRecursiveInlineLevel, 1, \ 77.5 "maximum number of nested recursive calls that are inlined") \ 77.6 \ 77.7 + develop(intx, MaxForceInlineLevel, 100, \ 77.8 + "maximum number of nested @ForceInline calls that are inlined") \ 77.9 + \ 77.10 product_pd(intx, InlineSmallCode, \ 77.11 "Only inline already compiled methods if their code size is " \ 77.12 "less than this") \ 77.13 @@ -3038,9 +3041,6 @@ 77.14 notproduct(intx, ZombieALotInterval, 5, \ 77.15 "Number of exits until ZombieALot kicks in") \ 77.16 \ 77.17 - develop(bool, StressNonEntrant, false, \ 77.18 - "Mark nmethods non-entrant at registration") \ 77.19 - \ 77.20 diagnostic(intx, MallocVerifyInterval, 0, \ 77.21 "If non-zero, verify C heap after every N calls to " \ 77.22 "malloc/realloc/free") \ 77.23 @@ -3309,7 +3309,7 @@ 77.24 "Exit the VM if we fill the code cache") \ 77.25 \ 77.26 product(bool, UseCodeCacheFlushing, true, \ 77.27 - "Attempt to clean the code cache before shutting off compiler") \ 77.28 + "Remove cold/old nmethods from the code cache") \ 77.29 \ 77.30 /* interpreter debugging */ \ 77.31 develop(intx, BinarySwitchThreshold, 5, \
78.1 --- a/src/share/vm/runtime/sweeper.cpp Wed Nov 20 11:08:09 2013 -0800 78.2 +++ b/src/share/vm/runtime/sweeper.cpp Thu Nov 21 12:30:35 2013 -0800 78.3 @@ -112,14 +112,13 @@ 78.4 if (_records != NULL) { 78.5 _records[_sweep_index].traversal = _traversals; 78.6 _records[_sweep_index].traversal_mark = nm->_stack_traversal_mark; 78.7 - _records[_sweep_index].invocation = _invocations; 78.8 + _records[_sweep_index].invocation = _sweep_fractions_left; 78.9 _records[_sweep_index].compile_id = nm->compile_id(); 78.10 _records[_sweep_index].kind = nm->compile_kind(); 78.11 _records[_sweep_index].state = nm->_state; 78.12 _records[_sweep_index].vep = nm->verified_entry_point(); 78.13 _records[_sweep_index].uep = nm->entry_point(); 78.14 _records[_sweep_index].line = line; 78.15 - 78.16 _sweep_index = (_sweep_index + 1) % SweeperLogEntries; 78.17 } 78.18 } 78.19 @@ -127,26 +126,29 @@ 78.20 #define SWEEP(nm) 78.21 #endif 78.22 78.23 -nmethod* NMethodSweeper::_current = NULL; // Current nmethod 78.24 -long NMethodSweeper::_traversals = 0; // Nof. stack traversals performed 78.25 -int NMethodSweeper::_seen = 0; // Nof. nmethods we have currently processed in current pass of CodeCache 78.26 -int NMethodSweeper::_flushed_count = 0; // Nof. nmethods flushed in current sweep 78.27 -int NMethodSweeper::_zombified_count = 0; // Nof. nmethods made zombie in current sweep 78.28 -int NMethodSweeper::_marked_count = 0; // Nof. nmethods marked for reclaim in current sweep 78.29 +nmethod* NMethodSweeper::_current = NULL; // Current nmethod 78.30 +long NMethodSweeper::_traversals = 0; // Stack scan count, also sweep ID. 78.31 +long NMethodSweeper::_time_counter = 0; // Virtual time used to periodically invoke sweeper 78.32 +long NMethodSweeper::_last_sweep = 0; // Value of _time_counter when the last sweep happened 78.33 +int NMethodSweeper::_seen = 0; // Nof. nmethod we have currently processed in current pass of CodeCache 78.34 +int NMethodSweeper::_flushed_count = 0; // Nof. nmethods flushed in current sweep 78.35 +int NMethodSweeper::_zombified_count = 0; // Nof. nmethods made zombie in current sweep 78.36 +int NMethodSweeper::_marked_for_reclamation_count = 0; // Nof. nmethods marked for reclaim in current sweep 78.37 78.38 -volatile int NMethodSweeper::_invocations = 0; // Nof. invocations left until we are completed with this pass 78.39 -volatile int NMethodSweeper::_sweep_started = 0; // Whether a sweep is in progress. 78.40 +volatile bool NMethodSweeper::_should_sweep = true; // Indicates if we should invoke the sweeper 78.41 +volatile int NMethodSweeper::_sweep_fractions_left = 0; // Nof. invocations left until we are completed with this pass 78.42 +volatile int NMethodSweeper::_sweep_started = 0; // Flag to control conc sweeper 78.43 +volatile int NMethodSweeper::_bytes_changed = 0; // Counts the total nmethod size if the nmethod changed from: 78.44 + // 1) alive -> not_entrant 78.45 + // 2) not_entrant -> zombie 78.46 + // 3) zombie -> marked_for_reclamation 78.47 78.48 -jint NMethodSweeper::_locked_seen = 0; 78.49 -jint NMethodSweeper::_not_entrant_seen_on_stack = 0; 78.50 -bool NMethodSweeper::_request_mark_phase = false; 78.51 - 78.52 -int NMethodSweeper::_total_nof_methods_reclaimed = 0; 78.53 -jlong NMethodSweeper::_total_time_sweeping = 0; 78.54 -jlong NMethodSweeper::_total_time_this_sweep = 0; 78.55 -jlong NMethodSweeper::_peak_sweep_time = 0; 78.56 -jlong NMethodSweeper::_peak_sweep_fraction_time = 0; 78.57 -int NMethodSweeper::_hotness_counter_reset_val = 0; 78.58 +int NMethodSweeper::_total_nof_methods_reclaimed = 0; // Accumulated nof methods flushed 78.59 +jlong NMethodSweeper::_total_time_sweeping = 0; // Accumulated time sweeping 78.60 +jlong NMethodSweeper::_total_time_this_sweep = 0; // Total time this sweep 78.61 +jlong NMethodSweeper::_peak_sweep_time = 0; // Peak time for a full sweep 78.62 +jlong NMethodSweeper::_peak_sweep_fraction_time = 0; // Peak time sweeping one fraction 78.63 +int NMethodSweeper::_hotness_counter_reset_val = 0; 78.64 78.65 78.66 class MarkActivationClosure: public CodeBlobClosure { 78.67 @@ -197,13 +199,16 @@ 78.68 return; 78.69 } 78.70 78.71 + // Increase time so that we can estimate when to invoke the sweeper again. 78.72 + _time_counter++; 78.73 + 78.74 // Check for restart 78.75 assert(CodeCache::find_blob_unsafe(_current) == _current, "Sweeper nmethod cached state invalid"); 78.76 - if (!sweep_in_progress() && need_marking_phase()) { 78.77 - _seen = 0; 78.78 - _invocations = NmethodSweepFraction; 78.79 - _current = CodeCache::first_nmethod(); 78.80 - _traversals += 1; 78.81 + if (!sweep_in_progress()) { 78.82 + _seen = 0; 78.83 + _sweep_fractions_left = NmethodSweepFraction; 78.84 + _current = CodeCache::first_nmethod(); 78.85 + _traversals += 1; 78.86 _total_time_this_sweep = 0; 78.87 78.88 if (PrintMethodFlushing) { 78.89 @@ -211,10 +216,6 @@ 78.90 } 78.91 Threads::nmethods_do(&mark_activation_closure); 78.92 78.93 - // reset the flags since we started a scan from the beginning. 78.94 - reset_nmethod_marking(); 78.95 - _locked_seen = 0; 78.96 - _not_entrant_seen_on_stack = 0; 78.97 } else { 78.98 // Only set hotness counter 78.99 Threads::nmethods_do(&set_hotness_closure); 78.100 @@ -222,14 +223,48 @@ 78.101 78.102 OrderAccess::storestore(); 78.103 } 78.104 - 78.105 +/** 78.106 + * This function invokes the sweeper if at least one of the three conditions is met: 78.107 + * (1) The code cache is getting full 78.108 + * (2) There are sufficient state changes in/since the last sweep. 78.109 + * (3) We have not been sweeping for 'some time' 78.110 + */ 78.111 void NMethodSweeper::possibly_sweep() { 78.112 assert(JavaThread::current()->thread_state() == _thread_in_vm, "must run in vm mode"); 78.113 if (!MethodFlushing || !sweep_in_progress()) { 78.114 return; 78.115 } 78.116 78.117 - if (_invocations > 0) { 78.118 + // If there was no state change while nmethod sweeping, 'should_sweep' will be false. 78.119 + // This is one of the two places where should_sweep can be set to true. The general 78.120 + // idea is as follows: If there is enough free space in the code cache, there is no 78.121 + // need to invoke the sweeper. The following formula (which determines whether to invoke 78.122 + // the sweeper or not) depends on the assumption that for larger ReservedCodeCacheSizes 78.123 + // we need less frequent sweeps than for smaller ReservedCodecCacheSizes. Furthermore, 78.124 + // the formula considers how much space in the code cache is currently used. Here are 78.125 + // some examples that will (hopefully) help in understanding. 78.126 + // 78.127 + // Small ReservedCodeCacheSizes: (e.g., < 16M) We invoke the sweeper every time, since 78.128 + // the result of the division is 0. This 78.129 + // keeps the used code cache size small 78.130 + // (important for embedded Java) 78.131 + // Large ReservedCodeCacheSize : (e.g., 256M + code cache is 10% full). The formula 78.132 + // computes: (256 / 16) - 1 = 15 78.133 + // As a result, we invoke the sweeper after 78.134 + // 15 invocations of 'mark_active_nmethods. 78.135 + // Large ReservedCodeCacheSize: (e.g., 256M + code Cache is 90% full). The formula 78.136 + // computes: (256 / 16) - 10 = 6. 78.137 + if (!_should_sweep) { 78.138 + int time_since_last_sweep = _time_counter - _last_sweep; 78.139 + double wait_until_next_sweep = (ReservedCodeCacheSize / (16 * M)) - time_since_last_sweep - 78.140 + CodeCache::reverse_free_ratio(); 78.141 + 78.142 + if ((wait_until_next_sweep <= 0.0) || !CompileBroker::should_compile_new_jobs()) { 78.143 + _should_sweep = true; 78.144 + } 78.145 + } 78.146 + 78.147 + if (_should_sweep && _sweep_fractions_left > 0) { 78.148 // Only one thread at a time will sweep 78.149 jint old = Atomic::cmpxchg( 1, &_sweep_started, 0 ); 78.150 if (old != 0) { 78.151 @@ -242,31 +277,46 @@ 78.152 memset(_records, 0, sizeof(SweeperRecord) * SweeperLogEntries); 78.153 } 78.154 #endif 78.155 - if (_invocations > 0) { 78.156 + 78.157 + if (_sweep_fractions_left > 0) { 78.158 sweep_code_cache(); 78.159 - _invocations--; 78.160 + _sweep_fractions_left--; 78.161 + } 78.162 + 78.163 + // We are done with sweeping the code cache once. 78.164 + if (_sweep_fractions_left == 0) { 78.165 + _last_sweep = _time_counter; 78.166 + // Reset flag; temporarily disables sweeper 78.167 + _should_sweep = false; 78.168 + // If there was enough state change, 'possibly_enable_sweeper()' 78.169 + // sets '_should_sweep' to true 78.170 + possibly_enable_sweeper(); 78.171 + // Reset _bytes_changed only if there was enough state change. _bytes_changed 78.172 + // can further increase by calls to 'report_state_change'. 78.173 + if (_should_sweep) { 78.174 + _bytes_changed = 0; 78.175 + } 78.176 } 78.177 _sweep_started = 0; 78.178 } 78.179 } 78.180 78.181 void NMethodSweeper::sweep_code_cache() { 78.182 - 78.183 jlong sweep_start_counter = os::elapsed_counter(); 78.184 78.185 - _flushed_count = 0; 78.186 - _zombified_count = 0; 78.187 - _marked_count = 0; 78.188 + _flushed_count = 0; 78.189 + _zombified_count = 0; 78.190 + _marked_for_reclamation_count = 0; 78.191 78.192 if (PrintMethodFlushing && Verbose) { 78.193 - tty->print_cr("### Sweep at %d out of %d. Invocations left: %d", _seen, CodeCache::nof_nmethods(), _invocations); 78.194 + tty->print_cr("### Sweep at %d out of %d. Invocations left: %d", _seen, CodeCache::nof_nmethods(), _sweep_fractions_left); 78.195 } 78.196 78.197 if (!CompileBroker::should_compile_new_jobs()) { 78.198 // If we have turned off compilations we might as well do full sweeps 78.199 // in order to reach the clean state faster. Otherwise the sleeping compiler 78.200 // threads will slow down sweeping. 78.201 - _invocations = 1; 78.202 + _sweep_fractions_left = 1; 78.203 } 78.204 78.205 // We want to visit all nmethods after NmethodSweepFraction 78.206 @@ -274,7 +324,7 @@ 78.207 // remaining number of invocations. This is only an estimate since 78.208 // the number of nmethods changes during the sweep so the final 78.209 // stage must iterate until it there are no more nmethods. 78.210 - int todo = (CodeCache::nof_nmethods() - _seen) / _invocations; 78.211 + int todo = (CodeCache::nof_nmethods() - _seen) / _sweep_fractions_left; 78.212 int swept_count = 0; 78.213 78.214 78.215 @@ -286,11 +336,11 @@ 78.216 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); 78.217 78.218 // The last invocation iterates until there are no more nmethods 78.219 - for (int i = 0; (i < todo || _invocations == 1) && _current != NULL; i++) { 78.220 + for (int i = 0; (i < todo || _sweep_fractions_left == 1) && _current != NULL; i++) { 78.221 swept_count++; 78.222 if (SafepointSynchronize::is_synchronizing()) { // Safepoint request 78.223 if (PrintMethodFlushing && Verbose) { 78.224 - tty->print_cr("### Sweep at %d out of %d, invocation: %d, yielding to safepoint", _seen, CodeCache::nof_nmethods(), _invocations); 78.225 + tty->print_cr("### Sweep at %d out of %d, invocation: %d, yielding to safepoint", _seen, CodeCache::nof_nmethods(), _sweep_fractions_left); 78.226 } 78.227 MutexUnlockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); 78.228 78.229 @@ -314,19 +364,7 @@ 78.230 } 78.231 } 78.232 78.233 - assert(_invocations > 1 || _current == NULL, "must have scanned the whole cache"); 78.234 - 78.235 - if (!sweep_in_progress() && !need_marking_phase() && (_locked_seen || _not_entrant_seen_on_stack)) { 78.236 - // we've completed a scan without making progress but there were 78.237 - // nmethods we were unable to process either because they were 78.238 - // locked or were still on stack. We don't have to aggressively 78.239 - // clean them up so just stop scanning. We could scan once more 78.240 - // but that complicates the control logic and it's unlikely to 78.241 - // matter much. 78.242 - if (PrintMethodFlushing) { 78.243 - tty->print_cr("### Couldn't make progress on some nmethods so stopping sweep"); 78.244 - } 78.245 - } 78.246 + assert(_sweep_fractions_left > 1 || _current == NULL, "must have scanned the whole cache"); 78.247 78.248 jlong sweep_end_counter = os::elapsed_counter(); 78.249 jlong sweep_time = sweep_end_counter - sweep_start_counter; 78.250 @@ -340,21 +378,21 @@ 78.251 event.set_starttime(sweep_start_counter); 78.252 event.set_endtime(sweep_end_counter); 78.253 event.set_sweepIndex(_traversals); 78.254 - event.set_sweepFractionIndex(NmethodSweepFraction - _invocations + 1); 78.255 + event.set_sweepFractionIndex(NmethodSweepFraction - _sweep_fractions_left + 1); 78.256 event.set_sweptCount(swept_count); 78.257 event.set_flushedCount(_flushed_count); 78.258 - event.set_markedCount(_marked_count); 78.259 + event.set_markedCount(_marked_for_reclamation_count); 78.260 event.set_zombifiedCount(_zombified_count); 78.261 event.commit(); 78.262 } 78.263 78.264 #ifdef ASSERT 78.265 if(PrintMethodFlushing) { 78.266 - tty->print_cr("### sweeper: sweep time(%d): " INT64_FORMAT, _invocations, (jlong)sweep_time); 78.267 + tty->print_cr("### sweeper: sweep time(%d): " INT64_FORMAT, _sweep_fractions_left, (jlong)sweep_time); 78.268 } 78.269 #endif 78.270 78.271 - if (_invocations == 1) { 78.272 + if (_sweep_fractions_left == 1) { 78.273 _peak_sweep_time = MAX2(_peak_sweep_time, _total_time_this_sweep); 78.274 log_sweep("finished"); 78.275 } 78.276 @@ -368,12 +406,37 @@ 78.277 // it only makes sense to re-enable compilation if we have actually freed memory. 78.278 // Note that typically several kB are released for sweeping 16MB of the code 78.279 // cache. As a result, 'freed_memory' > 0 to restart the compiler. 78.280 - if (UseCodeCacheFlushing && (!CompileBroker::should_compile_new_jobs() && (freed_memory > 0))) { 78.281 + if (!CompileBroker::should_compile_new_jobs() && (freed_memory > 0)) { 78.282 CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation); 78.283 log_sweep("restart_compiler"); 78.284 } 78.285 } 78.286 78.287 +/** 78.288 + * This function updates the sweeper statistics that keep track of nmethods 78.289 + * state changes. If there is 'enough' state change, the sweeper is invoked 78.290 + * as soon as possible. There can be data races on _bytes_changed. The data 78.291 + * races are benign, since it does not matter if we loose a couple of bytes. 78.292 + * In the worst case we call the sweeper a little later. Also, we are guaranteed 78.293 + * to invoke the sweeper if the code cache gets full. 78.294 + */ 78.295 +void NMethodSweeper::report_state_change(nmethod* nm) { 78.296 + _bytes_changed += nm->total_size(); 78.297 + possibly_enable_sweeper(); 78.298 +} 78.299 + 78.300 +/** 78.301 + * Function determines if there was 'enough' state change in the code cache to invoke 78.302 + * the sweeper again. Currently, we determine 'enough' as more than 1% state change in 78.303 + * the code cache since the last sweep. 78.304 + */ 78.305 +void NMethodSweeper::possibly_enable_sweeper() { 78.306 + double percent_changed = ((double)_bytes_changed / (double)ReservedCodeCacheSize) * 100; 78.307 + if (percent_changed > 1.0) { 78.308 + _should_sweep = true; 78.309 + } 78.310 +} 78.311 + 78.312 class NMethodMarker: public StackObj { 78.313 private: 78.314 CompilerThread* _thread; 78.315 @@ -424,9 +487,6 @@ 78.316 MutexLocker cl(CompiledIC_lock); 78.317 nm->cleanup_inline_caches(); 78.318 SWEEP(nm); 78.319 - } else { 78.320 - _locked_seen++; 78.321 - SWEEP(nm); 78.322 } 78.323 return freed_memory; 78.324 } 78.325 @@ -448,8 +508,9 @@ 78.326 tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (zombie) being marked for reclamation", nm->compile_id(), nm); 78.327 } 78.328 nm->mark_for_reclamation(); 78.329 - request_nmethod_marking(); 78.330 - _marked_count++; 78.331 + // Keep track of code cache state change 78.332 + _bytes_changed += nm->total_size(); 78.333 + _marked_for_reclamation_count++; 78.334 SWEEP(nm); 78.335 } 78.336 } else if (nm->is_not_entrant()) { 78.337 @@ -459,18 +520,14 @@ 78.338 if (PrintMethodFlushing && Verbose) { 78.339 tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (not entrant) being made zombie", nm->compile_id(), nm); 78.340 } 78.341 + // Code cache state change is tracked in make_zombie() 78.342 nm->make_zombie(); 78.343 - request_nmethod_marking(); 78.344 _zombified_count++; 78.345 SWEEP(nm); 78.346 } else { 78.347 // Still alive, clean up its inline caches 78.348 MutexLocker cl(CompiledIC_lock); 78.349 nm->cleanup_inline_caches(); 78.350 - // we coudn't transition this nmethod so don't immediately 78.351 - // request a rescan. If this method stays on the stack for a 78.352 - // long time we don't want to keep rescanning the code cache. 78.353 - _not_entrant_seen_on_stack++; 78.354 SWEEP(nm); 78.355 } 78.356 } else if (nm->is_unloaded()) { 78.357 @@ -485,8 +542,8 @@ 78.358 release_nmethod(nm); 78.359 _flushed_count++; 78.360 } else { 78.361 + // Code cache state change is tracked in make_zombie() 78.362 nm->make_zombie(); 78.363 - request_nmethod_marking(); 78.364 _zombified_count++; 78.365 SWEEP(nm); 78.366 } 78.367 @@ -514,7 +571,11 @@ 78.368 // The second condition ensures that methods are not immediately made not-entrant 78.369 // after compilation. 78.370 nm->make_not_entrant(); 78.371 - request_nmethod_marking(); 78.372 + // Code cache state change is tracked in make_not_entrant() 78.373 + if (PrintMethodFlushing && Verbose) { 78.374 + tty->print_cr("### Nmethod %d/" PTR_FORMAT "made not-entrant: hotness counter %d/%d threshold %f", 78.375 + nm->compile_id(), nm, nm->hotness_counter(), reset_val, threshold); 78.376 + } 78.377 } 78.378 } 78.379 }
79.1 --- a/src/share/vm/runtime/sweeper.hpp Wed Nov 20 11:08:09 2013 -0800 79.2 +++ b/src/share/vm/runtime/sweeper.hpp Thu Nov 21 12:30:35 2013 -0800 79.3 @@ -53,22 +53,22 @@ 79.4 // is full. 79.5 79.6 class NMethodSweeper : public AllStatic { 79.7 - static long _traversals; // Stack scan count, also sweep ID. 79.8 - static nmethod* _current; // Current nmethod 79.9 - static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache 79.10 - static int _flushed_count; // Nof. nmethods flushed in current sweep 79.11 - static int _zombified_count; // Nof. nmethods made zombie in current sweep 79.12 - static int _marked_count; // Nof. nmethods marked for reclaim in current sweep 79.13 + static long _traversals; // Stack scan count, also sweep ID. 79.14 + static long _time_counter; // Virtual time used to periodically invoke sweeper 79.15 + static long _last_sweep; // Value of _time_counter when the last sweep happened 79.16 + static nmethod* _current; // Current nmethod 79.17 + static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache 79.18 + static int _flushed_count; // Nof. nmethods flushed in current sweep 79.19 + static int _zombified_count; // Nof. nmethods made zombie in current sweep 79.20 + static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep 79.21 79.22 - static volatile int _invocations; // No. of invocations left until we are completed with this pass 79.23 - static volatile int _sweep_started; // Flag to control conc sweeper 79.24 - 79.25 - //The following are reset in mark_active_nmethods and synchronized by the safepoint 79.26 - static bool _request_mark_phase; // Indicates that a change has happend and we need another mark pahse, 79.27 - // always checked and reset at a safepoint so memory will be in sync. 79.28 - static int _locked_seen; // Number of locked nmethods encountered during the scan 79.29 - static int _not_entrant_seen_on_stack; // Number of not entrant nmethod were are still on stack 79.30 - 79.31 + static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass 79.32 + static volatile int _sweep_started; // Flag to control conc sweeper 79.33 + static volatile bool _should_sweep; // Indicates if we should invoke the sweeper 79.34 + static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from: 79.35 + // 1) alive -> not_entrant 79.36 + // 2) not_entrant -> zombie 79.37 + // 3) zombie -> marked_for_reclamation 79.38 // Stat counters 79.39 static int _total_nof_methods_reclaimed; // Accumulated nof methods flushed 79.40 static jlong _total_time_sweeping; // Accumulated time sweeping 79.41 @@ -81,9 +81,6 @@ 79.42 79.43 static bool sweep_in_progress(); 79.44 static void sweep_code_cache(); 79.45 - static void request_nmethod_marking() { _request_mark_phase = true; } 79.46 - static void reset_nmethod_marking() { _request_mark_phase = false; } 79.47 - static bool need_marking_phase() { return _request_mark_phase; } 79.48 79.49 static int _hotness_counter_reset_val; 79.50 79.51 @@ -109,13 +106,8 @@ 79.52 79.53 static int sort_nmethods_by_hotness(nmethod** nm1, nmethod** nm2); 79.54 static int hotness_counter_reset_val(); 79.55 - 79.56 - static void notify() { 79.57 - // Request a new sweep of the code cache from the beginning. No 79.58 - // need to synchronize the setting of this flag since it only 79.59 - // changes to false at safepoint so we can never overwrite it with false. 79.60 - request_nmethod_marking(); 79.61 - } 79.62 + static void report_state_change(nmethod* nm); 79.63 + static void possibly_enable_sweeper(); 79.64 }; 79.65 79.66 #endif // SHARE_VM_RUNTIME_SWEEPER_HPP
80.1 --- a/src/share/vm/utilities/globalDefinitions.hpp Wed Nov 20 11:08:09 2013 -0800 80.2 +++ b/src/share/vm/utilities/globalDefinitions.hpp Thu Nov 21 12:30:35 2013 -0800 80.3 @@ -459,6 +459,13 @@ 80.4 return (void*) align_size_up_((uintptr_t)addr, size); 80.5 } 80.6 80.7 +// Align down with a lower bound. If the aligning results in 0, return 'alignment'. 80.8 + 80.9 +inline size_t align_size_down_bounded(size_t size, size_t alignment) { 80.10 + size_t aligned_size = align_size_down_(size, alignment); 80.11 + return aligned_size > 0 ? aligned_size : alignment; 80.12 +} 80.13 + 80.14 // Clamp an address to be within a specific page 80.15 // 1. If addr is on the page it is returned as is 80.16 // 2. If addr is above the page_address the start of the *next* page will be returned
81.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 81.2 +++ b/test/compiler/intrinsics/mathexact/CompareTest.java Thu Nov 21 12:30:35 2013 -0800 81.3 @@ -0,0 +1,61 @@ 81.4 +/* 81.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 81.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 81.7 + * 81.8 + * This code is free software; you can redistribute it and/or modify it 81.9 + * under the terms of the GNU General Public License version 2 only, as 81.10 + * published by the Free Software Foundation. 81.11 + * 81.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 81.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 81.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 81.15 + * version 2 for more details (a copy is included in the LICENSE file that 81.16 + * accompanied this code). 81.17 + * 81.18 + * You should have received a copy of the GNU General Public License version 81.19 + * 2 along with this work; if not, write to the Free Software Foundation, 81.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 81.21 + * 81.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 81.23 + * or visit www.oracle.com if you need additional information or have any 81.24 + * questions. 81.25 + */ 81.26 + 81.27 +/* 81.28 + * @test 81.29 + * @bug 8026722 81.30 + * @summary Verify that the compare after addExact is a signed compare 81.31 + * @compile CompareTest.java 81.32 + * @run main CompareTest 81.33 + * 81.34 + */ 81.35 + 81.36 +public class CompareTest { 81.37 + public static long store = 0; 81.38 + public static long addValue = 1231; 81.39 + 81.40 + public static void main(String[] args) { 81.41 + for (int i = 0; i < 20000; ++i) { 81.42 + runTest(i, i); 81.43 + runTest(i-1, i); 81.44 + } 81.45 + } 81.46 + 81.47 + public static long create(long value, int v) { 81.48 + if ((value | v) == 0) { 81.49 + return 0; 81.50 + } 81.51 + 81.52 + // C2 turned this test into unsigned test when a control edge was set on the Cmp 81.53 + if (value < -31557014167219200L || value > 31556889864403199L) { 81.54 + throw new RuntimeException("error"); 81.55 + } 81.56 + 81.57 + return value; 81.58 + } 81.59 + 81.60 + public static void runTest(long value, int value2) { 81.61 + long res = Math.addExact(value, addValue); 81.62 + store = create(res, Math.floorMod(value2, 100000)); 81.63 + } 81.64 +}
82.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 82.2 +++ b/test/compiler/intrinsics/mathexact/GVNTest.java Thu Nov 21 12:30:35 2013 -0800 82.3 @@ -0,0 +1,60 @@ 82.4 +/* 82.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 82.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 82.7 + * 82.8 + * This code is free software; you can redistribute it and/or modify it 82.9 + * under the terms of the GNU General Public License version 2 only, as 82.10 + * published by the Free Software Foundation. 82.11 + * 82.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 82.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 82.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 82.15 + * version 2 for more details (a copy is included in the LICENSE file that 82.16 + * accompanied this code). 82.17 + * 82.18 + * You should have received a copy of the GNU General Public License version 82.19 + * 2 along with this work; if not, write to the Free Software Foundation, 82.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 82.21 + * 82.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 82.23 + * or visit www.oracle.com if you need additional information or have any 82.24 + * questions. 82.25 + */ 82.26 + 82.27 +/* 82.28 + * @test 82.29 + * @bug 8028207 82.30 + * @summary Verify that GVN doesn't mess up the two addExacts 82.31 + * @compile GVNTest.java 82.32 + * @run main GVNTest 82.33 + * 82.34 + */ 82.35 + 82.36 +public class GVNTest { 82.37 + public static int result = 0; 82.38 + public static int value = 93; 82.39 + public static void main(String[] args) { 82.40 + for (int i = 0; i < 50000; ++i) { 82.41 + result = runTest(value + i); 82.42 + result = runTest(value + i); 82.43 + result = runTest(value + i); 82.44 + result = runTest(value + i); 82.45 + result = runTest(value + i); 82.46 + } 82.47 + } 82.48 + 82.49 + public static int runTest(int value) { 82.50 + int v = value + value; 82.51 + int sum = 0; 82.52 + if (v < 4032) { 82.53 + for (int i = 0; i < 1023; ++i) { 82.54 + sum += Math.addExact(value, value); 82.55 + } 82.56 + } else { 82.57 + for (int i = 0; i < 321; ++i) { 82.58 + sum += Math.addExact(value, value); 82.59 + } 82.60 + } 82.61 + return sum + v; 82.62 + } 82.63 +}
83.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 83.2 +++ b/test/compiler/intrinsics/mathexact/SplitThruPhiTest.java Thu Nov 21 12:30:35 2013 -0800 83.3 @@ -0,0 +1,50 @@ 83.4 +/* 83.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 83.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 83.7 + * 83.8 + * This code is free software; you can redistribute it and/or modify it 83.9 + * under the terms of the GNU General Public License version 2 only, as 83.10 + * published by the Free Software Foundation. 83.11 + * 83.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 83.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 83.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 83.15 + * version 2 for more details (a copy is included in the LICENSE file that 83.16 + * accompanied this code). 83.17 + * 83.18 + * You should have received a copy of the GNU General Public License version 83.19 + * 2 along with this work; if not, write to the Free Software Foundation, 83.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 83.21 + * 83.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 83.23 + * or visit www.oracle.com if you need additional information or have any 83.24 + * questions. 83.25 + */ 83.26 + 83.27 +/* 83.28 + * @test 83.29 + * @bug 8028198 83.30 + * @summary Verify that split through phi does the right thing 83.31 + * @compile SplitThruPhiTest.java 83.32 + * @run main SplitThruPhiTest 83.33 + * 83.34 + */ 83.35 + 83.36 +public class SplitThruPhiTest { 83.37 + public static volatile int value = 19; 83.38 + public static int store = 0; 83.39 + public static void main(String[] args) { 83.40 + for (int i = 0; i < 150000; ++i) { 83.41 + store = runTest(value); 83.42 + } 83.43 + } 83.44 + 83.45 + public static int runTest(int val) { 83.46 + int result = Math.addExact(val, 1); 83.47 + int total = 0; 83.48 + for (int i = val; i < 200; i = Math.addExact(i, 1)) { 83.49 + total += i; 83.50 + } 83.51 + return total; 83.52 + } 83.53 +}
84.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 84.2 +++ b/test/compiler/intrinsics/stringequals/TestStringEqualsBadLength.java Thu Nov 21 12:30:35 2013 -0800 84.3 @@ -0,0 +1,82 @@ 84.4 +/* 84.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 84.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 84.7 + * 84.8 + * This code is free software; you can redistribute it and/or modify it 84.9 + * under the terms of the GNU General Public License version 2 only, as 84.10 + * published by the Free Software Foundation. 84.11 + * 84.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 84.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 84.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 84.15 + * version 2 for more details (a copy is included in the LICENSE file that 84.16 + * accompanied this code). 84.17 + * 84.18 + * You should have received a copy of the GNU General Public License version 84.19 + * 2 along with this work; if not, write to the Free Software Foundation, 84.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 84.21 + * 84.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 84.23 + * or visit www.oracle.com if you need additional information or have any 84.24 + * questions. 84.25 + */ 84.26 + 84.27 +/* 84.28 + * @test 84.29 + * @bug 8027445 84.30 + * @summary String.equals() may be called with a length whose upper bits are not cleared 84.31 + * @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation TestStringEqualsBadLength 84.32 + * 84.33 + */ 84.34 + 84.35 +import java.util.Arrays; 84.36 + 84.37 +public class TestStringEqualsBadLength { 84.38 + 84.39 + int v1; 84.40 + int v2; 84.41 + 84.42 + boolean m(String s1) { 84.43 + int l = v2 - v1; // 0 - (-1) = 1. On 64 bit: 0xffffffff00000001 84.44 + char[] arr = new char[l]; 84.45 + arr[0] = 'a'; 84.46 + String s2 = new String(arr); 84.47 + // The string length is not reloaded but the value computed is 84.48 + // reused so pointer computation must not use 84.49 + // 0xffffffff00000001 84.50 + return s2.equals(s1); 84.51 + } 84.52 + 84.53 + // Same thing with String.compareTo() 84.54 + int m2(String s1) { 84.55 + int l = v2 - v1; 84.56 + char[] arr = new char[l+1]; 84.57 + arr[0] = 'a'; 84.58 + arr[1] = 'b'; 84.59 + String s2 = new String(arr); 84.60 + return s2.compareTo(s1); 84.61 + } 84.62 + 84.63 + // Same thing with equals() for arrays 84.64 + boolean m3(char[] arr1) { 84.65 + int l = v2 - v1; // 0 - (-1) = 1. On 64 bit: 0xffffffff00000001 84.66 + char[] arr2 = new char[l]; 84.67 + arr2[0] = 'a'; 84.68 + return Arrays.equals(arr2, arr1); 84.69 + } 84.70 + 84.71 + static public void main(String[] args) { 84.72 + TestStringEqualsBadLength tse = new TestStringEqualsBadLength(); 84.73 + tse.v1 = -1; 84.74 + tse.v2 = 0; 84.75 + char[] arr = new char[1]; 84.76 + arr[0] = 'a'; 84.77 + for (int i = 0; i < 20000; i++) { 84.78 + tse.m("a"); 84.79 + tse.m2("ab"); 84.80 + tse.m3(arr); 84.81 + } 84.82 + 84.83 + System.out.println("TEST PASSED"); 84.84 + } 84.85 +}
85.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 85.2 +++ b/test/compiler/profiling/TestUnexpectedProfilingMismatch.java Thu Nov 21 12:30:35 2013 -0800 85.3 @@ -0,0 +1,102 @@ 85.4 +/* 85.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 85.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 85.7 + * 85.8 + * This code is free software; you can redistribute it and/or modify it 85.9 + * under the terms of the GNU General Public License version 2 only, as 85.10 + * published by the Free Software Foundation. 85.11 + * 85.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 85.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 85.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 85.15 + * version 2 for more details (a copy is included in the LICENSE file that 85.16 + * accompanied this code). 85.17 + * 85.18 + * You should have received a copy of the GNU General Public License version 85.19 + * 2 along with this work; if not, write to the Free Software Foundation, 85.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 85.21 + * 85.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 85.23 + * or visit www.oracle.com if you need additional information or have any 85.24 + * questions. 85.25 + */ 85.26 + 85.27 +/* 85.28 + * @test 85.29 + * @bug 8027631 85.30 + * @summary profiling of arguments at calls cannot rely on signature of callee for types 85.31 + * @run main/othervm -XX:-BackgroundCompilation -XX:TieredStopAtLevel=3 -XX:TypeProfileLevel=111 -XX:Tier3InvocationThreshold=200 -XX:Tier0InvokeNotifyFreqLog=7 TestUnexpectedProfilingMismatch 85.32 + * 85.33 + */ 85.34 + 85.35 +import java.lang.invoke.*; 85.36 + 85.37 +public class TestUnexpectedProfilingMismatch { 85.38 + 85.39 + static class A { 85.40 + } 85.41 + 85.42 + static class B { 85.43 + } 85.44 + 85.45 + static void mA(A a) { 85.46 + } 85.47 + 85.48 + static void mB(B b) { 85.49 + } 85.50 + 85.51 + static final MethodHandle mhA; 85.52 + static final MethodHandle mhB; 85.53 + static { 85.54 + MethodHandles.Lookup lookup = MethodHandles.lookup(); 85.55 + MethodType mt = MethodType.methodType(void.class, A.class); 85.56 + MethodHandle res = null; 85.57 + try { 85.58 + res = lookup.findStatic(TestUnexpectedProfilingMismatch.class, "mA", mt); 85.59 + } catch(NoSuchMethodException ex) { 85.60 + } catch(IllegalAccessException ex) { 85.61 + } 85.62 + mhA = res; 85.63 + mt = MethodType.methodType(void.class, B.class); 85.64 + try { 85.65 + res = lookup.findStatic(TestUnexpectedProfilingMismatch.class, "mB", mt); 85.66 + } catch(NoSuchMethodException ex) { 85.67 + } catch(IllegalAccessException ex) { 85.68 + } 85.69 + mhB = res; 85.70 + } 85.71 + 85.72 + void m1(A a, boolean doit) throws Throwable { 85.73 + if (doit) { 85.74 + mhA.invoke(a); 85.75 + } 85.76 + } 85.77 + 85.78 + void m2(B b) throws Throwable { 85.79 + mhB.invoke(b); 85.80 + } 85.81 + 85.82 + static public void main(String[] args) { 85.83 + TestUnexpectedProfilingMismatch tih = new TestUnexpectedProfilingMismatch(); 85.84 + A a = new A(); 85.85 + B b = new B(); 85.86 + try { 85.87 + for (int i = 0; i < 256 - 1; i++) { 85.88 + tih.m1(a, true); 85.89 + } 85.90 + // Will trigger the compilation but will also run once 85.91 + // more interpreted with a non null MDO which it will 85.92 + // update. Make it skip the body of the method. 85.93 + tih.m1(a, false); 85.94 + // Compile this one as well and do the profiling 85.95 + for (int i = 0; i < 256; i++) { 85.96 + tih.m2(b); 85.97 + } 85.98 + // Will run and see a conflict 85.99 + tih.m1(a, true); 85.100 + } catch(Throwable ex) { 85.101 + ex.printStackTrace(); 85.102 + } 85.103 + System.out.println("TEST PASSED"); 85.104 + } 85.105 +}
86.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 86.2 +++ b/test/compiler/profiling/unloadingconflict/B.java Thu Nov 21 12:30:35 2013 -0800 86.3 @@ -0,0 +1,25 @@ 86.4 +/* 86.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 86.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 86.7 + * 86.8 + * This code is free software; you can redistribute it and/or modify it 86.9 + * under the terms of the GNU General Public License version 2 only, as 86.10 + * published by the Free Software Foundation. 86.11 + * 86.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 86.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 86.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 86.15 + * version 2 for more details (a copy is included in the LICENSE file that 86.16 + * accompanied this code). 86.17 + * 86.18 + * You should have received a copy of the GNU General Public License version 86.19 + * 2 along with this work; if not, write to the Free Software Foundation, 86.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 86.21 + * 86.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 86.23 + * or visit www.oracle.com if you need additional information or have any 86.24 + * questions. 86.25 + */ 86.26 + 86.27 +public class B { 86.28 +}
87.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 87.2 +++ b/test/compiler/profiling/unloadingconflict/TestProfileConflictClassUnloading.java Thu Nov 21 12:30:35 2013 -0800 87.3 @@ -0,0 +1,88 @@ 87.4 +/* 87.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 87.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 87.7 + * 87.8 + * This code is free software; you can redistribute it and/or modify it 87.9 + * under the terms of the GNU General Public License version 2 only, as 87.10 + * published by the Free Software Foundation. 87.11 + * 87.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 87.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 87.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 87.15 + * version 2 for more details (a copy is included in the LICENSE file that 87.16 + * accompanied this code). 87.17 + * 87.18 + * You should have received a copy of the GNU General Public License version 87.19 + * 2 along with this work; if not, write to the Free Software Foundation, 87.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 87.21 + * 87.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 87.23 + * or visit www.oracle.com if you need additional information or have any 87.24 + * questions. 87.25 + */ 87.26 + 87.27 +/* 87.28 + * @test 87.29 + * @bug 8027572 87.30 + * @summary class unloading resets profile, method compiled after the profile is first set and before class loading sets unknown bit with not recorded class 87.31 + * @build B 87.32 + * @run main/othervm -XX:TypeProfileLevel=222 -XX:-BackgroundCompilation TestProfileConflictClassUnloading 87.33 + * 87.34 + */ 87.35 + 87.36 +import java.net.MalformedURLException; 87.37 +import java.net.URL; 87.38 +import java.net.URLClassLoader; 87.39 +import java.nio.file.Paths; 87.40 + 87.41 +public class TestProfileConflictClassUnloading { 87.42 + static class A { 87.43 + } 87.44 + 87.45 + 87.46 + static void m1(Object o) { 87.47 + } 87.48 + 87.49 + static void m2(Object o) { 87.50 + m1(o); 87.51 + } 87.52 + 87.53 + static void m3(A a, boolean do_call) { 87.54 + if (!do_call) { 87.55 + return; 87.56 + } 87.57 + m2(a); 87.58 + } 87.59 + 87.60 + public static ClassLoader newClassLoader() { 87.61 + try { 87.62 + return new URLClassLoader(new URL[] { 87.63 + Paths.get(System.getProperty("test.classes",".")).toUri().toURL(), 87.64 + }, null); 87.65 + } catch (MalformedURLException e){ 87.66 + throw new RuntimeException("Unexpected URL conversion failure", e); 87.67 + } 87.68 + } 87.69 + 87.70 + public static void main(String[] args) throws Exception { 87.71 + ClassLoader loader = newClassLoader(); 87.72 + Object o = loader.loadClass("B").newInstance(); 87.73 + // collect conflicting profiles 87.74 + for (int i = 0; i < 5000; i++) { 87.75 + m2(o); 87.76 + } 87.77 + // prepare for conflict 87.78 + A a = new A(); 87.79 + for (int i = 0; i < 5000; i++) { 87.80 + m3(a, false); 87.81 + } 87.82 + // unload class in profile 87.83 + o = null; 87.84 + loader = null; 87.85 + System.gc(); 87.86 + // record the conflict 87.87 + m3(a, true); 87.88 + // trigger another GC 87.89 + System.gc(); 87.90 + } 87.91 +}
88.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 88.2 +++ b/test/compiler/regalloc/C1ObjectSpillInLogicOp.java Thu Nov 21 12:30:35 2013 -0800 88.3 @@ -0,0 +1,45 @@ 88.4 +/* 88.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 88.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 88.7 + * 88.8 + * This code is free software; you can redistribute it and/or modify it 88.9 + * under the terms of the GNU General Public License version 2 only, as 88.10 + * published by the Free Software Foundation. 88.11 + * 88.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 88.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 88.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 88.15 + * version 2 for more details (a copy is included in the LICENSE file that 88.16 + * accompanied this code). 88.17 + * 88.18 + * You should have received a copy of the GNU General Public License version 88.19 + * 2 along with this work; if not, write to the Free Software Foundation, 88.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 88.21 + * 88.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 88.23 + * or visit www.oracle.com if you need additional information or have any 88.24 + * questions. 88.25 + */ 88.26 + 88.27 +/* 88.28 + * @test 88.29 + * @bug 8027751 88.30 + * @summary C1 crashes generating G1 post-barrier in Unsafe.getAndSetObject() intrinsic because of the new value spill 88.31 + * @run main/othervm -XX:+UseG1GC C1ObjectSpillInLogicOp 88.32 + * 88.33 + * G1 barriers use logical operators (xor) on T_OBJECT mixed with T_LONG or T_INT. 88.34 + * The current implementation of logical operations on x86 in C1 doesn't allow for long operands to be on stack. 88.35 + * There is a special code in the register allocator that forces long arguments in registers on x86. However T_OBJECT 88.36 + * can be spilled just fine, and in that case the xor emission will fail. 88.37 + */ 88.38 + 88.39 +import java.util.concurrent.atomic.*; 88.40 +class C1ObjectSpillInLogicOp { 88.41 + static public void main(String[] args) { 88.42 + AtomicReferenceArray<Integer> x = new AtomicReferenceArray(128); 88.43 + Integer y = new Integer(0); 88.44 + for (int i = 0; i < 50000; i++) { 88.45 + x.getAndSet(i % x.length(), y); 88.46 + } 88.47 + } 88.48 +}
89.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 89.2 +++ b/test/compiler/uncommontrap/UncommonTrapStackBang.java Thu Nov 21 12:30:35 2013 -0800 89.3 @@ -0,0 +1,10908 @@ 89.4 +/* 89.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 89.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 89.7 + * 89.8 + * This code is free software; you can redistribute it and/or modify it 89.9 + * under the terms of the GNU General Public License version 2 only, as 89.10 + * published by the Free Software Foundation. 89.11 + * 89.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 89.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 89.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 89.15 + * version 2 for more details (a copy is included in the LICENSE file that 89.16 + * accompanied this code). 89.17 + * 89.18 + * You should have received a copy of the GNU General Public License version 89.19 + * 2 along with this work; if not, write to the Free Software Foundation, 89.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 89.21 + * 89.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 89.23 + * or visit www.oracle.com if you need additional information or have any 89.24 + * questions. 89.25 + * 89.26 + */ 89.27 + 89.28 +/** 89.29 + * @test 89.30 + * @bug 8026775 89.31 + * @summary Uncommon trap blob did not bang all the stack shadow pages 89.32 + * 89.33 + * @run main/othervm -server -XX:+IgnoreUnrecognizedVMOptions -XX:+TieredCompilation UncommonTrapStackBang 89.34 + * @run main/othervm -server -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation UncommonTrapStackBang 89.35 + * 89.36 + * 89.37 + * Note: This test does not reproduce the problem with absolute 89.38 + * certainty. Empirically the bug reproduces on Windows some 80+% of 89.39 + * the time. Setting everything up to fail in 100% of the cases turns 89.40 + * out to be tricky at best. 89.41 + * 89.42 + * 89.43 + * The goal of this test is to set up the following stack: 89.44 + * 89.45 + * doIt() 89.46 + * eatStack() 89.47 + * ... 89.48 + * eatStack() 89.49 + * run() 89.50 + * 89.51 + * 89.52 + * When doIt() gets executed it will hit an uncommon trap and expand 89.53 + * into a huge interpreter frame. The doIt method then calls the 89.54 + * compiled version of StringBuilder.<init>() which does a single 89.55 + * stack bang StackShadowPages down. 89.56 + * 89.57 + * The uncommon trap blob is supposed to prepare for the interpreter 89.58 + * by pre-touching stack pages. The bug was that it didn't correctly 89.59 + * pre-touch all the stack shadow pages, leaving a "hole" on the stack 89.60 + * which raises an exception on Windows when the stack bang in 89.61 + * StringBuilder is performed. 89.62 + */ 89.63 +public class UncommonTrapStackBang extends Thread { 89.64 + class Foo { } 89.65 + 89.66 + public static void main(String[] args) throws Exception { 89.67 + doWarmup(); 89.68 + 89.69 + // Fork off a new thread to increase odds of the stack being unmapped 89.70 + UncommonTrapStackBang htsb = new UncommonTrapStackBang(); 89.71 + htsb.run(); 89.72 + htsb.join(); 89.73 + } 89.74 + 89.75 + // Make sure: 89.76 + // 89.77 + // a) StringBuilder.<init>()V is compiled 89.78 + // b) doIt() is compiled with an uncommon trap in the unlikely path 89.79 + public static void doWarmup() { 89.80 + for (int i = 0; i < 100_000; i++) { 89.81 + new StringBuilder(); 89.82 + 89.83 + doIt(false); 89.84 + } 89.85 + } 89.86 + 89.87 + public void run() { 89.88 + eatStack(200); 89.89 + } 89.90 + 89.91 + // Consume some stack to get down to some unused/unmapped pages, 89.92 + // then call doIt and provoke the uncommon trap/deoptimization 89.93 + private void eatStack(int n) { 89.94 + if (n <= 0) { 89.95 + doIt(true); 89.96 + return; 89.97 + } 89.98 + 89.99 + eatStack(n - 1); 89.100 + } 89.101 + 89.102 + static public void doIt(boolean unlikely) { 89.103 + int i0; 89.104 + int i1; 89.105 + int i2; 89.106 + int i3; 89.107 + int i4; 89.108 + int i5; 89.109 + int i6; 89.110 + int i7; 89.111 + int i8; 89.112 + int i9; 89.113 + int i10; 89.114 + int i11; 89.115 + int i12; 89.116 + int i13; 89.117 + int i14; 89.118 + int i15; 89.119 + int i16; 89.120 + int i17; 89.121 + int i18; 89.122 + int i19; 89.123 + int i20; 89.124 + int i21; 89.125 + int i22; 89.126 + int i23; 89.127 + int i24; 89.128 + int i25; 89.129 + int i26; 89.130 + int i27; 89.131 + int i28; 89.132 + int i29; 89.133 + int i30; 89.134 + int i31; 89.135 + int i32; 89.136 + int i33; 89.137 + int i34; 89.138 + int i35; 89.139 + int i36; 89.140 + int i37; 89.141 + int i38; 89.142 + int i39; 89.143 + int i40; 89.144 + int i41; 89.145 + int i42; 89.146 + int i43; 89.147 + int i44; 89.148 + int i45; 89.149 + int i46; 89.150 + int i47; 89.151 + int i48; 89.152 + int i49; 89.153 + int i50; 89.154 + int i51; 89.155 + int i52; 89.156 + int i53; 89.157 + int i54; 89.158 + int i55; 89.159 + int i56; 89.160 + int i57; 89.161 + int i58; 89.162 + int i59; 89.163 + int i60; 89.164 + int i61; 89.165 + int i62; 89.166 + int i63; 89.167 + int i64; 89.168 + int i65; 89.169 + int i66; 89.170 + int i67; 89.171 + int i68; 89.172 + int i69; 89.173 + int i70; 89.174 + int i71; 89.175 + int i72; 89.176 + int i73; 89.177 + int i74; 89.178 + int i75; 89.179 + int i76; 89.180 + int i77; 89.181 + int i78; 89.182 + int i79; 89.183 + int i80; 89.184 + int i81; 89.185 + int i82; 89.186 + int i83; 89.187 + int i84; 89.188 + int i85; 89.189 + int i86; 89.190 + int i87; 89.191 + int i88; 89.192 + int i89; 89.193 + int i90; 89.194 + int i91; 89.195 + int i92; 89.196 + int i93; 89.197 + int i94; 89.198 + int i95; 89.199 + int i96; 89.200 + int i97; 89.201 + int i98; 89.202 + int i99; 89.203 + int i100; 89.204 + int i101; 89.205 + int i102; 89.206 + int i103; 89.207 + int i104; 89.208 + int i105; 89.209 + int i106; 89.210 + int i107; 89.211 + int i108; 89.212 + int i109; 89.213 + int i110; 89.214 + int i111; 89.215 + int i112; 89.216 + int i113; 89.217 + int i114; 89.218 + int i115; 89.219 + int i116; 89.220 + int i117; 89.221 + int i118; 89.222 + int i119; 89.223 + int i120; 89.224 + int i121; 89.225 + int i122; 89.226 + int i123; 89.227 + int i124; 89.228 + int i125; 89.229 + int i126; 89.230 + int i127; 89.231 + int i128; 89.232 + int i129; 89.233 + int i130; 89.234 + int i131; 89.235 + int i132; 89.236 + int i133; 89.237 + int i134; 89.238 + int i135; 89.239 + int i136; 89.240 + int i137; 89.241 + int i138; 89.242 + int i139; 89.243 + int i140; 89.244 + int i141; 89.245 + int i142; 89.246 + int i143; 89.247 + int i144; 89.248 + int i145; 89.249 + int i146; 89.250 + int i147; 89.251 + int i148; 89.252 + int i149; 89.253 + int i150; 89.254 + int i151; 89.255 + int i152; 89.256 + int i153; 89.257 + int i154; 89.258 + int i155; 89.259 + int i156; 89.260 + int i157; 89.261 + int i158; 89.262 + int i159; 89.263 + int i160; 89.264 + int i161; 89.265 + int i162; 89.266 + int i163; 89.267 + int i164; 89.268 + int i165; 89.269 + int i166; 89.270 + int i167; 89.271 + int i168; 89.272 + int i169; 89.273 + int i170; 89.274 + int i171; 89.275 + int i172; 89.276 + int i173; 89.277 + int i174; 89.278 + int i175; 89.279 + int i176; 89.280 + int i177; 89.281 + int i178; 89.282 + int i179; 89.283 + int i180; 89.284 + int i181; 89.285 + int i182; 89.286 + int i183; 89.287 + int i184; 89.288 + int i185; 89.289 + int i186; 89.290 + int i187; 89.291 + int i188; 89.292 + int i189; 89.293 + int i190; 89.294 + int i191; 89.295 + int i192; 89.296 + int i193; 89.297 + int i194; 89.298 + int i195; 89.299 + int i196; 89.300 + int i197; 89.301 + int i198; 89.302 + int i199; 89.303 + int i200; 89.304 + int i201; 89.305 + int i202; 89.306 + int i203; 89.307 + int i204; 89.308 + int i205; 89.309 + int i206; 89.310 + int i207; 89.311 + int i208; 89.312 + int i209; 89.313 + int i210; 89.314 + int i211; 89.315 + int i212; 89.316 + int i213; 89.317 + int i214; 89.318 + int i215; 89.319 + int i216; 89.320 + int i217; 89.321 + int i218; 89.322 + int i219; 89.323 + int i220; 89.324 + int i221; 89.325 + int i222; 89.326 + int i223; 89.327 + int i224; 89.328 + int i225; 89.329 + int i226; 89.330 + int i227; 89.331 + int i228; 89.332 + int i229; 89.333 + int i230; 89.334 + int i231; 89.335 + int i232; 89.336 + int i233; 89.337 + int i234; 89.338 + int i235; 89.339 + int i236; 89.340 + int i237; 89.341 + int i238; 89.342 + int i239; 89.343 + int i240; 89.344 + int i241; 89.345 + int i242; 89.346 + int i243; 89.347 + int i244; 89.348 + int i245; 89.349 + int i246; 89.350 + int i247; 89.351 + int i248; 89.352 + int i249; 89.353 + int i250; 89.354 + int i251; 89.355 + int i252; 89.356 + int i253; 89.357 + int i254; 89.358 + int i255; 89.359 + int i256; 89.360 + int i257; 89.361 + int i258; 89.362 + int i259; 89.363 + int i260; 89.364 + int i261; 89.365 + int i262; 89.366 + int i263; 89.367 + int i264; 89.368 + int i265; 89.369 + int i266; 89.370 + int i267; 89.371 + int i268; 89.372 + int i269; 89.373 + int i270; 89.374 + int i271; 89.375 + int i272; 89.376 + int i273; 89.377 + int i274; 89.378 + int i275; 89.379 + int i276; 89.380 + int i277; 89.381 + int i278; 89.382 + int i279; 89.383 + int i280; 89.384 + int i281; 89.385 + int i282; 89.386 + int i283; 89.387 + int i284; 89.388 + int i285; 89.389 + int i286; 89.390 + int i287; 89.391 + int i288; 89.392 + int i289; 89.393 + int i290; 89.394 + int i291; 89.395 + int i292; 89.396 + int i293; 89.397 + int i294; 89.398 + int i295; 89.399 + int i296; 89.400 + int i297; 89.401 + int i298; 89.402 + int i299; 89.403 + int i300; 89.404 + int i301; 89.405 + int i302; 89.406 + int i303; 89.407 + int i304; 89.408 + int i305; 89.409 + int i306; 89.410 + int i307; 89.411 + int i308; 89.412 + int i309; 89.413 + int i310; 89.414 + int i311; 89.415 + int i312; 89.416 + int i313; 89.417 + int i314; 89.418 + int i315; 89.419 + int i316; 89.420 + int i317; 89.421 + int i318; 89.422 + int i319; 89.423 + int i320; 89.424 + int i321; 89.425 + int i322; 89.426 + int i323; 89.427 + int i324; 89.428 + int i325; 89.429 + int i326; 89.430 + int i327; 89.431 + int i328; 89.432 + int i329; 89.433 + int i330; 89.434 + int i331; 89.435 + int i332; 89.436 + int i333; 89.437 + int i334; 89.438 + int i335; 89.439 + int i336; 89.440 + int i337; 89.441 + int i338; 89.442 + int i339; 89.443 + int i340; 89.444 + int i341; 89.445 + int i342; 89.446 + int i343; 89.447 + int i344; 89.448 + int i345; 89.449 + int i346; 89.450 + int i347; 89.451 + int i348; 89.452 + int i349; 89.453 + int i350; 89.454 + int i351; 89.455 + int i352; 89.456 + int i353; 89.457 + int i354; 89.458 + int i355; 89.459 + int i356; 89.460 + int i357; 89.461 + int i358; 89.462 + int i359; 89.463 + int i360; 89.464 + int i361; 89.465 + int i362; 89.466 + int i363; 89.467 + int i364; 89.468 + int i365; 89.469 + int i366; 89.470 + int i367; 89.471 + int i368; 89.472 + int i369; 89.473 + int i370; 89.474 + int i371; 89.475 + int i372; 89.476 + int i373; 89.477 + int i374; 89.478 + int i375; 89.479 + int i376; 89.480 + int i377; 89.481 + int i378; 89.482 + int i379; 89.483 + int i380; 89.484 + int i381; 89.485 + int i382; 89.486 + int i383; 89.487 + int i384; 89.488 + int i385; 89.489 + int i386; 89.490 + int i387; 89.491 + int i388; 89.492 + int i389; 89.493 + int i390; 89.494 + int i391; 89.495 + int i392; 89.496 + int i393; 89.497 + int i394; 89.498 + int i395; 89.499 + int i396; 89.500 + int i397; 89.501 + int i398; 89.502 + int i399; 89.503 + int i400; 89.504 + int i401; 89.505 + int i402; 89.506 + int i403; 89.507 + int i404; 89.508 + int i405; 89.509 + int i406; 89.510 + int i407; 89.511 + int i408; 89.512 + int i409; 89.513 + int i410; 89.514 + int i411; 89.515 + int i412; 89.516 + int i413; 89.517 + int i414; 89.518 + int i415; 89.519 + int i416; 89.520 + int i417; 89.521 + int i418; 89.522 + int i419; 89.523 + int i420; 89.524 + int i421; 89.525 + int i422; 89.526 + int i423; 89.527 + int i424; 89.528 + int i425; 89.529 + int i426; 89.530 + int i427; 89.531 + int i428; 89.532 + int i429; 89.533 + int i430; 89.534 + int i431; 89.535 + int i432; 89.536 + int i433; 89.537 + int i434; 89.538 + int i435; 89.539 + int i436; 89.540 + int i437; 89.541 + int i438; 89.542 + int i439; 89.543 + int i440; 89.544 + int i441; 89.545 + int i442; 89.546 + int i443; 89.547 + int i444; 89.548 + int i445; 89.549 + int i446; 89.550 + int i447; 89.551 + int i448; 89.552 + int i449; 89.553 + int i450; 89.554 + int i451; 89.555 + int i452; 89.556 + int i453; 89.557 + int i454; 89.558 + int i455; 89.559 + int i456; 89.560 + int i457; 89.561 + int i458; 89.562 + int i459; 89.563 + int i460; 89.564 + int i461; 89.565 + int i462; 89.566 + int i463; 89.567 + int i464; 89.568 + int i465; 89.569 + int i466; 89.570 + int i467; 89.571 + int i468; 89.572 + int i469; 89.573 + int i470; 89.574 + int i471; 89.575 + int i472; 89.576 + int i473; 89.577 + int i474; 89.578 + int i475; 89.579 + int i476; 89.580 + int i477; 89.581 + int i478; 89.582 + int i479; 89.583 + int i480; 89.584 + int i481; 89.585 + int i482; 89.586 + int i483; 89.587 + int i484; 89.588 + int i485; 89.589 + int i486; 89.590 + int i487; 89.591 + int i488; 89.592 + int i489; 89.593 + int i490; 89.594 + int i491; 89.595 + int i492; 89.596 + int i493; 89.597 + int i494; 89.598 + int i495; 89.599 + int i496; 89.600 + int i497; 89.601 + int i498; 89.602 + int i499; 89.603 + int i500; 89.604 + int i501; 89.605 + int i502; 89.606 + int i503; 89.607 + int i504; 89.608 + int i505; 89.609 + int i506; 89.610 + int i507; 89.611 + int i508; 89.612 + int i509; 89.613 + int i510; 89.614 + int i511; 89.615 + int i512; 89.616 + int i513; 89.617 + int i514; 89.618 + int i515; 89.619 + int i516; 89.620 + int i517; 89.621 + int i518; 89.622 + int i519; 89.623 + int i520; 89.624 + int i521; 89.625 + int i522; 89.626 + int i523; 89.627 + int i524; 89.628 + int i525; 89.629 + int i526; 89.630 + int i527; 89.631 + int i528; 89.632 + int i529; 89.633 + int i530; 89.634 + int i531; 89.635 + int i532; 89.636 + int i533; 89.637 + int i534; 89.638 + int i535; 89.639 + int i536; 89.640 + int i537; 89.641 + int i538; 89.642 + int i539; 89.643 + int i540; 89.644 + int i541; 89.645 + int i542; 89.646 + int i543; 89.647 + int i544; 89.648 + int i545; 89.649 + int i546; 89.650 + int i547; 89.651 + int i548; 89.652 + int i549; 89.653 + int i550; 89.654 + int i551; 89.655 + int i552; 89.656 + int i553; 89.657 + int i554; 89.658 + int i555; 89.659 + int i556; 89.660 + int i557; 89.661 + int i558; 89.662 + int i559; 89.663 + int i560; 89.664 + int i561; 89.665 + int i562; 89.666 + int i563; 89.667 + int i564; 89.668 + int i565; 89.669 + int i566; 89.670 + int i567; 89.671 + int i568; 89.672 + int i569; 89.673 + int i570; 89.674 + int i571; 89.675 + int i572; 89.676 + int i573; 89.677 + int i574; 89.678 + int i575; 89.679 + int i576; 89.680 + int i577; 89.681 + int i578; 89.682 + int i579; 89.683 + int i580; 89.684 + int i581; 89.685 + int i582; 89.686 + int i583; 89.687 + int i584; 89.688 + int i585; 89.689 + int i586; 89.690 + int i587; 89.691 + int i588; 89.692 + int i589; 89.693 + int i590; 89.694 + int i591; 89.695 + int i592; 89.696 + int i593; 89.697 + int i594; 89.698 + int i595; 89.699 + int i596; 89.700 + int i597; 89.701 + int i598; 89.702 + int i599; 89.703 + int i600; 89.704 + int i601; 89.705 + int i602; 89.706 + int i603; 89.707 + int i604; 89.708 + int i605; 89.709 + int i606; 89.710 + int i607; 89.711 + int i608; 89.712 + int i609; 89.713 + int i610; 89.714 + int i611; 89.715 + int i612; 89.716 + int i613; 89.717 + int i614; 89.718 + int i615; 89.719 + int i616; 89.720 + int i617; 89.721 + int i618; 89.722 + int i619; 89.723 + int i620; 89.724 + int i621; 89.725 + int i622; 89.726 + int i623; 89.727 + int i624; 89.728 + int i625; 89.729 + int i626; 89.730 + int i627; 89.731 + int i628; 89.732 + int i629; 89.733 + int i630; 89.734 + int i631; 89.735 + int i632; 89.736 + int i633; 89.737 + int i634; 89.738 + int i635; 89.739 + int i636; 89.740 + int i637; 89.741 + int i638; 89.742 + int i639; 89.743 + int i640; 89.744 + int i641; 89.745 + int i642; 89.746 + int i643; 89.747 + int i644; 89.748 + int i645; 89.749 + int i646; 89.750 + int i647; 89.751 + int i648; 89.752 + int i649; 89.753 + int i650; 89.754 + int i651; 89.755 + int i652; 89.756 + int i653; 89.757 + int i654; 89.758 + int i655; 89.759 + int i656; 89.760 + int i657; 89.761 + int i658; 89.762 + int i659; 89.763 + int i660; 89.764 + int i661; 89.765 + int i662; 89.766 + int i663; 89.767 + int i664; 89.768 + int i665; 89.769 + int i666; 89.770 + int i667; 89.771 + int i668; 89.772 + int i669; 89.773 + int i670; 89.774 + int i671; 89.775 + int i672; 89.776 + int i673; 89.777 + int i674; 89.778 + int i675; 89.779 + int i676; 89.780 + int i677; 89.781 + int i678; 89.782 + int i679; 89.783 + int i680; 89.784 + int i681; 89.785 + int i682; 89.786 + int i683; 89.787 + int i684; 89.788 + int i685; 89.789 + int i686; 89.790 + int i687; 89.791 + int i688; 89.792 + int i689; 89.793 + int i690; 89.794 + int i691; 89.795 + int i692; 89.796 + int i693; 89.797 + int i694; 89.798 + int i695; 89.799 + int i696; 89.800 + int i697; 89.801 + int i698; 89.802 + int i699; 89.803 + int i700; 89.804 + int i701; 89.805 + int i702; 89.806 + int i703; 89.807 + int i704; 89.808 + int i705; 89.809 + int i706; 89.810 + int i707; 89.811 + int i708; 89.812 + int i709; 89.813 + int i710; 89.814 + int i711; 89.815 + int i712; 89.816 + int i713; 89.817 + int i714; 89.818 + int i715; 89.819 + int i716; 89.820 + int i717; 89.821 + int i718; 89.822 + int i719; 89.823 + int i720; 89.824 + int i721; 89.825 + int i722; 89.826 + int i723; 89.827 + int i724; 89.828 + int i725; 89.829 + int i726; 89.830 + int i727; 89.831 + int i728; 89.832 + int i729; 89.833 + int i730; 89.834 + int i731; 89.835 + int i732; 89.836 + int i733; 89.837 + int i734; 89.838 + int i735; 89.839 + int i736; 89.840 + int i737; 89.841 + int i738; 89.842 + int i739; 89.843 + int i740; 89.844 + int i741; 89.845 + int i742; 89.846 + int i743; 89.847 + int i744; 89.848 + int i745; 89.849 + int i746; 89.850 + int i747; 89.851 + int i748; 89.852 + int i749; 89.853 + int i750; 89.854 + int i751; 89.855 + int i752; 89.856 + int i753; 89.857 + int i754; 89.858 + int i755; 89.859 + int i756; 89.860 + int i757; 89.861 + int i758; 89.862 + int i759; 89.863 + int i760; 89.864 + int i761; 89.865 + int i762; 89.866 + int i763; 89.867 + int i764; 89.868 + int i765; 89.869 + int i766; 89.870 + int i767; 89.871 + int i768; 89.872 + int i769; 89.873 + int i770; 89.874 + int i771; 89.875 + int i772; 89.876 + int i773; 89.877 + int i774; 89.878 + int i775; 89.879 + int i776; 89.880 + int i777; 89.881 + int i778; 89.882 + int i779; 89.883 + int i780; 89.884 + int i781; 89.885 + int i782; 89.886 + int i783; 89.887 + int i784; 89.888 + int i785; 89.889 + int i786; 89.890 + int i787; 89.891 + int i788; 89.892 + int i789; 89.893 + int i790; 89.894 + int i791; 89.895 + int i792; 89.896 + int i793; 89.897 + int i794; 89.898 + int i795; 89.899 + int i796; 89.900 + int i797; 89.901 + int i798; 89.902 + int i799; 89.903 + int i800; 89.904 + int i801; 89.905 + int i802; 89.906 + int i803; 89.907 + int i804; 89.908 + int i805; 89.909 + int i806; 89.910 + int i807; 89.911 + int i808; 89.912 + int i809; 89.913 + int i810; 89.914 + int i811; 89.915 + int i812; 89.916 + int i813; 89.917 + int i814; 89.918 + int i815; 89.919 + int i816; 89.920 + int i817; 89.921 + int i818; 89.922 + int i819; 89.923 + int i820; 89.924 + int i821; 89.925 + int i822; 89.926 + int i823; 89.927 + int i824; 89.928 + int i825; 89.929 + int i826; 89.930 + int i827; 89.931 + int i828; 89.932 + int i829; 89.933 + int i830; 89.934 + int i831; 89.935 + int i832; 89.936 + int i833; 89.937 + int i834; 89.938 + int i835; 89.939 + int i836; 89.940 + int i837; 89.941 + int i838; 89.942 + int i839; 89.943 + int i840; 89.944 + int i841; 89.945 + int i842; 89.946 + int i843; 89.947 + int i844; 89.948 + int i845; 89.949 + int i846; 89.950 + int i847; 89.951 + int i848; 89.952 + int i849; 89.953 + int i850; 89.954 + int i851; 89.955 + int i852; 89.956 + int i853; 89.957 + int i854; 89.958 + int i855; 89.959 + int i856; 89.960 + int i857; 89.961 + int i858; 89.962 + int i859; 89.963 + int i860; 89.964 + int i861; 89.965 + int i862; 89.966 + int i863; 89.967 + int i864; 89.968 + int i865; 89.969 + int i866; 89.970 + int i867; 89.971 + int i868; 89.972 + int i869; 89.973 + int i870; 89.974 + int i871; 89.975 + int i872; 89.976 + int i873; 89.977 + int i874; 89.978 + int i875; 89.979 + int i876; 89.980 + int i877; 89.981 + int i878; 89.982 + int i879; 89.983 + int i880; 89.984 + int i881; 89.985 + int i882; 89.986 + int i883; 89.987 + int i884; 89.988 + int i885; 89.989 + int i886; 89.990 + int i887; 89.991 + int i888; 89.992 + int i889; 89.993 + int i890; 89.994 + int i891; 89.995 + int i892; 89.996 + int i893; 89.997 + int i894; 89.998 + int i895; 89.999 + int i896; 89.1000 + int i897; 89.1001 + int i898; 89.1002 + int i899; 89.1003 + int i900; 89.1004 + int i901; 89.1005 + int i902; 89.1006 + int i903; 89.1007 + int i904; 89.1008 + int i905; 89.1009 + int i906; 89.1010 + int i907; 89.1011 + int i908; 89.1012 + int i909; 89.1013 + int i910; 89.1014 + int i911; 89.1015 + int i912; 89.1016 + int i913; 89.1017 + int i914; 89.1018 + int i915; 89.1019 + int i916; 89.1020 + int i917; 89.1021 + int i918; 89.1022 + int i919; 89.1023 + int i920; 89.1024 + int i921; 89.1025 + int i922; 89.1026 + int i923; 89.1027 + int i924; 89.1028 + int i925; 89.1029 + int i926; 89.1030 + int i927; 89.1031 + int i928; 89.1032 + int i929; 89.1033 + int i930; 89.1034 + int i931; 89.1035 + int i932; 89.1036 + int i933; 89.1037 + int i934; 89.1038 + int i935; 89.1039 + int i936; 89.1040 + int i937; 89.1041 + int i938; 89.1042 + int i939; 89.1043 + int i940; 89.1044 + int i941; 89.1045 + int i942; 89.1046 + int i943; 89.1047 + int i944; 89.1048 + int i945; 89.1049 + int i946; 89.1050 + int i947; 89.1051 + int i948; 89.1052 + int i949; 89.1053 + int i950; 89.1054 + int i951; 89.1055 + int i952; 89.1056 + int i953; 89.1057 + int i954; 89.1058 + int i955; 89.1059 + int i956; 89.1060 + int i957; 89.1061 + int i958; 89.1062 + int i959; 89.1063 + int i960; 89.1064 + int i961; 89.1065 + int i962; 89.1066 + int i963; 89.1067 + int i964; 89.1068 + int i965; 89.1069 + int i966; 89.1070 + int i967; 89.1071 + int i968; 89.1072 + int i969; 89.1073 + int i970; 89.1074 + int i971; 89.1075 + int i972; 89.1076 + int i973; 89.1077 + int i974; 89.1078 + int i975; 89.1079 + int i976; 89.1080 + int i977; 89.1081 + int i978; 89.1082 + int i979; 89.1083 + int i980; 89.1084 + int i981; 89.1085 + int i982; 89.1086 + int i983; 89.1087 + int i984; 89.1088 + int i985; 89.1089 + int i986; 89.1090 + int i987; 89.1091 + int i988; 89.1092 + int i989; 89.1093 + int i990; 89.1094 + int i991; 89.1095 + int i992; 89.1096 + int i993; 89.1097 + int i994; 89.1098 + int i995; 89.1099 + int i996; 89.1100 + int i997; 89.1101 + int i998; 89.1102 + int i999; 89.1103 + int i1000; 89.1104 + int i1001; 89.1105 + int i1002; 89.1106 + int i1003; 89.1107 + int i1004; 89.1108 + int i1005; 89.1109 + int i1006; 89.1110 + int i1007; 89.1111 + int i1008; 89.1112 + int i1009; 89.1113 + int i1010; 89.1114 + int i1011; 89.1115 + int i1012; 89.1116 + int i1013; 89.1117 + int i1014; 89.1118 + int i1015; 89.1119 + int i1016; 89.1120 + int i1017; 89.1121 + int i1018; 89.1122 + int i1019; 89.1123 + int i1020; 89.1124 + int i1021; 89.1125 + int i1022; 89.1126 + int i1023; 89.1127 + int i1024; 89.1128 + int i1025; 89.1129 + int i1026; 89.1130 + int i1027; 89.1131 + int i1028; 89.1132 + int i1029; 89.1133 + int i1030; 89.1134 + int i1031; 89.1135 + int i1032; 89.1136 + int i1033; 89.1137 + int i1034; 89.1138 + int i1035; 89.1139 + int i1036; 89.1140 + int i1037; 89.1141 + int i1038; 89.1142 + int i1039; 89.1143 + int i1040; 89.1144 + int i1041; 89.1145 + int i1042; 89.1146 + int i1043; 89.1147 + int i1044; 89.1148 + int i1045; 89.1149 + int i1046; 89.1150 + int i1047; 89.1151 + int i1048; 89.1152 + int i1049; 89.1153 + int i1050; 89.1154 + int i1051; 89.1155 + int i1052; 89.1156 + int i1053; 89.1157 + int i1054; 89.1158 + int i1055; 89.1159 + int i1056; 89.1160 + int i1057; 89.1161 + int i1058; 89.1162 + int i1059; 89.1163 + int i1060; 89.1164 + int i1061; 89.1165 + int i1062; 89.1166 + int i1063; 89.1167 + int i1064; 89.1168 + int i1065; 89.1169 + int i1066; 89.1170 + int i1067; 89.1171 + int i1068; 89.1172 + int i1069; 89.1173 + int i1070; 89.1174 + int i1071; 89.1175 + int i1072; 89.1176 + int i1073; 89.1177 + int i1074; 89.1178 + int i1075; 89.1179 + int i1076; 89.1180 + int i1077; 89.1181 + int i1078; 89.1182 + int i1079; 89.1183 + int i1080; 89.1184 + int i1081; 89.1185 + int i1082; 89.1186 + int i1083; 89.1187 + int i1084; 89.1188 + int i1085; 89.1189 + int i1086; 89.1190 + int i1087; 89.1191 + int i1088; 89.1192 + int i1089; 89.1193 + int i1090; 89.1194 + int i1091; 89.1195 + int i1092; 89.1196 + int i1093; 89.1197 + int i1094; 89.1198 + int i1095; 89.1199 + int i1096; 89.1200 + int i1097; 89.1201 + int i1098; 89.1202 + int i1099; 89.1203 + int i1100; 89.1204 + int i1101; 89.1205 + int i1102; 89.1206 + int i1103; 89.1207 + int i1104; 89.1208 + int i1105; 89.1209 + int i1106; 89.1210 + int i1107; 89.1211 + int i1108; 89.1212 + int i1109; 89.1213 + int i1110; 89.1214 + int i1111; 89.1215 + int i1112; 89.1216 + int i1113; 89.1217 + int i1114; 89.1218 + int i1115; 89.1219 + int i1116; 89.1220 + int i1117; 89.1221 + int i1118; 89.1222 + int i1119; 89.1223 + int i1120; 89.1224 + int i1121; 89.1225 + int i1122; 89.1226 + int i1123; 89.1227 + int i1124; 89.1228 + int i1125; 89.1229 + int i1126; 89.1230 + int i1127; 89.1231 + int i1128; 89.1232 + int i1129; 89.1233 + int i1130; 89.1234 + int i1131; 89.1235 + int i1132; 89.1236 + int i1133; 89.1237 + int i1134; 89.1238 + int i1135; 89.1239 + int i1136; 89.1240 + int i1137; 89.1241 + int i1138; 89.1242 + int i1139; 89.1243 + int i1140; 89.1244 + int i1141; 89.1245 + int i1142; 89.1246 + int i1143; 89.1247 + int i1144; 89.1248 + int i1145; 89.1249 + int i1146; 89.1250 + int i1147; 89.1251 + int i1148; 89.1252 + int i1149; 89.1253 + int i1150; 89.1254 + int i1151; 89.1255 + int i1152; 89.1256 + int i1153; 89.1257 + int i1154; 89.1258 + int i1155; 89.1259 + int i1156; 89.1260 + int i1157; 89.1261 + int i1158; 89.1262 + int i1159; 89.1263 + int i1160; 89.1264 + int i1161; 89.1265 + int i1162; 89.1266 + int i1163; 89.1267 + int i1164; 89.1268 + int i1165; 89.1269 + int i1166; 89.1270 + int i1167; 89.1271 + int i1168; 89.1272 + int i1169; 89.1273 + int i1170; 89.1274 + int i1171; 89.1275 + int i1172; 89.1276 + int i1173; 89.1277 + int i1174; 89.1278 + int i1175; 89.1279 + int i1176; 89.1280 + int i1177; 89.1281 + int i1178; 89.1282 + int i1179; 89.1283 + int i1180; 89.1284 + int i1181; 89.1285 + int i1182; 89.1286 + int i1183; 89.1287 + int i1184; 89.1288 + int i1185; 89.1289 + int i1186; 89.1290 + int i1187; 89.1291 + int i1188; 89.1292 + int i1189; 89.1293 + int i1190; 89.1294 + int i1191; 89.1295 + int i1192; 89.1296 + int i1193; 89.1297 + int i1194; 89.1298 + int i1195; 89.1299 + int i1196; 89.1300 + int i1197; 89.1301 + int i1198; 89.1302 + int i1199; 89.1303 + int i1200; 89.1304 + int i1201; 89.1305 + int i1202; 89.1306 + int i1203; 89.1307 + int i1204; 89.1308 + int i1205; 89.1309 + int i1206; 89.1310 + int i1207; 89.1311 + int i1208; 89.1312 + int i1209; 89.1313 + int i1210; 89.1314 + int i1211; 89.1315 + int i1212; 89.1316 + int i1213; 89.1317 + int i1214; 89.1318 + int i1215; 89.1319 + int i1216; 89.1320 + int i1217; 89.1321 + int i1218; 89.1322 + int i1219; 89.1323 + int i1220; 89.1324 + int i1221; 89.1325 + int i1222; 89.1326 + int i1223; 89.1327 + int i1224; 89.1328 + int i1225; 89.1329 + int i1226; 89.1330 + int i1227; 89.1331 + int i1228; 89.1332 + int i1229; 89.1333 + int i1230; 89.1334 + int i1231; 89.1335 + int i1232; 89.1336 + int i1233; 89.1337 + int i1234; 89.1338 + int i1235; 89.1339 + int i1236; 89.1340 + int i1237; 89.1341 + int i1238; 89.1342 + int i1239; 89.1343 + int i1240; 89.1344 + int i1241; 89.1345 + int i1242; 89.1346 + int i1243; 89.1347 + int i1244; 89.1348 + int i1245; 89.1349 + int i1246; 89.1350 + int i1247; 89.1351 + int i1248; 89.1352 + int i1249; 89.1353 + int i1250; 89.1354 + int i1251; 89.1355 + int i1252; 89.1356 + int i1253; 89.1357 + int i1254; 89.1358 + int i1255; 89.1359 + int i1256; 89.1360 + int i1257; 89.1361 + int i1258; 89.1362 + int i1259; 89.1363 + int i1260; 89.1364 + int i1261; 89.1365 + int i1262; 89.1366 + int i1263; 89.1367 + int i1264; 89.1368 + int i1265; 89.1369 + int i1266; 89.1370 + int i1267; 89.1371 + int i1268; 89.1372 + int i1269; 89.1373 + int i1270; 89.1374 + int i1271; 89.1375 + int i1272; 89.1376 + int i1273; 89.1377 + int i1274; 89.1378 + int i1275; 89.1379 + int i1276; 89.1380 + int i1277; 89.1381 + int i1278; 89.1382 + int i1279; 89.1383 + int i1280; 89.1384 + int i1281; 89.1385 + int i1282; 89.1386 + int i1283; 89.1387 + int i1284; 89.1388 + int i1285; 89.1389 + int i1286; 89.1390 + int i1287; 89.1391 + int i1288; 89.1392 + int i1289; 89.1393 + int i1290; 89.1394 + int i1291; 89.1395 + int i1292; 89.1396 + int i1293; 89.1397 + int i1294; 89.1398 + int i1295; 89.1399 + int i1296; 89.1400 + int i1297; 89.1401 + int i1298; 89.1402 + int i1299; 89.1403 + int i1300; 89.1404 + int i1301; 89.1405 + int i1302; 89.1406 + int i1303; 89.1407 + int i1304; 89.1408 + int i1305; 89.1409 + int i1306; 89.1410 + int i1307; 89.1411 + int i1308; 89.1412 + int i1309; 89.1413 + int i1310; 89.1414 + int i1311; 89.1415 + int i1312; 89.1416 + int i1313; 89.1417 + int i1314; 89.1418 + int i1315; 89.1419 + int i1316; 89.1420 + int i1317; 89.1421 + int i1318; 89.1422 + int i1319; 89.1423 + int i1320; 89.1424 + int i1321; 89.1425 + int i1322; 89.1426 + int i1323; 89.1427 + int i1324; 89.1428 + int i1325; 89.1429 + int i1326; 89.1430 + int i1327; 89.1431 + int i1328; 89.1432 + int i1329; 89.1433 + int i1330; 89.1434 + int i1331; 89.1435 + int i1332; 89.1436 + int i1333; 89.1437 + int i1334; 89.1438 + int i1335; 89.1439 + int i1336; 89.1440 + int i1337; 89.1441 + int i1338; 89.1442 + int i1339; 89.1443 + int i1340; 89.1444 + int i1341; 89.1445 + int i1342; 89.1446 + int i1343; 89.1447 + int i1344; 89.1448 + int i1345; 89.1449 + int i1346; 89.1450 + int i1347; 89.1451 + int i1348; 89.1452 + int i1349; 89.1453 + int i1350; 89.1454 + int i1351; 89.1455 + int i1352; 89.1456 + int i1353; 89.1457 + int i1354; 89.1458 + int i1355; 89.1459 + int i1356; 89.1460 + int i1357; 89.1461 + int i1358; 89.1462 + int i1359; 89.1463 + int i1360; 89.1464 + int i1361; 89.1465 + int i1362; 89.1466 + int i1363; 89.1467 + int i1364; 89.1468 + int i1365; 89.1469 + int i1366; 89.1470 + int i1367; 89.1471 + int i1368; 89.1472 + int i1369; 89.1473 + int i1370; 89.1474 + int i1371; 89.1475 + int i1372; 89.1476 + int i1373; 89.1477 + int i1374; 89.1478 + int i1375; 89.1479 + int i1376; 89.1480 + int i1377; 89.1481 + int i1378; 89.1482 + int i1379; 89.1483 + int i1380; 89.1484 + int i1381; 89.1485 + int i1382; 89.1486 + int i1383; 89.1487 + int i1384; 89.1488 + int i1385; 89.1489 + int i1386; 89.1490 + int i1387; 89.1491 + int i1388; 89.1492 + int i1389; 89.1493 + int i1390; 89.1494 + int i1391; 89.1495 + int i1392; 89.1496 + int i1393; 89.1497 + int i1394; 89.1498 + int i1395; 89.1499 + int i1396; 89.1500 + int i1397; 89.1501 + int i1398; 89.1502 + int i1399; 89.1503 + int i1400; 89.1504 + int i1401; 89.1505 + int i1402; 89.1506 + int i1403; 89.1507 + int i1404; 89.1508 + int i1405; 89.1509 + int i1406; 89.1510 + int i1407; 89.1511 + int i1408; 89.1512 + int i1409; 89.1513 + int i1410; 89.1514 + int i1411; 89.1515 + int i1412; 89.1516 + int i1413; 89.1517 + int i1414; 89.1518 + int i1415; 89.1519 + int i1416; 89.1520 + int i1417; 89.1521 + int i1418; 89.1522 + int i1419; 89.1523 + int i1420; 89.1524 + int i1421; 89.1525 + int i1422; 89.1526 + int i1423; 89.1527 + int i1424; 89.1528 + int i1425; 89.1529 + int i1426; 89.1530 + int i1427; 89.1531 + int i1428; 89.1532 + int i1429; 89.1533 + int i1430; 89.1534 + int i1431; 89.1535 + int i1432; 89.1536 + int i1433; 89.1537 + int i1434; 89.1538 + int i1435; 89.1539 + int i1436; 89.1540 + int i1437; 89.1541 + int i1438; 89.1542 + int i1439; 89.1543 + int i1440; 89.1544 + int i1441; 89.1545 + int i1442; 89.1546 + int i1443; 89.1547 + int i1444; 89.1548 + int i1445; 89.1549 + int i1446; 89.1550 + int i1447; 89.1551 + int i1448; 89.1552 + int i1449; 89.1553 + int i1450; 89.1554 + int i1451; 89.1555 + int i1452; 89.1556 + int i1453; 89.1557 + int i1454; 89.1558 + int i1455; 89.1559 + int i1456; 89.1560 + int i1457; 89.1561 + int i1458; 89.1562 + int i1459; 89.1563 + int i1460; 89.1564 + int i1461; 89.1565 + int i1462; 89.1566 + int i1463; 89.1567 + int i1464; 89.1568 + int i1465; 89.1569 + int i1466; 89.1570 + int i1467; 89.1571 + int i1468; 89.1572 + int i1469; 89.1573 + int i1470; 89.1574 + int i1471; 89.1575 + int i1472; 89.1576 + int i1473; 89.1577 + int i1474; 89.1578 + int i1475; 89.1579 + int i1476; 89.1580 + int i1477; 89.1581 + int i1478; 89.1582 + int i1479; 89.1583 + int i1480; 89.1584 + int i1481; 89.1585 + int i1482; 89.1586 + int i1483; 89.1587 + int i1484; 89.1588 + int i1485; 89.1589 + int i1486; 89.1590 + int i1487; 89.1591 + int i1488; 89.1592 + int i1489; 89.1593 + int i1490; 89.1594 + int i1491; 89.1595 + int i1492; 89.1596 + int i1493; 89.1597 + int i1494; 89.1598 + int i1495; 89.1599 + int i1496; 89.1600 + int i1497; 89.1601 + int i1498; 89.1602 + int i1499; 89.1603 + int i1500; 89.1604 + int i1501; 89.1605 + int i1502; 89.1606 + int i1503; 89.1607 + int i1504; 89.1608 + int i1505; 89.1609 + int i1506; 89.1610 + int i1507; 89.1611 + int i1508; 89.1612 + int i1509; 89.1613 + int i1510; 89.1614 + int i1511; 89.1615 + int i1512; 89.1616 + int i1513; 89.1617 + int i1514; 89.1618 + int i1515; 89.1619 + int i1516; 89.1620 + int i1517; 89.1621 + int i1518; 89.1622 + int i1519; 89.1623 + int i1520; 89.1624 + int i1521; 89.1625 + int i1522; 89.1626 + int i1523; 89.1627 + int i1524; 89.1628 + int i1525; 89.1629 + int i1526; 89.1630 + int i1527; 89.1631 + int i1528; 89.1632 + int i1529; 89.1633 + int i1530; 89.1634 + int i1531; 89.1635 + int i1532; 89.1636 + int i1533; 89.1637 + int i1534; 89.1638 + int i1535; 89.1639 + int i1536; 89.1640 + int i1537; 89.1641 + int i1538; 89.1642 + int i1539; 89.1643 + int i1540; 89.1644 + int i1541; 89.1645 + int i1542; 89.1646 + int i1543; 89.1647 + int i1544; 89.1648 + int i1545; 89.1649 + int i1546; 89.1650 + int i1547; 89.1651 + int i1548; 89.1652 + int i1549; 89.1653 + int i1550; 89.1654 + int i1551; 89.1655 + int i1552; 89.1656 + int i1553; 89.1657 + int i1554; 89.1658 + int i1555; 89.1659 + int i1556; 89.1660 + int i1557; 89.1661 + int i1558; 89.1662 + int i1559; 89.1663 + int i1560; 89.1664 + int i1561; 89.1665 + int i1562; 89.1666 + int i1563; 89.1667 + int i1564; 89.1668 + int i1565; 89.1669 + int i1566; 89.1670 + int i1567; 89.1671 + int i1568; 89.1672 + int i1569; 89.1673 + int i1570; 89.1674 + int i1571; 89.1675 + int i1572; 89.1676 + int i1573; 89.1677 + int i1574; 89.1678 + int i1575; 89.1679 + int i1576; 89.1680 + int i1577; 89.1681 + int i1578; 89.1682 + int i1579; 89.1683 + int i1580; 89.1684 + int i1581; 89.1685 + int i1582; 89.1686 + int i1583; 89.1687 + int i1584; 89.1688 + int i1585; 89.1689 + int i1586; 89.1690 + int i1587; 89.1691 + int i1588; 89.1692 + int i1589; 89.1693 + int i1590; 89.1694 + int i1591; 89.1695 + int i1592; 89.1696 + int i1593; 89.1697 + int i1594; 89.1698 + int i1595; 89.1699 + int i1596; 89.1700 + int i1597; 89.1701 + int i1598; 89.1702 + int i1599; 89.1703 + int i1600; 89.1704 + int i1601; 89.1705 + int i1602; 89.1706 + int i1603; 89.1707 + int i1604; 89.1708 + int i1605; 89.1709 + int i1606; 89.1710 + int i1607; 89.1711 + int i1608; 89.1712 + int i1609; 89.1713 + int i1610; 89.1714 + int i1611; 89.1715 + int i1612; 89.1716 + int i1613; 89.1717 + int i1614; 89.1718 + int i1615; 89.1719 + int i1616; 89.1720 + int i1617; 89.1721 + int i1618; 89.1722 + int i1619; 89.1723 + int i1620; 89.1724 + int i1621; 89.1725 + int i1622; 89.1726 + int i1623; 89.1727 + int i1624; 89.1728 + int i1625; 89.1729 + int i1626; 89.1730 + int i1627; 89.1731 + int i1628; 89.1732 + int i1629; 89.1733 + int i1630; 89.1734 + int i1631; 89.1735 + int i1632; 89.1736 + int i1633; 89.1737 + int i1634; 89.1738 + int i1635; 89.1739 + int i1636; 89.1740 + int i1637; 89.1741 + int i1638; 89.1742 + int i1639; 89.1743 + int i1640; 89.1744 + int i1641; 89.1745 + int i1642; 89.1746 + int i1643; 89.1747 + int i1644; 89.1748 + int i1645; 89.1749 + int i1646; 89.1750 + int i1647; 89.1751 + int i1648; 89.1752 + int i1649; 89.1753 + int i1650; 89.1754 + int i1651; 89.1755 + int i1652; 89.1756 + int i1653; 89.1757 + int i1654; 89.1758 + int i1655; 89.1759 + int i1656; 89.1760 + int i1657; 89.1761 + int i1658; 89.1762 + int i1659; 89.1763 + int i1660; 89.1764 + int i1661; 89.1765 + int i1662; 89.1766 + int i1663; 89.1767 + int i1664; 89.1768 + int i1665; 89.1769 + int i1666; 89.1770 + int i1667; 89.1771 + int i1668; 89.1772 + int i1669; 89.1773 + int i1670; 89.1774 + int i1671; 89.1775 + int i1672; 89.1776 + int i1673; 89.1777 + int i1674; 89.1778 + int i1675; 89.1779 + int i1676; 89.1780 + int i1677; 89.1781 + int i1678; 89.1782 + int i1679; 89.1783 + int i1680; 89.1784 + int i1681; 89.1785 + int i1682; 89.1786 + int i1683; 89.1787 + int i1684; 89.1788 + int i1685; 89.1789 + int i1686; 89.1790 + int i1687; 89.1791 + int i1688; 89.1792 + int i1689; 89.1793 + int i1690; 89.1794 + int i1691; 89.1795 + int i1692; 89.1796 + int i1693; 89.1797 + int i1694; 89.1798 + int i1695; 89.1799 + int i1696; 89.1800 + int i1697; 89.1801 + int i1698; 89.1802 + int i1699; 89.1803 + int i1700; 89.1804 + int i1701; 89.1805 + int i1702; 89.1806 + int i1703; 89.1807 + int i1704; 89.1808 + int i1705; 89.1809 + int i1706; 89.1810 + int i1707; 89.1811 + int i1708; 89.1812 + int i1709; 89.1813 + int i1710; 89.1814 + int i1711; 89.1815 + int i1712; 89.1816 + int i1713; 89.1817 + int i1714; 89.1818 + int i1715; 89.1819 + int i1716; 89.1820 + int i1717; 89.1821 + int i1718; 89.1822 + int i1719; 89.1823 + int i1720; 89.1824 + int i1721; 89.1825 + int i1722; 89.1826 + int i1723; 89.1827 + int i1724; 89.1828 + int i1725; 89.1829 + int i1726; 89.1830 + int i1727; 89.1831 + int i1728; 89.1832 + int i1729; 89.1833 + int i1730; 89.1834 + int i1731; 89.1835 + int i1732; 89.1836 + int i1733; 89.1837 + int i1734; 89.1838 + int i1735; 89.1839 + int i1736; 89.1840 + int i1737; 89.1841 + int i1738; 89.1842 + int i1739; 89.1843 + int i1740; 89.1844 + int i1741; 89.1845 + int i1742; 89.1846 + int i1743; 89.1847 + int i1744; 89.1848 + int i1745; 89.1849 + int i1746; 89.1850 + int i1747; 89.1851 + int i1748; 89.1852 + int i1749; 89.1853 + int i1750; 89.1854 + int i1751; 89.1855 + int i1752; 89.1856 + int i1753; 89.1857 + int i1754; 89.1858 + int i1755; 89.1859 + int i1756; 89.1860 + int i1757; 89.1861 + int i1758; 89.1862 + int i1759; 89.1863 + int i1760; 89.1864 + int i1761; 89.1865 + int i1762; 89.1866 + int i1763; 89.1867 + int i1764; 89.1868 + int i1765; 89.1869 + int i1766; 89.1870 + int i1767; 89.1871 + int i1768; 89.1872 + int i1769; 89.1873 + int i1770; 89.1874 + int i1771; 89.1875 + int i1772; 89.1876 + int i1773; 89.1877 + int i1774; 89.1878 + int i1775; 89.1879 + int i1776; 89.1880 + int i1777; 89.1881 + int i1778; 89.1882 + int i1779; 89.1883 + int i1780; 89.1884 + int i1781; 89.1885 + int i1782; 89.1886 + int i1783; 89.1887 + int i1784; 89.1888 + int i1785; 89.1889 + int i1786; 89.1890 + int i1787; 89.1891 + int i1788; 89.1892 + int i1789; 89.1893 + int i1790; 89.1894 + int i1791; 89.1895 + int i1792; 89.1896 + int i1793; 89.1897 + int i1794; 89.1898 + int i1795; 89.1899 + int i1796; 89.1900 + int i1797; 89.1901 + int i1798; 89.1902 + int i1799; 89.1903 + int i1800; 89.1904 + int i1801; 89.1905 + int i1802; 89.1906 + int i1803; 89.1907 + int i1804; 89.1908 + int i1805; 89.1909 + int i1806; 89.1910 + int i1807; 89.1911 + int i1808; 89.1912 + int i1809; 89.1913 + int i1810; 89.1914 + int i1811; 89.1915 + int i1812; 89.1916 + int i1813; 89.1917 + int i1814; 89.1918 + int i1815; 89.1919 + int i1816; 89.1920 + int i1817; 89.1921 + int i1818; 89.1922 + int i1819; 89.1923 + int i1820; 89.1924 + int i1821; 89.1925 + int i1822; 89.1926 + int i1823; 89.1927 + int i1824; 89.1928 + int i1825; 89.1929 + int i1826; 89.1930 + int i1827; 89.1931 + int i1828; 89.1932 + int i1829; 89.1933 + int i1830; 89.1934 + int i1831; 89.1935 + int i1832; 89.1936 + int i1833; 89.1937 + int i1834; 89.1938 + int i1835; 89.1939 + int i1836; 89.1940 + int i1837; 89.1941 + int i1838; 89.1942 + int i1839; 89.1943 + int i1840; 89.1944 + int i1841; 89.1945 + int i1842; 89.1946 + int i1843; 89.1947 + int i1844; 89.1948 + int i1845; 89.1949 + int i1846; 89.1950 + int i1847; 89.1951 + int i1848; 89.1952 + int i1849; 89.1953 + int i1850; 89.1954 + int i1851; 89.1955 + int i1852; 89.1956 + int i1853; 89.1957 + int i1854; 89.1958 + int i1855; 89.1959 + int i1856; 89.1960 + int i1857; 89.1961 + int i1858; 89.1962 + int i1859; 89.1963 + int i1860; 89.1964 + int i1861; 89.1965 + int i1862; 89.1966 + int i1863; 89.1967 + int i1864; 89.1968 + int i1865; 89.1969 + int i1866; 89.1970 + int i1867; 89.1971 + int i1868; 89.1972 + int i1869; 89.1973 + int i1870; 89.1974 + int i1871; 89.1975 + int i1872; 89.1976 + int i1873; 89.1977 + int i1874; 89.1978 + int i1875; 89.1979 + int i1876; 89.1980 + int i1877; 89.1981 + int i1878; 89.1982 + int i1879; 89.1983 + int i1880; 89.1984 + int i1881; 89.1985 + int i1882; 89.1986 + int i1883; 89.1987 + int i1884; 89.1988 + int i1885; 89.1989 + int i1886; 89.1990 + int i1887; 89.1991 + int i1888; 89.1992 + int i1889; 89.1993 + int i1890; 89.1994 + int i1891; 89.1995 + int i1892; 89.1996 + int i1893; 89.1997 + int i1894; 89.1998 + int i1895; 89.1999 + int i1896; 89.2000 + int i1897; 89.2001 + int i1898; 89.2002 + int i1899; 89.2003 + int i1900; 89.2004 + int i1901; 89.2005 + int i1902; 89.2006 + int i1903; 89.2007 + int i1904; 89.2008 + int i1905; 89.2009 + int i1906; 89.2010 + int i1907; 89.2011 + int i1908; 89.2012 + int i1909; 89.2013 + int i1910; 89.2014 + int i1911; 89.2015 + int i1912; 89.2016 + int i1913; 89.2017 + int i1914; 89.2018 + int i1915; 89.2019 + int i1916; 89.2020 + int i1917; 89.2021 + int i1918; 89.2022 + int i1919; 89.2023 + int i1920; 89.2024 + int i1921; 89.2025 + int i1922; 89.2026 + int i1923; 89.2027 + int i1924; 89.2028 + int i1925; 89.2029 + int i1926; 89.2030 + int i1927; 89.2031 + int i1928; 89.2032 + int i1929; 89.2033 + int i1930; 89.2034 + int i1931; 89.2035 + int i1932; 89.2036 + int i1933; 89.2037 + int i1934; 89.2038 + int i1935; 89.2039 + int i1936; 89.2040 + int i1937; 89.2041 + int i1938; 89.2042 + int i1939; 89.2043 + int i1940; 89.2044 + int i1941; 89.2045 + int i1942; 89.2046 + int i1943; 89.2047 + int i1944; 89.2048 + int i1945; 89.2049 + int i1946; 89.2050 + int i1947; 89.2051 + int i1948; 89.2052 + int i1949; 89.2053 + int i1950; 89.2054 + int i1951; 89.2055 + int i1952; 89.2056 + int i1953; 89.2057 + int i1954; 89.2058 + int i1955; 89.2059 + int i1956; 89.2060 + int i1957; 89.2061 + int i1958; 89.2062 + int i1959; 89.2063 + int i1960; 89.2064 + int i1961; 89.2065 + int i1962; 89.2066 + int i1963; 89.2067 + int i1964; 89.2068 + int i1965; 89.2069 + int i1966; 89.2070 + int i1967; 89.2071 + int i1968; 89.2072 + int i1969; 89.2073 + int i1970; 89.2074 + int i1971; 89.2075 + int i1972; 89.2076 + int i1973; 89.2077 + int i1974; 89.2078 + int i1975; 89.2079 + int i1976; 89.2080 + int i1977; 89.2081 + int i1978; 89.2082 + int i1979; 89.2083 + int i1980; 89.2084 + int i1981; 89.2085 + int i1982; 89.2086 + int i1983; 89.2087 + int i1984; 89.2088 + int i1985; 89.2089 + int i1986; 89.2090 + int i1987; 89.2091 + int i1988; 89.2092 + int i1989; 89.2093 + int i1990; 89.2094 + int i1991; 89.2095 + int i1992; 89.2096 + int i1993; 89.2097 + int i1994; 89.2098 + int i1995; 89.2099 + int i1996; 89.2100 + int i1997; 89.2101 + int i1998; 89.2102 + int i1999; 89.2103 + int i2000; 89.2104 + int i2001; 89.2105 + int i2002; 89.2106 + int i2003; 89.2107 + int i2004; 89.2108 + int i2005; 89.2109 + int i2006; 89.2110 + int i2007; 89.2111 + int i2008; 89.2112 + int i2009; 89.2113 + int i2010; 89.2114 + int i2011; 89.2115 + int i2012; 89.2116 + int i2013; 89.2117 + int i2014; 89.2118 + int i2015; 89.2119 + int i2016; 89.2120 + int i2017; 89.2121 + int i2018; 89.2122 + int i2019; 89.2123 + int i2020; 89.2124 + int i2021; 89.2125 + int i2022; 89.2126 + int i2023; 89.2127 + int i2024; 89.2128 + int i2025; 89.2129 + int i2026; 89.2130 + int i2027; 89.2131 + int i2028; 89.2132 + int i2029; 89.2133 + int i2030; 89.2134 + int i2031; 89.2135 + int i2032; 89.2136 + int i2033; 89.2137 + int i2034; 89.2138 + int i2035; 89.2139 + int i2036; 89.2140 + int i2037; 89.2141 + int i2038; 89.2142 + int i2039; 89.2143 + int i2040; 89.2144 + int i2041; 89.2145 + int i2042; 89.2146 + int i2043; 89.2147 + int i2044; 89.2148 + int i2045; 89.2149 + int i2046; 89.2150 + int i2047; 89.2151 + int i2048; 89.2152 + int i2049; 89.2153 + int i2050; 89.2154 + int i2051; 89.2155 + int i2052; 89.2156 + int i2053; 89.2157 + int i2054; 89.2158 + int i2055; 89.2159 + int i2056; 89.2160 + int i2057; 89.2161 + int i2058; 89.2162 + int i2059; 89.2163 + int i2060; 89.2164 + int i2061; 89.2165 + int i2062; 89.2166 + int i2063; 89.2167 + int i2064; 89.2168 + int i2065; 89.2169 + int i2066; 89.2170 + int i2067; 89.2171 + int i2068; 89.2172 + int i2069; 89.2173 + int i2070; 89.2174 + int i2071; 89.2175 + int i2072; 89.2176 + int i2073; 89.2177 + int i2074; 89.2178 + int i2075; 89.2179 + int i2076; 89.2180 + int i2077; 89.2181 + int i2078; 89.2182 + int i2079; 89.2183 + int i2080; 89.2184 + int i2081; 89.2185 + int i2082; 89.2186 + int i2083; 89.2187 + int i2084; 89.2188 + int i2085; 89.2189 + int i2086; 89.2190 + int i2087; 89.2191 + int i2088; 89.2192 + int i2089; 89.2193 + int i2090; 89.2194 + int i2091; 89.2195 + int i2092; 89.2196 + int i2093; 89.2197 + int i2094; 89.2198 + int i2095; 89.2199 + int i2096; 89.2200 + int i2097; 89.2201 + int i2098; 89.2202 + int i2099; 89.2203 + int i2100; 89.2204 + int i2101; 89.2205 + int i2102; 89.2206 + int i2103; 89.2207 + int i2104; 89.2208 + int i2105; 89.2209 + int i2106; 89.2210 + int i2107; 89.2211 + int i2108; 89.2212 + int i2109; 89.2213 + int i2110; 89.2214 + int i2111; 89.2215 + int i2112; 89.2216 + int i2113; 89.2217 + int i2114; 89.2218 + int i2115; 89.2219 + int i2116; 89.2220 + int i2117; 89.2221 + int i2118; 89.2222 + int i2119; 89.2223 + int i2120; 89.2224 + int i2121; 89.2225 + int i2122; 89.2226 + int i2123; 89.2227 + int i2124; 89.2228 + int i2125; 89.2229 + int i2126; 89.2230 + int i2127; 89.2231 + int i2128; 89.2232 + int i2129; 89.2233 + int i2130; 89.2234 + int i2131; 89.2235 + int i2132; 89.2236 + int i2133; 89.2237 + int i2134; 89.2238 + int i2135; 89.2239 + int i2136; 89.2240 + int i2137; 89.2241 + int i2138; 89.2242 + int i2139; 89.2243 + int i2140; 89.2244 + int i2141; 89.2245 + int i2142; 89.2246 + int i2143; 89.2247 + int i2144; 89.2248 + int i2145; 89.2249 + int i2146; 89.2250 + int i2147; 89.2251 + int i2148; 89.2252 + int i2149; 89.2253 + int i2150; 89.2254 + int i2151; 89.2255 + int i2152; 89.2256 + int i2153; 89.2257 + int i2154; 89.2258 + int i2155; 89.2259 + int i2156; 89.2260 + int i2157; 89.2261 + int i2158; 89.2262 + int i2159; 89.2263 + int i2160; 89.2264 + int i2161; 89.2265 + int i2162; 89.2266 + int i2163; 89.2267 + int i2164; 89.2268 + int i2165; 89.2269 + int i2166; 89.2270 + int i2167; 89.2271 + int i2168; 89.2272 + int i2169; 89.2273 + int i2170; 89.2274 + int i2171; 89.2275 + int i2172; 89.2276 + int i2173; 89.2277 + int i2174; 89.2278 + int i2175; 89.2279 + int i2176; 89.2280 + int i2177; 89.2281 + int i2178; 89.2282 + int i2179; 89.2283 + int i2180; 89.2284 + int i2181; 89.2285 + int i2182; 89.2286 + int i2183; 89.2287 + int i2184; 89.2288 + int i2185; 89.2289 + int i2186; 89.2290 + int i2187; 89.2291 + int i2188; 89.2292 + int i2189; 89.2293 + int i2190; 89.2294 + int i2191; 89.2295 + int i2192; 89.2296 + int i2193; 89.2297 + int i2194; 89.2298 + int i2195; 89.2299 + int i2196; 89.2300 + int i2197; 89.2301 + int i2198; 89.2302 + int i2199; 89.2303 + int i2200; 89.2304 + int i2201; 89.2305 + int i2202; 89.2306 + int i2203; 89.2307 + int i2204; 89.2308 + int i2205; 89.2309 + int i2206; 89.2310 + int i2207; 89.2311 + int i2208; 89.2312 + int i2209; 89.2313 + int i2210; 89.2314 + int i2211; 89.2315 + int i2212; 89.2316 + int i2213; 89.2317 + int i2214; 89.2318 + int i2215; 89.2319 + int i2216; 89.2320 + int i2217; 89.2321 + int i2218; 89.2322 + int i2219; 89.2323 + int i2220; 89.2324 + int i2221; 89.2325 + int i2222; 89.2326 + int i2223; 89.2327 + int i2224; 89.2328 + int i2225; 89.2329 + int i2226; 89.2330 + int i2227; 89.2331 + int i2228; 89.2332 + int i2229; 89.2333 + int i2230; 89.2334 + int i2231; 89.2335 + int i2232; 89.2336 + int i2233; 89.2337 + int i2234; 89.2338 + int i2235; 89.2339 + int i2236; 89.2340 + int i2237; 89.2341 + int i2238; 89.2342 + int i2239; 89.2343 + int i2240; 89.2344 + int i2241; 89.2345 + int i2242; 89.2346 + int i2243; 89.2347 + int i2244; 89.2348 + int i2245; 89.2349 + int i2246; 89.2350 + int i2247; 89.2351 + int i2248; 89.2352 + int i2249; 89.2353 + int i2250; 89.2354 + int i2251; 89.2355 + int i2252; 89.2356 + int i2253; 89.2357 + int i2254; 89.2358 + int i2255; 89.2359 + int i2256; 89.2360 + int i2257; 89.2361 + int i2258; 89.2362 + int i2259; 89.2363 + int i2260; 89.2364 + int i2261; 89.2365 + int i2262; 89.2366 + int i2263; 89.2367 + int i2264; 89.2368 + int i2265; 89.2369 + int i2266; 89.2370 + int i2267; 89.2371 + int i2268; 89.2372 + int i2269; 89.2373 + int i2270; 89.2374 + int i2271; 89.2375 + int i2272; 89.2376 + int i2273; 89.2377 + int i2274; 89.2378 + int i2275; 89.2379 + int i2276; 89.2380 + int i2277; 89.2381 + int i2278; 89.2382 + int i2279; 89.2383 + int i2280; 89.2384 + int i2281; 89.2385 + int i2282; 89.2386 + int i2283; 89.2387 + int i2284; 89.2388 + int i2285; 89.2389 + int i2286; 89.2390 + int i2287; 89.2391 + int i2288; 89.2392 + int i2289; 89.2393 + int i2290; 89.2394 + int i2291; 89.2395 + int i2292; 89.2396 + int i2293; 89.2397 + int i2294; 89.2398 + int i2295; 89.2399 + int i2296; 89.2400 + int i2297; 89.2401 + int i2298; 89.2402 + int i2299; 89.2403 + int i2300; 89.2404 + int i2301; 89.2405 + int i2302; 89.2406 + int i2303; 89.2407 + int i2304; 89.2408 + int i2305; 89.2409 + int i2306; 89.2410 + int i2307; 89.2411 + int i2308; 89.2412 + int i2309; 89.2413 + int i2310; 89.2414 + int i2311; 89.2415 + int i2312; 89.2416 + int i2313; 89.2417 + int i2314; 89.2418 + int i2315; 89.2419 + int i2316; 89.2420 + int i2317; 89.2421 + int i2318; 89.2422 + int i2319; 89.2423 + int i2320; 89.2424 + int i2321; 89.2425 + int i2322; 89.2426 + int i2323; 89.2427 + int i2324; 89.2428 + int i2325; 89.2429 + int i2326; 89.2430 + int i2327; 89.2431 + int i2328; 89.2432 + int i2329; 89.2433 + int i2330; 89.2434 + int i2331; 89.2435 + int i2332; 89.2436 + int i2333; 89.2437 + int i2334; 89.2438 + int i2335; 89.2439 + int i2336; 89.2440 + int i2337; 89.2441 + int i2338; 89.2442 + int i2339; 89.2443 + int i2340; 89.2444 + int i2341; 89.2445 + int i2342; 89.2446 + int i2343; 89.2447 + int i2344; 89.2448 + int i2345; 89.2449 + int i2346; 89.2450 + int i2347; 89.2451 + int i2348; 89.2452 + int i2349; 89.2453 + int i2350; 89.2454 + int i2351; 89.2455 + int i2352; 89.2456 + int i2353; 89.2457 + int i2354; 89.2458 + int i2355; 89.2459 + int i2356; 89.2460 + int i2357; 89.2461 + int i2358; 89.2462 + int i2359; 89.2463 + int i2360; 89.2464 + int i2361; 89.2465 + int i2362; 89.2466 + int i2363; 89.2467 + int i2364; 89.2468 + int i2365; 89.2469 + int i2366; 89.2470 + int i2367; 89.2471 + int i2368; 89.2472 + int i2369; 89.2473 + int i2370; 89.2474 + int i2371; 89.2475 + int i2372; 89.2476 + int i2373; 89.2477 + int i2374; 89.2478 + int i2375; 89.2479 + int i2376; 89.2480 + int i2377; 89.2481 + int i2378; 89.2482 + int i2379; 89.2483 + int i2380; 89.2484 + int i2381; 89.2485 + int i2382; 89.2486 + int i2383; 89.2487 + int i2384; 89.2488 + int i2385; 89.2489 + int i2386; 89.2490 + int i2387; 89.2491 + int i2388; 89.2492 + int i2389; 89.2493 + int i2390; 89.2494 + int i2391; 89.2495 + int i2392; 89.2496 + int i2393; 89.2497 + int i2394; 89.2498 + int i2395; 89.2499 + int i2396; 89.2500 + int i2397; 89.2501 + int i2398; 89.2502 + int i2399; 89.2503 + int i2400; 89.2504 + int i2401; 89.2505 + int i2402; 89.2506 + int i2403; 89.2507 + int i2404; 89.2508 + int i2405; 89.2509 + int i2406; 89.2510 + int i2407; 89.2511 + int i2408; 89.2512 + int i2409; 89.2513 + int i2410; 89.2514 + int i2411; 89.2515 + int i2412; 89.2516 + int i2413; 89.2517 + int i2414; 89.2518 + int i2415; 89.2519 + int i2416; 89.2520 + int i2417; 89.2521 + int i2418; 89.2522 + int i2419; 89.2523 + int i2420; 89.2524 + int i2421; 89.2525 + int i2422; 89.2526 + int i2423; 89.2527 + int i2424; 89.2528 + int i2425; 89.2529 + int i2426; 89.2530 + int i2427; 89.2531 + int i2428; 89.2532 + int i2429; 89.2533 + int i2430; 89.2534 + int i2431; 89.2535 + int i2432; 89.2536 + int i2433; 89.2537 + int i2434; 89.2538 + int i2435; 89.2539 + int i2436; 89.2540 + int i2437; 89.2541 + int i2438; 89.2542 + int i2439; 89.2543 + int i2440; 89.2544 + int i2441; 89.2545 + int i2442; 89.2546 + int i2443; 89.2547 + int i2444; 89.2548 + int i2445; 89.2549 + int i2446; 89.2550 + int i2447; 89.2551 + int i2448; 89.2552 + int i2449; 89.2553 + int i2450; 89.2554 + int i2451; 89.2555 + int i2452; 89.2556 + int i2453; 89.2557 + int i2454; 89.2558 + int i2455; 89.2559 + int i2456; 89.2560 + int i2457; 89.2561 + int i2458; 89.2562 + int i2459; 89.2563 + int i2460; 89.2564 + int i2461; 89.2565 + int i2462; 89.2566 + int i2463; 89.2567 + int i2464; 89.2568 + int i2465; 89.2569 + int i2466; 89.2570 + int i2467; 89.2571 + int i2468; 89.2572 + int i2469; 89.2573 + int i2470; 89.2574 + int i2471; 89.2575 + int i2472; 89.2576 + int i2473; 89.2577 + int i2474; 89.2578 + int i2475; 89.2579 + int i2476; 89.2580 + int i2477; 89.2581 + int i2478; 89.2582 + int i2479; 89.2583 + int i2480; 89.2584 + int i2481; 89.2585 + int i2482; 89.2586 + int i2483; 89.2587 + int i2484; 89.2588 + int i2485; 89.2589 + int i2486; 89.2590 + int i2487; 89.2591 + int i2488; 89.2592 + int i2489; 89.2593 + int i2490; 89.2594 + int i2491; 89.2595 + int i2492; 89.2596 + int i2493; 89.2597 + int i2494; 89.2598 + int i2495; 89.2599 + int i2496; 89.2600 + int i2497; 89.2601 + int i2498; 89.2602 + int i2499; 89.2603 + int i2500; 89.2604 + int i2501; 89.2605 + int i2502; 89.2606 + int i2503; 89.2607 + int i2504; 89.2608 + int i2505; 89.2609 + int i2506; 89.2610 + int i2507; 89.2611 + int i2508; 89.2612 + int i2509; 89.2613 + int i2510; 89.2614 + int i2511; 89.2615 + int i2512; 89.2616 + int i2513; 89.2617 + int i2514; 89.2618 + int i2515; 89.2619 + int i2516; 89.2620 + int i2517; 89.2621 + int i2518; 89.2622 + int i2519; 89.2623 + int i2520; 89.2624 + int i2521; 89.2625 + int i2522; 89.2626 + int i2523; 89.2627 + int i2524; 89.2628 + int i2525; 89.2629 + int i2526; 89.2630 + int i2527; 89.2631 + int i2528; 89.2632 + int i2529; 89.2633 + int i2530; 89.2634 + int i2531; 89.2635 + int i2532; 89.2636 + int i2533; 89.2637 + int i2534; 89.2638 + int i2535; 89.2639 + int i2536; 89.2640 + int i2537; 89.2641 + int i2538; 89.2642 + int i2539; 89.2643 + int i2540; 89.2644 + int i2541; 89.2645 + int i2542; 89.2646 + int i2543; 89.2647 + int i2544; 89.2648 + int i2545; 89.2649 + int i2546; 89.2650 + int i2547; 89.2651 + int i2548; 89.2652 + int i2549; 89.2653 + int i2550; 89.2654 + int i2551; 89.2655 + int i2552; 89.2656 + int i2553; 89.2657 + int i2554; 89.2658 + int i2555; 89.2659 + int i2556; 89.2660 + int i2557; 89.2661 + int i2558; 89.2662 + int i2559; 89.2663 + int i2560; 89.2664 + int i2561; 89.2665 + int i2562; 89.2666 + int i2563; 89.2667 + int i2564; 89.2668 + int i2565; 89.2669 + int i2566; 89.2670 + int i2567; 89.2671 + int i2568; 89.2672 + int i2569; 89.2673 + int i2570; 89.2674 + int i2571; 89.2675 + int i2572; 89.2676 + int i2573; 89.2677 + int i2574; 89.2678 + int i2575; 89.2679 + int i2576; 89.2680 + int i2577; 89.2681 + int i2578; 89.2682 + int i2579; 89.2683 + int i2580; 89.2684 + int i2581; 89.2685 + int i2582; 89.2686 + int i2583; 89.2687 + int i2584; 89.2688 + int i2585; 89.2689 + int i2586; 89.2690 + int i2587; 89.2691 + int i2588; 89.2692 + int i2589; 89.2693 + int i2590; 89.2694 + int i2591; 89.2695 + int i2592; 89.2696 + int i2593; 89.2697 + int i2594; 89.2698 + int i2595; 89.2699 + int i2596; 89.2700 + int i2597; 89.2701 + int i2598; 89.2702 + int i2599; 89.2703 + int i2600; 89.2704 + int i2601; 89.2705 + int i2602; 89.2706 + int i2603; 89.2707 + int i2604; 89.2708 + int i2605; 89.2709 + int i2606; 89.2710 + int i2607; 89.2711 + int i2608; 89.2712 + int i2609; 89.2713 + int i2610; 89.2714 + int i2611; 89.2715 + int i2612; 89.2716 + int i2613; 89.2717 + int i2614; 89.2718 + int i2615; 89.2719 + int i2616; 89.2720 + int i2617; 89.2721 + int i2618; 89.2722 + int i2619; 89.2723 + int i2620; 89.2724 + int i2621; 89.2725 + int i2622; 89.2726 + int i2623; 89.2727 + int i2624; 89.2728 + int i2625; 89.2729 + int i2626; 89.2730 + int i2627; 89.2731 + int i2628; 89.2732 + int i2629; 89.2733 + int i2630; 89.2734 + int i2631; 89.2735 + int i2632; 89.2736 + int i2633; 89.2737 + int i2634; 89.2738 + int i2635; 89.2739 + int i2636; 89.2740 + int i2637; 89.2741 + int i2638; 89.2742 + int i2639; 89.2743 + int i2640; 89.2744 + int i2641; 89.2745 + int i2642; 89.2746 + int i2643; 89.2747 + int i2644; 89.2748 + int i2645; 89.2749 + int i2646; 89.2750 + int i2647; 89.2751 + int i2648; 89.2752 + int i2649; 89.2753 + int i2650; 89.2754 + int i2651; 89.2755 + int i2652; 89.2756 + int i2653; 89.2757 + int i2654; 89.2758 + int i2655; 89.2759 + int i2656; 89.2760 + int i2657; 89.2761 + int i2658; 89.2762 + int i2659; 89.2763 + int i2660; 89.2764 + int i2661; 89.2765 + int i2662; 89.2766 + int i2663; 89.2767 + int i2664; 89.2768 + int i2665; 89.2769 + int i2666; 89.2770 + int i2667; 89.2771 + int i2668; 89.2772 + int i2669; 89.2773 + int i2670; 89.2774 + int i2671; 89.2775 + int i2672; 89.2776 + int i2673; 89.2777 + int i2674; 89.2778 + int i2675; 89.2779 + int i2676; 89.2780 + int i2677; 89.2781 + int i2678; 89.2782 + int i2679; 89.2783 + int i2680; 89.2784 + int i2681; 89.2785 + int i2682; 89.2786 + int i2683; 89.2787 + int i2684; 89.2788 + int i2685; 89.2789 + int i2686; 89.2790 + int i2687; 89.2791 + int i2688; 89.2792 + int i2689; 89.2793 + int i2690; 89.2794 + int i2691; 89.2795 + int i2692; 89.2796 + int i2693; 89.2797 + int i2694; 89.2798 + int i2695; 89.2799 + int i2696; 89.2800 + int i2697; 89.2801 + int i2698; 89.2802 + int i2699; 89.2803 + int i2700; 89.2804 + int i2701; 89.2805 + int i2702; 89.2806 + int i2703; 89.2807 + int i2704; 89.2808 + int i2705; 89.2809 + int i2706; 89.2810 + int i2707; 89.2811 + int i2708; 89.2812 + int i2709; 89.2813 + int i2710; 89.2814 + int i2711; 89.2815 + int i2712; 89.2816 + int i2713; 89.2817 + int i2714; 89.2818 + int i2715; 89.2819 + int i2716; 89.2820 + int i2717; 89.2821 + int i2718; 89.2822 + int i2719; 89.2823 + int i2720; 89.2824 + int i2721; 89.2825 + int i2722; 89.2826 + int i2723; 89.2827 + int i2724; 89.2828 + int i2725; 89.2829 + int i2726; 89.2830 + int i2727; 89.2831 + int i2728; 89.2832 + int i2729; 89.2833 + int i2730; 89.2834 + int i2731; 89.2835 + int i2732; 89.2836 + int i2733; 89.2837 + int i2734; 89.2838 + int i2735; 89.2839 + int i2736; 89.2840 + int i2737; 89.2841 + int i2738; 89.2842 + int i2739; 89.2843 + int i2740; 89.2844 + int i2741; 89.2845 + int i2742; 89.2846 + int i2743; 89.2847 + int i2744; 89.2848 + int i2745; 89.2849 + int i2746; 89.2850 + int i2747; 89.2851 + int i2748; 89.2852 + int i2749; 89.2853 + int i2750; 89.2854 + int i2751; 89.2855 + int i2752; 89.2856 + int i2753; 89.2857 + int i2754; 89.2858 + int i2755; 89.2859 + int i2756; 89.2860 + int i2757; 89.2861 + int i2758; 89.2862 + int i2759; 89.2863 + int i2760; 89.2864 + int i2761; 89.2865 + int i2762; 89.2866 + int i2763; 89.2867 + int i2764; 89.2868 + int i2765; 89.2869 + int i2766; 89.2870 + int i2767; 89.2871 + int i2768; 89.2872 + int i2769; 89.2873 + int i2770; 89.2874 + int i2771; 89.2875 + int i2772; 89.2876 + int i2773; 89.2877 + int i2774; 89.2878 + int i2775; 89.2879 + int i2776; 89.2880 + int i2777; 89.2881 + int i2778; 89.2882 + int i2779; 89.2883 + int i2780; 89.2884 + int i2781; 89.2885 + int i2782; 89.2886 + int i2783; 89.2887 + int i2784; 89.2888 + int i2785; 89.2889 + int i2786; 89.2890 + int i2787; 89.2891 + int i2788; 89.2892 + int i2789; 89.2893 + int i2790; 89.2894 + int i2791; 89.2895 + int i2792; 89.2896 + int i2793; 89.2897 + int i2794; 89.2898 + int i2795; 89.2899 + int i2796; 89.2900 + int i2797; 89.2901 + int i2798; 89.2902 + int i2799; 89.2903 + int i2800; 89.2904 + int i2801; 89.2905 + int i2802; 89.2906 + int i2803; 89.2907 + int i2804; 89.2908 + int i2805; 89.2909 + int i2806; 89.2910 + int i2807; 89.2911 + int i2808; 89.2912 + int i2809; 89.2913 + int i2810; 89.2914 + int i2811; 89.2915 + int i2812; 89.2916 + int i2813; 89.2917 + int i2814; 89.2918 + int i2815; 89.2919 + int i2816; 89.2920 + int i2817; 89.2921 + int i2818; 89.2922 + int i2819; 89.2923 + int i2820; 89.2924 + int i2821; 89.2925 + int i2822; 89.2926 + int i2823; 89.2927 + int i2824; 89.2928 + int i2825; 89.2929 + int i2826; 89.2930 + int i2827; 89.2931 + int i2828; 89.2932 + int i2829; 89.2933 + int i2830; 89.2934 + int i2831; 89.2935 + int i2832; 89.2936 + int i2833; 89.2937 + int i2834; 89.2938 + int i2835; 89.2939 + int i2836; 89.2940 + int i2837; 89.2941 + int i2838; 89.2942 + int i2839; 89.2943 + int i2840; 89.2944 + int i2841; 89.2945 + int i2842; 89.2946 + int i2843; 89.2947 + int i2844; 89.2948 + int i2845; 89.2949 + int i2846; 89.2950 + int i2847; 89.2951 + int i2848; 89.2952 + int i2849; 89.2953 + int i2850; 89.2954 + int i2851; 89.2955 + int i2852; 89.2956 + int i2853; 89.2957 + int i2854; 89.2958 + int i2855; 89.2959 + int i2856; 89.2960 + int i2857; 89.2961 + int i2858; 89.2962 + int i2859; 89.2963 + int i2860; 89.2964 + int i2861; 89.2965 + int i2862; 89.2966 + int i2863; 89.2967 + int i2864; 89.2968 + int i2865; 89.2969 + int i2866; 89.2970 + int i2867; 89.2971 + int i2868; 89.2972 + int i2869; 89.2973 + int i2870; 89.2974 + int i2871; 89.2975 + int i2872; 89.2976 + int i2873; 89.2977 + int i2874; 89.2978 + int i2875; 89.2979 + int i2876; 89.2980 + int i2877; 89.2981 + int i2878; 89.2982 + int i2879; 89.2983 + int i2880; 89.2984 + int i2881; 89.2985 + int i2882; 89.2986 + int i2883; 89.2987 + int i2884; 89.2988 + int i2885; 89.2989 + int i2886; 89.2990 + int i2887; 89.2991 + int i2888; 89.2992 + int i2889; 89.2993 + int i2890; 89.2994 + int i2891; 89.2995 + int i2892; 89.2996 + int i2893; 89.2997 + int i2894; 89.2998 + int i2895; 89.2999 + int i2896; 89.3000 + int i2897; 89.3001 + int i2898; 89.3002 + int i2899; 89.3003 + int i2900; 89.3004 + int i2901; 89.3005 + int i2902; 89.3006 + int i2903; 89.3007 + int i2904; 89.3008 + int i2905; 89.3009 + int i2906; 89.3010 + int i2907; 89.3011 + int i2908; 89.3012 + int i2909; 89.3013 + int i2910; 89.3014 + int i2911; 89.3015 + int i2912; 89.3016 + int i2913; 89.3017 + int i2914; 89.3018 + int i2915; 89.3019 + int i2916; 89.3020 + int i2917; 89.3021 + int i2918; 89.3022 + int i2919; 89.3023 + int i2920; 89.3024 + int i2921; 89.3025 + int i2922; 89.3026 + int i2923; 89.3027 + int i2924; 89.3028 + int i2925; 89.3029 + int i2926; 89.3030 + int i2927; 89.3031 + int i2928; 89.3032 + int i2929; 89.3033 + int i2930; 89.3034 + int i2931; 89.3035 + int i2932; 89.3036 + int i2933; 89.3037 + int i2934; 89.3038 + int i2935; 89.3039 + int i2936; 89.3040 + int i2937; 89.3041 + int i2938; 89.3042 + int i2939; 89.3043 + int i2940; 89.3044 + int i2941; 89.3045 + int i2942; 89.3046 + int i2943; 89.3047 + int i2944; 89.3048 + int i2945; 89.3049 + int i2946; 89.3050 + int i2947; 89.3051 + int i2948; 89.3052 + int i2949; 89.3053 + int i2950; 89.3054 + int i2951; 89.3055 + int i2952; 89.3056 + int i2953; 89.3057 + int i2954; 89.3058 + int i2955; 89.3059 + int i2956; 89.3060 + int i2957; 89.3061 + int i2958; 89.3062 + int i2959; 89.3063 + int i2960; 89.3064 + int i2961; 89.3065 + int i2962; 89.3066 + int i2963; 89.3067 + int i2964; 89.3068 + int i2965; 89.3069 + int i2966; 89.3070 + int i2967; 89.3071 + int i2968; 89.3072 + int i2969; 89.3073 + int i2970; 89.3074 + int i2971; 89.3075 + int i2972; 89.3076 + int i2973; 89.3077 + int i2974; 89.3078 + int i2975; 89.3079 + int i2976; 89.3080 + int i2977; 89.3081 + int i2978; 89.3082 + int i2979; 89.3083 + int i2980; 89.3084 + int i2981; 89.3085 + int i2982; 89.3086 + int i2983; 89.3087 + int i2984; 89.3088 + int i2985; 89.3089 + int i2986; 89.3090 + int i2987; 89.3091 + int i2988; 89.3092 + int i2989; 89.3093 + int i2990; 89.3094 + int i2991; 89.3095 + int i2992; 89.3096 + int i2993; 89.3097 + int i2994; 89.3098 + int i2995; 89.3099 + int i2996; 89.3100 + int i2997; 89.3101 + int i2998; 89.3102 + int i2999; 89.3103 + int i3000; 89.3104 + int i3001; 89.3105 + int i3002; 89.3106 + int i3003; 89.3107 + int i3004; 89.3108 + int i3005; 89.3109 + int i3006; 89.3110 + int i3007; 89.3111 + int i3008; 89.3112 + int i3009; 89.3113 + int i3010; 89.3114 + int i3011; 89.3115 + int i3012; 89.3116 + int i3013; 89.3117 + int i3014; 89.3118 + int i3015; 89.3119 + int i3016; 89.3120 + int i3017; 89.3121 + int i3018; 89.3122 + int i3019; 89.3123 + int i3020; 89.3124 + int i3021; 89.3125 + int i3022; 89.3126 + int i3023; 89.3127 + int i3024; 89.3128 + int i3025; 89.3129 + int i3026; 89.3130 + int i3027; 89.3131 + int i3028; 89.3132 + int i3029; 89.3133 + int i3030; 89.3134 + int i3031; 89.3135 + int i3032; 89.3136 + int i3033; 89.3137 + int i3034; 89.3138 + int i3035; 89.3139 + int i3036; 89.3140 + int i3037; 89.3141 + int i3038; 89.3142 + int i3039; 89.3143 + int i3040; 89.3144 + int i3041; 89.3145 + int i3042; 89.3146 + int i3043; 89.3147 + int i3044; 89.3148 + int i3045; 89.3149 + int i3046; 89.3150 + int i3047; 89.3151 + int i3048; 89.3152 + int i3049; 89.3153 + int i3050; 89.3154 + int i3051; 89.3155 + int i3052; 89.3156 + int i3053; 89.3157 + int i3054; 89.3158 + int i3055; 89.3159 + int i3056; 89.3160 + int i3057; 89.3161 + int i3058; 89.3162 + int i3059; 89.3163 + int i3060; 89.3164 + int i3061; 89.3165 + int i3062; 89.3166 + int i3063; 89.3167 + int i3064; 89.3168 + int i3065; 89.3169 + int i3066; 89.3170 + int i3067; 89.3171 + int i3068; 89.3172 + int i3069; 89.3173 + int i3070; 89.3174 + int i3071; 89.3175 + int i3072; 89.3176 + int i3073; 89.3177 + int i3074; 89.3178 + int i3075; 89.3179 + int i3076; 89.3180 + int i3077; 89.3181 + int i3078; 89.3182 + int i3079; 89.3183 + int i3080; 89.3184 + int i3081; 89.3185 + int i3082; 89.3186 + int i3083; 89.3187 + int i3084; 89.3188 + int i3085; 89.3189 + int i3086; 89.3190 + int i3087; 89.3191 + int i3088; 89.3192 + int i3089; 89.3193 + int i3090; 89.3194 + int i3091; 89.3195 + int i3092; 89.3196 + int i3093; 89.3197 + int i3094; 89.3198 + int i3095; 89.3199 + int i3096; 89.3200 + int i3097; 89.3201 + int i3098; 89.3202 + int i3099; 89.3203 + int i3100; 89.3204 + int i3101; 89.3205 + int i3102; 89.3206 + int i3103; 89.3207 + int i3104; 89.3208 + int i3105; 89.3209 + int i3106; 89.3210 + int i3107; 89.3211 + int i3108; 89.3212 + int i3109; 89.3213 + int i3110; 89.3214 + int i3111; 89.3215 + int i3112; 89.3216 + int i3113; 89.3217 + int i3114; 89.3218 + int i3115; 89.3219 + int i3116; 89.3220 + int i3117; 89.3221 + int i3118; 89.3222 + int i3119; 89.3223 + int i3120; 89.3224 + int i3121; 89.3225 + int i3122; 89.3226 + int i3123; 89.3227 + int i3124; 89.3228 + int i3125; 89.3229 + int i3126; 89.3230 + int i3127; 89.3231 + int i3128; 89.3232 + int i3129; 89.3233 + int i3130; 89.3234 + int i3131; 89.3235 + int i3132; 89.3236 + int i3133; 89.3237 + int i3134; 89.3238 + int i3135; 89.3239 + int i3136; 89.3240 + int i3137; 89.3241 + int i3138; 89.3242 + int i3139; 89.3243 + int i3140; 89.3244 + int i3141; 89.3245 + int i3142; 89.3246 + int i3143; 89.3247 + int i3144; 89.3248 + int i3145; 89.3249 + int i3146; 89.3250 + int i3147; 89.3251 + int i3148; 89.3252 + int i3149; 89.3253 + int i3150; 89.3254 + int i3151; 89.3255 + int i3152; 89.3256 + int i3153; 89.3257 + int i3154; 89.3258 + int i3155; 89.3259 + int i3156; 89.3260 + int i3157; 89.3261 + int i3158; 89.3262 + int i3159; 89.3263 + int i3160; 89.3264 + int i3161; 89.3265 + int i3162; 89.3266 + int i3163; 89.3267 + int i3164; 89.3268 + int i3165; 89.3269 + int i3166; 89.3270 + int i3167; 89.3271 + int i3168; 89.3272 + int i3169; 89.3273 + int i3170; 89.3274 + int i3171; 89.3275 + int i3172; 89.3276 + int i3173; 89.3277 + int i3174; 89.3278 + int i3175; 89.3279 + int i3176; 89.3280 + int i3177; 89.3281 + int i3178; 89.3282 + int i3179; 89.3283 + int i3180; 89.3284 + int i3181; 89.3285 + int i3182; 89.3286 + int i3183; 89.3287 + int i3184; 89.3288 + int i3185; 89.3289 + int i3186; 89.3290 + int i3187; 89.3291 + int i3188; 89.3292 + int i3189; 89.3293 + int i3190; 89.3294 + int i3191; 89.3295 + int i3192; 89.3296 + int i3193; 89.3297 + int i3194; 89.3298 + int i3195; 89.3299 + int i3196; 89.3300 + int i3197; 89.3301 + int i3198; 89.3302 + int i3199; 89.3303 + int i3200; 89.3304 + int i3201; 89.3305 + int i3202; 89.3306 + int i3203; 89.3307 + int i3204; 89.3308 + int i3205; 89.3309 + int i3206; 89.3310 + int i3207; 89.3311 + int i3208; 89.3312 + int i3209; 89.3313 + int i3210; 89.3314 + int i3211; 89.3315 + int i3212; 89.3316 + int i3213; 89.3317 + int i3214; 89.3318 + int i3215; 89.3319 + int i3216; 89.3320 + int i3217; 89.3321 + int i3218; 89.3322 + int i3219; 89.3323 + int i3220; 89.3324 + int i3221; 89.3325 + int i3222; 89.3326 + int i3223; 89.3327 + int i3224; 89.3328 + int i3225; 89.3329 + int i3226; 89.3330 + int i3227; 89.3331 + int i3228; 89.3332 + int i3229; 89.3333 + int i3230; 89.3334 + int i3231; 89.3335 + int i3232; 89.3336 + int i3233; 89.3337 + int i3234; 89.3338 + int i3235; 89.3339 + int i3236; 89.3340 + int i3237; 89.3341 + int i3238; 89.3342 + int i3239; 89.3343 + int i3240; 89.3344 + int i3241; 89.3345 + int i3242; 89.3346 + int i3243; 89.3347 + int i3244; 89.3348 + int i3245; 89.3349 + int i3246; 89.3350 + int i3247; 89.3351 + int i3248; 89.3352 + int i3249; 89.3353 + int i3250; 89.3354 + int i3251; 89.3355 + int i3252; 89.3356 + int i3253; 89.3357 + int i3254; 89.3358 + int i3255; 89.3359 + int i3256; 89.3360 + int i3257; 89.3361 + int i3258; 89.3362 + int i3259; 89.3363 + int i3260; 89.3364 + int i3261; 89.3365 + int i3262; 89.3366 + int i3263; 89.3367 + int i3264; 89.3368 + int i3265; 89.3369 + int i3266; 89.3370 + int i3267; 89.3371 + int i3268; 89.3372 + int i3269; 89.3373 + int i3270; 89.3374 + int i3271; 89.3375 + int i3272; 89.3376 + int i3273; 89.3377 + int i3274; 89.3378 + int i3275; 89.3379 + int i3276; 89.3380 + int i3277; 89.3381 + int i3278; 89.3382 + int i3279; 89.3383 + int i3280; 89.3384 + int i3281; 89.3385 + int i3282; 89.3386 + int i3283; 89.3387 + int i3284; 89.3388 + int i3285; 89.3389 + int i3286; 89.3390 + int i3287; 89.3391 + int i3288; 89.3392 + int i3289; 89.3393 + int i3290; 89.3394 + int i3291; 89.3395 + int i3292; 89.3396 + int i3293; 89.3397 + int i3294; 89.3398 + int i3295; 89.3399 + int i3296; 89.3400 + int i3297; 89.3401 + int i3298; 89.3402 + int i3299; 89.3403 + int i3300; 89.3404 + int i3301; 89.3405 + int i3302; 89.3406 + int i3303; 89.3407 + int i3304; 89.3408 + int i3305; 89.3409 + int i3306; 89.3410 + int i3307; 89.3411 + int i3308; 89.3412 + int i3309; 89.3413 + int i3310; 89.3414 + int i3311; 89.3415 + int i3312; 89.3416 + int i3313; 89.3417 + int i3314; 89.3418 + int i3315; 89.3419 + int i3316; 89.3420 + int i3317; 89.3421 + int i3318; 89.3422 + int i3319; 89.3423 + int i3320; 89.3424 + int i3321; 89.3425 + int i3322; 89.3426 + int i3323; 89.3427 + int i3324; 89.3428 + int i3325; 89.3429 + int i3326; 89.3430 + int i3327; 89.3431 + int i3328; 89.3432 + int i3329; 89.3433 + int i3330; 89.3434 + int i3331; 89.3435 + int i3332; 89.3436 + int i3333; 89.3437 + int i3334; 89.3438 + int i3335; 89.3439 + int i3336; 89.3440 + int i3337; 89.3441 + int i3338; 89.3442 + int i3339; 89.3443 + int i3340; 89.3444 + int i3341; 89.3445 + int i3342; 89.3446 + int i3343; 89.3447 + int i3344; 89.3448 + int i3345; 89.3449 + int i3346; 89.3450 + int i3347; 89.3451 + int i3348; 89.3452 + int i3349; 89.3453 + int i3350; 89.3454 + int i3351; 89.3455 + int i3352; 89.3456 + int i3353; 89.3457 + int i3354; 89.3458 + int i3355; 89.3459 + int i3356; 89.3460 + int i3357; 89.3461 + int i3358; 89.3462 + int i3359; 89.3463 + int i3360; 89.3464 + int i3361; 89.3465 + int i3362; 89.3466 + int i3363; 89.3467 + int i3364; 89.3468 + int i3365; 89.3469 + int i3366; 89.3470 + int i3367; 89.3471 + int i3368; 89.3472 + int i3369; 89.3473 + int i3370; 89.3474 + int i3371; 89.3475 + int i3372; 89.3476 + int i3373; 89.3477 + int i3374; 89.3478 + int i3375; 89.3479 + int i3376; 89.3480 + int i3377; 89.3481 + int i3378; 89.3482 + int i3379; 89.3483 + int i3380; 89.3484 + int i3381; 89.3485 + int i3382; 89.3486 + int i3383; 89.3487 + int i3384; 89.3488 + int i3385; 89.3489 + int i3386; 89.3490 + int i3387; 89.3491 + int i3388; 89.3492 + int i3389; 89.3493 + int i3390; 89.3494 + int i3391; 89.3495 + int i3392; 89.3496 + int i3393; 89.3497 + int i3394; 89.3498 + int i3395; 89.3499 + int i3396; 89.3500 + int i3397; 89.3501 + int i3398; 89.3502 + int i3399; 89.3503 + int i3400; 89.3504 + int i3401; 89.3505 + int i3402; 89.3506 + int i3403; 89.3507 + int i3404; 89.3508 + int i3405; 89.3509 + int i3406; 89.3510 + int i3407; 89.3511 + int i3408; 89.3512 + int i3409; 89.3513 + int i3410; 89.3514 + int i3411; 89.3515 + int i3412; 89.3516 + int i3413; 89.3517 + int i3414; 89.3518 + int i3415; 89.3519 + int i3416; 89.3520 + int i3417; 89.3521 + int i3418; 89.3522 + int i3419; 89.3523 + int i3420; 89.3524 + int i3421; 89.3525 + int i3422; 89.3526 + int i3423; 89.3527 + int i3424; 89.3528 + int i3425; 89.3529 + int i3426; 89.3530 + int i3427; 89.3531 + int i3428; 89.3532 + int i3429; 89.3533 + int i3430; 89.3534 + int i3431; 89.3535 + int i3432; 89.3536 + int i3433; 89.3537 + int i3434; 89.3538 + int i3435; 89.3539 + int i3436; 89.3540 + int i3437; 89.3541 + int i3438; 89.3542 + int i3439; 89.3543 + int i3440; 89.3544 + int i3441; 89.3545 + int i3442; 89.3546 + int i3443; 89.3547 + int i3444; 89.3548 + int i3445; 89.3549 + int i3446; 89.3550 + int i3447; 89.3551 + int i3448; 89.3552 + int i3449; 89.3553 + int i3450; 89.3554 + int i3451; 89.3555 + int i3452; 89.3556 + int i3453; 89.3557 + int i3454; 89.3558 + int i3455; 89.3559 + int i3456; 89.3560 + int i3457; 89.3561 + int i3458; 89.3562 + int i3459; 89.3563 + int i3460; 89.3564 + int i3461; 89.3565 + int i3462; 89.3566 + int i3463; 89.3567 + int i3464; 89.3568 + int i3465; 89.3569 + int i3466; 89.3570 + int i3467; 89.3571 + int i3468; 89.3572 + int i3469; 89.3573 + int i3470; 89.3574 + int i3471; 89.3575 + int i3472; 89.3576 + int i3473; 89.3577 + int i3474; 89.3578 + int i3475; 89.3579 + int i3476; 89.3580 + int i3477; 89.3581 + int i3478; 89.3582 + int i3479; 89.3583 + int i3480; 89.3584 + int i3481; 89.3585 + int i3482; 89.3586 + int i3483; 89.3587 + int i3484; 89.3588 + int i3485; 89.3589 + int i3486; 89.3590 + int i3487; 89.3591 + int i3488; 89.3592 + int i3489; 89.3593 + int i3490; 89.3594 + int i3491; 89.3595 + int i3492; 89.3596 + int i3493; 89.3597 + int i3494; 89.3598 + int i3495; 89.3599 + int i3496; 89.3600 + int i3497; 89.3601 + int i3498; 89.3602 + int i3499; 89.3603 + int i3500; 89.3604 + int i3501; 89.3605 + int i3502; 89.3606 + int i3503; 89.3607 + int i3504; 89.3608 + int i3505; 89.3609 + int i3506; 89.3610 + int i3507; 89.3611 + int i3508; 89.3612 + int i3509; 89.3613 + int i3510; 89.3614 + int i3511; 89.3615 + int i3512; 89.3616 + int i3513; 89.3617 + int i3514; 89.3618 + int i3515; 89.3619 + int i3516; 89.3620 + int i3517; 89.3621 + int i3518; 89.3622 + int i3519; 89.3623 + int i3520; 89.3624 + int i3521; 89.3625 + int i3522; 89.3626 + int i3523; 89.3627 + int i3524; 89.3628 + int i3525; 89.3629 + int i3526; 89.3630 + int i3527; 89.3631 + int i3528; 89.3632 + int i3529; 89.3633 + int i3530; 89.3634 + int i3531; 89.3635 + int i3532; 89.3636 + int i3533; 89.3637 + int i3534; 89.3638 + int i3535; 89.3639 + int i3536; 89.3640 + int i3537; 89.3641 + int i3538; 89.3642 + int i3539; 89.3643 + int i3540; 89.3644 + int i3541; 89.3645 + int i3542; 89.3646 + int i3543; 89.3647 + int i3544; 89.3648 + int i3545; 89.3649 + int i3546; 89.3650 + int i3547; 89.3651 + int i3548; 89.3652 + int i3549; 89.3653 + int i3550; 89.3654 + int i3551; 89.3655 + int i3552; 89.3656 + int i3553; 89.3657 + int i3554; 89.3658 + int i3555; 89.3659 + int i3556; 89.3660 + int i3557; 89.3661 + int i3558; 89.3662 + int i3559; 89.3663 + int i3560; 89.3664 + int i3561; 89.3665 + int i3562; 89.3666 + int i3563; 89.3667 + int i3564; 89.3668 + int i3565; 89.3669 + int i3566; 89.3670 + int i3567; 89.3671 + int i3568; 89.3672 + int i3569; 89.3673 + int i3570; 89.3674 + int i3571; 89.3675 + int i3572; 89.3676 + int i3573; 89.3677 + int i3574; 89.3678 + int i3575; 89.3679 + int i3576; 89.3680 + int i3577; 89.3681 + int i3578; 89.3682 + int i3579; 89.3683 + int i3580; 89.3684 + int i3581; 89.3685 + int i3582; 89.3686 + int i3583; 89.3687 + int i3584; 89.3688 + int i3585; 89.3689 + int i3586; 89.3690 + int i3587; 89.3691 + int i3588; 89.3692 + int i3589; 89.3693 + int i3590; 89.3694 + int i3591; 89.3695 + int i3592; 89.3696 + int i3593; 89.3697 + int i3594; 89.3698 + int i3595; 89.3699 + int i3596; 89.3700 + int i3597; 89.3701 + int i3598; 89.3702 + int i3599; 89.3703 + int i3600; 89.3704 + int i3601; 89.3705 + int i3602; 89.3706 + int i3603; 89.3707 + int i3604; 89.3708 + int i3605; 89.3709 + int i3606; 89.3710 + int i3607; 89.3711 + int i3608; 89.3712 + int i3609; 89.3713 + int i3610; 89.3714 + int i3611; 89.3715 + int i3612; 89.3716 + int i3613; 89.3717 + int i3614; 89.3718 + int i3615; 89.3719 + int i3616; 89.3720 + int i3617; 89.3721 + int i3618; 89.3722 + int i3619; 89.3723 + int i3620; 89.3724 + int i3621; 89.3725 + int i3622; 89.3726 + int i3623; 89.3727 + int i3624; 89.3728 + int i3625; 89.3729 + int i3626; 89.3730 + int i3627; 89.3731 + int i3628; 89.3732 + int i3629; 89.3733 + int i3630; 89.3734 + int i3631; 89.3735 + int i3632; 89.3736 + int i3633; 89.3737 + int i3634; 89.3738 + int i3635; 89.3739 + int i3636; 89.3740 + int i3637; 89.3741 + int i3638; 89.3742 + int i3639; 89.3743 + int i3640; 89.3744 + int i3641; 89.3745 + int i3642; 89.3746 + int i3643; 89.3747 + int i3644; 89.3748 + int i3645; 89.3749 + int i3646; 89.3750 + int i3647; 89.3751 + int i3648; 89.3752 + int i3649; 89.3753 + int i3650; 89.3754 + int i3651; 89.3755 + int i3652; 89.3756 + int i3653; 89.3757 + int i3654; 89.3758 + int i3655; 89.3759 + int i3656; 89.3760 + int i3657; 89.3761 + int i3658; 89.3762 + int i3659; 89.3763 + int i3660; 89.3764 + int i3661; 89.3765 + int i3662; 89.3766 + int i3663; 89.3767 + int i3664; 89.3768 + int i3665; 89.3769 + int i3666; 89.3770 + int i3667; 89.3771 + int i3668; 89.3772 + int i3669; 89.3773 + int i3670; 89.3774 + int i3671; 89.3775 + int i3672; 89.3776 + int i3673; 89.3777 + int i3674; 89.3778 + int i3675; 89.3779 + int i3676; 89.3780 + int i3677; 89.3781 + int i3678; 89.3782 + int i3679; 89.3783 + int i3680; 89.3784 + int i3681; 89.3785 + int i3682; 89.3786 + int i3683; 89.3787 + int i3684; 89.3788 + int i3685; 89.3789 + int i3686; 89.3790 + int i3687; 89.3791 + int i3688; 89.3792 + int i3689; 89.3793 + int i3690; 89.3794 + int i3691; 89.3795 + int i3692; 89.3796 + int i3693; 89.3797 + int i3694; 89.3798 + int i3695; 89.3799 + int i3696; 89.3800 + int i3697; 89.3801 + int i3698; 89.3802 + int i3699; 89.3803 + int i3700; 89.3804 + int i3701; 89.3805 + int i3702; 89.3806 + int i3703; 89.3807 + int i3704; 89.3808 + int i3705; 89.3809 + int i3706; 89.3810 + int i3707; 89.3811 + int i3708; 89.3812 + int i3709; 89.3813 + int i3710; 89.3814 + int i3711; 89.3815 + int i3712; 89.3816 + int i3713; 89.3817 + int i3714; 89.3818 + int i3715; 89.3819 + int i3716; 89.3820 + int i3717; 89.3821 + int i3718; 89.3822 + int i3719; 89.3823 + int i3720; 89.3824 + int i3721; 89.3825 + int i3722; 89.3826 + int i3723; 89.3827 + int i3724; 89.3828 + int i3725; 89.3829 + int i3726; 89.3830 + int i3727; 89.3831 + int i3728; 89.3832 + int i3729; 89.3833 + int i3730; 89.3834 + int i3731; 89.3835 + int i3732; 89.3836 + int i3733; 89.3837 + int i3734; 89.3838 + int i3735; 89.3839 + int i3736; 89.3840 + int i3737; 89.3841 + int i3738; 89.3842 + int i3739; 89.3843 + int i3740; 89.3844 + int i3741; 89.3845 + int i3742; 89.3846 + int i3743; 89.3847 + int i3744; 89.3848 + int i3745; 89.3849 + int i3746; 89.3850 + int i3747; 89.3851 + int i3748; 89.3852 + int i3749; 89.3853 + int i3750; 89.3854 + int i3751; 89.3855 + int i3752; 89.3856 + int i3753; 89.3857 + int i3754; 89.3858 + int i3755; 89.3859 + int i3756; 89.3860 + int i3757; 89.3861 + int i3758; 89.3862 + int i3759; 89.3863 + int i3760; 89.3864 + int i3761; 89.3865 + int i3762; 89.3866 + int i3763; 89.3867 + int i3764; 89.3868 + int i3765; 89.3869 + int i3766; 89.3870 + int i3767; 89.3871 + int i3768; 89.3872 + int i3769; 89.3873 + int i3770; 89.3874 + int i3771; 89.3875 + int i3772; 89.3876 + int i3773; 89.3877 + int i3774; 89.3878 + int i3775; 89.3879 + int i3776; 89.3880 + int i3777; 89.3881 + int i3778; 89.3882 + int i3779; 89.3883 + int i3780; 89.3884 + int i3781; 89.3885 + int i3782; 89.3886 + int i3783; 89.3887 + int i3784; 89.3888 + int i3785; 89.3889 + int i3786; 89.3890 + int i3787; 89.3891 + int i3788; 89.3892 + int i3789; 89.3893 + int i3790; 89.3894 + int i3791; 89.3895 + int i3792; 89.3896 + int i3793; 89.3897 + int i3794; 89.3898 + int i3795; 89.3899 + int i3796; 89.3900 + int i3797; 89.3901 + int i3798; 89.3902 + int i3799; 89.3903 + int i3800; 89.3904 + int i3801; 89.3905 + int i3802; 89.3906 + int i3803; 89.3907 + int i3804; 89.3908 + int i3805; 89.3909 + int i3806; 89.3910 + int i3807; 89.3911 + int i3808; 89.3912 + int i3809; 89.3913 + int i3810; 89.3914 + int i3811; 89.3915 + int i3812; 89.3916 + int i3813; 89.3917 + int i3814; 89.3918 + int i3815; 89.3919 + int i3816; 89.3920 + int i3817; 89.3921 + int i3818; 89.3922 + int i3819; 89.3923 + int i3820; 89.3924 + int i3821; 89.3925 + int i3822; 89.3926 + int i3823; 89.3927 + int i3824; 89.3928 + int i3825; 89.3929 + int i3826; 89.3930 + int i3827; 89.3931 + int i3828; 89.3932 + int i3829; 89.3933 + int i3830; 89.3934 + int i3831; 89.3935 + int i3832; 89.3936 + int i3833; 89.3937 + int i3834; 89.3938 + int i3835; 89.3939 + int i3836; 89.3940 + int i3837; 89.3941 + int i3838; 89.3942 + int i3839; 89.3943 + int i3840; 89.3944 + int i3841; 89.3945 + int i3842; 89.3946 + int i3843; 89.3947 + int i3844; 89.3948 + int i3845; 89.3949 + int i3846; 89.3950 + int i3847; 89.3951 + int i3848; 89.3952 + int i3849; 89.3953 + int i3850; 89.3954 + int i3851; 89.3955 + int i3852; 89.3956 + int i3853; 89.3957 + int i3854; 89.3958 + int i3855; 89.3959 + int i3856; 89.3960 + int i3857; 89.3961 + int i3858; 89.3962 + int i3859; 89.3963 + int i3860; 89.3964 + int i3861; 89.3965 + int i3862; 89.3966 + int i3863; 89.3967 + int i3864; 89.3968 + int i3865; 89.3969 + int i3866; 89.3970 + int i3867; 89.3971 + int i3868; 89.3972 + int i3869; 89.3973 + int i3870; 89.3974 + int i3871; 89.3975 + int i3872; 89.3976 + int i3873; 89.3977 + int i3874; 89.3978 + int i3875; 89.3979 + int i3876; 89.3980 + int i3877; 89.3981 + int i3878; 89.3982 + int i3879; 89.3983 + int i3880; 89.3984 + int i3881; 89.3985 + int i3882; 89.3986 + int i3883; 89.3987 + int i3884; 89.3988 + int i3885; 89.3989 + int i3886; 89.3990 + int i3887; 89.3991 + int i3888; 89.3992 + int i3889; 89.3993 + int i3890; 89.3994 + int i3891; 89.3995 + int i3892; 89.3996 + int i3893; 89.3997 + int i3894; 89.3998 + int i3895; 89.3999 + int i3896; 89.4000 + int i3897; 89.4001 + int i3898; 89.4002 + int i3899; 89.4003 + int i3900; 89.4004 + int i3901; 89.4005 + int i3902; 89.4006 + int i3903; 89.4007 + int i3904; 89.4008 + int i3905; 89.4009 + int i3906; 89.4010 + int i3907; 89.4011 + int i3908; 89.4012 + int i3909; 89.4013 + int i3910; 89.4014 + int i3911; 89.4015 + int i3912; 89.4016 + int i3913; 89.4017 + int i3914; 89.4018 + int i3915; 89.4019 + int i3916; 89.4020 + int i3917; 89.4021 + int i3918; 89.4022 + int i3919; 89.4023 + int i3920; 89.4024 + int i3921; 89.4025 + int i3922; 89.4026 + int i3923; 89.4027 + int i3924; 89.4028 + int i3925; 89.4029 + int i3926; 89.4030 + int i3927; 89.4031 + int i3928; 89.4032 + int i3929; 89.4033 + int i3930; 89.4034 + int i3931; 89.4035 + int i3932; 89.4036 + int i3933; 89.4037 + int i3934; 89.4038 + int i3935; 89.4039 + int i3936; 89.4040 + int i3937; 89.4041 + int i3938; 89.4042 + int i3939; 89.4043 + int i3940; 89.4044 + int i3941; 89.4045 + int i3942; 89.4046 + int i3943; 89.4047 + int i3944; 89.4048 + int i3945; 89.4049 + int i3946; 89.4050 + int i3947; 89.4051 + int i3948; 89.4052 + int i3949; 89.4053 + int i3950; 89.4054 + int i3951; 89.4055 + int i3952; 89.4056 + int i3953; 89.4057 + int i3954; 89.4058 + int i3955; 89.4059 + int i3956; 89.4060 + int i3957; 89.4061 + int i3958; 89.4062 + int i3959; 89.4063 + int i3960; 89.4064 + int i3961; 89.4065 + int i3962; 89.4066 + int i3963; 89.4067 + int i3964; 89.4068 + int i3965; 89.4069 + int i3966; 89.4070 + int i3967; 89.4071 + int i3968; 89.4072 + int i3969; 89.4073 + int i3970; 89.4074 + int i3971; 89.4075 + int i3972; 89.4076 + int i3973; 89.4077 + int i3974; 89.4078 + int i3975; 89.4079 + int i3976; 89.4080 + int i3977; 89.4081 + int i3978; 89.4082 + int i3979; 89.4083 + int i3980; 89.4084 + int i3981; 89.4085 + int i3982; 89.4086 + int i3983; 89.4087 + int i3984; 89.4088 + int i3985; 89.4089 + int i3986; 89.4090 + int i3987; 89.4091 + int i3988; 89.4092 + int i3989; 89.4093 + int i3990; 89.4094 + int i3991; 89.4095 + int i3992; 89.4096 + int i3993; 89.4097 + int i3994; 89.4098 + int i3995; 89.4099 + int i3996; 89.4100 + int i3997; 89.4101 + int i3998; 89.4102 + int i3999; 89.4103 + int i4000; 89.4104 + int i4001; 89.4105 + int i4002; 89.4106 + int i4003; 89.4107 + int i4004; 89.4108 + int i4005; 89.4109 + int i4006; 89.4110 + int i4007; 89.4111 + int i4008; 89.4112 + int i4009; 89.4113 + int i4010; 89.4114 + int i4011; 89.4115 + int i4012; 89.4116 + int i4013; 89.4117 + int i4014; 89.4118 + int i4015; 89.4119 + int i4016; 89.4120 + int i4017; 89.4121 + int i4018; 89.4122 + int i4019; 89.4123 + int i4020; 89.4124 + int i4021; 89.4125 + int i4022; 89.4126 + int i4023; 89.4127 + int i4024; 89.4128 + int i4025; 89.4129 + int i4026; 89.4130 + int i4027; 89.4131 + int i4028; 89.4132 + int i4029; 89.4133 + int i4030; 89.4134 + int i4031; 89.4135 + int i4032; 89.4136 + int i4033; 89.4137 + int i4034; 89.4138 + int i4035; 89.4139 + int i4036; 89.4140 + int i4037; 89.4141 + int i4038; 89.4142 + int i4039; 89.4143 + int i4040; 89.4144 + int i4041; 89.4145 + int i4042; 89.4146 + int i4043; 89.4147 + int i4044; 89.4148 + int i4045; 89.4149 + int i4046; 89.4150 + int i4047; 89.4151 + int i4048; 89.4152 + int i4049; 89.4153 + int i4050; 89.4154 + int i4051; 89.4155 + int i4052; 89.4156 + int i4053; 89.4157 + int i4054; 89.4158 + int i4055; 89.4159 + int i4056; 89.4160 + int i4057; 89.4161 + int i4058; 89.4162 + int i4059; 89.4163 + int i4060; 89.4164 + int i4061; 89.4165 + int i4062; 89.4166 + int i4063; 89.4167 + int i4064; 89.4168 + int i4065; 89.4169 + int i4066; 89.4170 + int i4067; 89.4171 + int i4068; 89.4172 + int i4069; 89.4173 + int i4070; 89.4174 + int i4071; 89.4175 + int i4072; 89.4176 + int i4073; 89.4177 + int i4074; 89.4178 + int i4075; 89.4179 + int i4076; 89.4180 + int i4077; 89.4181 + int i4078; 89.4182 + int i4079; 89.4183 + int i4080; 89.4184 + int i4081; 89.4185 + int i4082; 89.4186 + int i4083; 89.4187 + int i4084; 89.4188 + int i4085; 89.4189 + int i4086; 89.4190 + int i4087; 89.4191 + int i4088; 89.4192 + int i4089; 89.4193 + int i4090; 89.4194 + int i4091; 89.4195 + int i4092; 89.4196 + int i4093; 89.4197 + int i4094; 89.4198 + int i4095; 89.4199 + int i4096; 89.4200 + int i4097; 89.4201 + int i4098; 89.4202 + int i4099; 89.4203 + int i4100; 89.4204 + int i4101; 89.4205 + int i4102; 89.4206 + int i4103; 89.4207 + int i4104; 89.4208 + int i4105; 89.4209 + int i4106; 89.4210 + int i4107; 89.4211 + int i4108; 89.4212 + int i4109; 89.4213 + int i4110; 89.4214 + int i4111; 89.4215 + int i4112; 89.4216 + int i4113; 89.4217 + int i4114; 89.4218 + int i4115; 89.4219 + int i4116; 89.4220 + int i4117; 89.4221 + int i4118; 89.4222 + int i4119; 89.4223 + int i4120; 89.4224 + int i4121; 89.4225 + int i4122; 89.4226 + int i4123; 89.4227 + int i4124; 89.4228 + int i4125; 89.4229 + int i4126; 89.4230 + int i4127; 89.4231 + int i4128; 89.4232 + int i4129; 89.4233 + int i4130; 89.4234 + int i4131; 89.4235 + int i4132; 89.4236 + int i4133; 89.4237 + int i4134; 89.4238 + int i4135; 89.4239 + int i4136; 89.4240 + int i4137; 89.4241 + int i4138; 89.4242 + int i4139; 89.4243 + int i4140; 89.4244 + int i4141; 89.4245 + int i4142; 89.4246 + int i4143; 89.4247 + int i4144; 89.4248 + int i4145; 89.4249 + int i4146; 89.4250 + int i4147; 89.4251 + int i4148; 89.4252 + int i4149; 89.4253 + int i4150; 89.4254 + int i4151; 89.4255 + int i4152; 89.4256 + int i4153; 89.4257 + int i4154; 89.4258 + int i4155; 89.4259 + int i4156; 89.4260 + int i4157; 89.4261 + int i4158; 89.4262 + int i4159; 89.4263 + int i4160; 89.4264 + int i4161; 89.4265 + int i4162; 89.4266 + int i4163; 89.4267 + int i4164; 89.4268 + int i4165; 89.4269 + int i4166; 89.4270 + int i4167; 89.4271 + int i4168; 89.4272 + int i4169; 89.4273 + int i4170; 89.4274 + int i4171; 89.4275 + int i4172; 89.4276 + int i4173; 89.4277 + int i4174; 89.4278 + int i4175; 89.4279 + int i4176; 89.4280 + int i4177; 89.4281 + int i4178; 89.4282 + int i4179; 89.4283 + int i4180; 89.4284 + int i4181; 89.4285 + int i4182; 89.4286 + int i4183; 89.4287 + int i4184; 89.4288 + int i4185; 89.4289 + int i4186; 89.4290 + int i4187; 89.4291 + int i4188; 89.4292 + int i4189; 89.4293 + int i4190; 89.4294 + int i4191; 89.4295 + int i4192; 89.4296 + int i4193; 89.4297 + int i4194; 89.4298 + int i4195; 89.4299 + int i4196; 89.4300 + int i4197; 89.4301 + int i4198; 89.4302 + int i4199; 89.4303 + int i4200; 89.4304 + int i4201; 89.4305 + int i4202; 89.4306 + int i4203; 89.4307 + int i4204; 89.4308 + int i4205; 89.4309 + int i4206; 89.4310 + int i4207; 89.4311 + int i4208; 89.4312 + int i4209; 89.4313 + int i4210; 89.4314 + int i4211; 89.4315 + int i4212; 89.4316 + int i4213; 89.4317 + int i4214; 89.4318 + int i4215; 89.4319 + int i4216; 89.4320 + int i4217; 89.4321 + int i4218; 89.4322 + int i4219; 89.4323 + int i4220; 89.4324 + int i4221; 89.4325 + int i4222; 89.4326 + int i4223; 89.4327 + int i4224; 89.4328 + int i4225; 89.4329 + int i4226; 89.4330 + int i4227; 89.4331 + int i4228; 89.4332 + int i4229; 89.4333 + int i4230; 89.4334 + int i4231; 89.4335 + int i4232; 89.4336 + int i4233; 89.4337 + int i4234; 89.4338 + int i4235; 89.4339 + int i4236; 89.4340 + int i4237; 89.4341 + int i4238; 89.4342 + int i4239; 89.4343 + int i4240; 89.4344 + int i4241; 89.4345 + int i4242; 89.4346 + int i4243; 89.4347 + int i4244; 89.4348 + int i4245; 89.4349 + int i4246; 89.4350 + int i4247; 89.4351 + int i4248; 89.4352 + int i4249; 89.4353 + int i4250; 89.4354 + int i4251; 89.4355 + int i4252; 89.4356 + int i4253; 89.4357 + int i4254; 89.4358 + int i4255; 89.4359 + int i4256; 89.4360 + int i4257; 89.4361 + int i4258; 89.4362 + int i4259; 89.4363 + int i4260; 89.4364 + int i4261; 89.4365 + int i4262; 89.4366 + int i4263; 89.4367 + int i4264; 89.4368 + int i4265; 89.4369 + int i4266; 89.4370 + int i4267; 89.4371 + int i4268; 89.4372 + int i4269; 89.4373 + int i4270; 89.4374 + int i4271; 89.4375 + int i4272; 89.4376 + int i4273; 89.4377 + int i4274; 89.4378 + int i4275; 89.4379 + int i4276; 89.4380 + int i4277; 89.4381 + int i4278; 89.4382 + int i4279; 89.4383 + int i4280; 89.4384 + int i4281; 89.4385 + int i4282; 89.4386 + int i4283; 89.4387 + int i4284; 89.4388 + int i4285; 89.4389 + int i4286; 89.4390 + int i4287; 89.4391 + int i4288; 89.4392 + int i4289; 89.4393 + int i4290; 89.4394 + int i4291; 89.4395 + int i4292; 89.4396 + int i4293; 89.4397 + int i4294; 89.4398 + int i4295; 89.4399 + int i4296; 89.4400 + int i4297; 89.4401 + int i4298; 89.4402 + int i4299; 89.4403 + int i4300; 89.4404 + int i4301; 89.4405 + int i4302; 89.4406 + int i4303; 89.4407 + int i4304; 89.4408 + int i4305; 89.4409 + int i4306; 89.4410 + int i4307; 89.4411 + int i4308; 89.4412 + int i4309; 89.4413 + int i4310; 89.4414 + int i4311; 89.4415 + int i4312; 89.4416 + int i4313; 89.4417 + int i4314; 89.4418 + int i4315; 89.4419 + int i4316; 89.4420 + int i4317; 89.4421 + int i4318; 89.4422 + int i4319; 89.4423 + int i4320; 89.4424 + int i4321; 89.4425 + int i4322; 89.4426 + int i4323; 89.4427 + int i4324; 89.4428 + int i4325; 89.4429 + int i4326; 89.4430 + int i4327; 89.4431 + int i4328; 89.4432 + int i4329; 89.4433 + int i4330; 89.4434 + int i4331; 89.4435 + int i4332; 89.4436 + int i4333; 89.4437 + int i4334; 89.4438 + int i4335; 89.4439 + int i4336; 89.4440 + int i4337; 89.4441 + int i4338; 89.4442 + int i4339; 89.4443 + int i4340; 89.4444 + int i4341; 89.4445 + int i4342; 89.4446 + int i4343; 89.4447 + int i4344; 89.4448 + int i4345; 89.4449 + int i4346; 89.4450 + int i4347; 89.4451 + int i4348; 89.4452 + int i4349; 89.4453 + int i4350; 89.4454 + int i4351; 89.4455 + int i4352; 89.4456 + int i4353; 89.4457 + int i4354; 89.4458 + int i4355; 89.4459 + int i4356; 89.4460 + int i4357; 89.4461 + int i4358; 89.4462 + int i4359; 89.4463 + int i4360; 89.4464 + int i4361; 89.4465 + int i4362; 89.4466 + int i4363; 89.4467 + int i4364; 89.4468 + int i4365; 89.4469 + int i4366; 89.4470 + int i4367; 89.4471 + int i4368; 89.4472 + int i4369; 89.4473 + int i4370; 89.4474 + int i4371; 89.4475 + int i4372; 89.4476 + int i4373; 89.4477 + int i4374; 89.4478 + int i4375; 89.4479 + int i4376; 89.4480 + int i4377; 89.4481 + int i4378; 89.4482 + int i4379; 89.4483 + int i4380; 89.4484 + int i4381; 89.4485 + int i4382; 89.4486 + int i4383; 89.4487 + int i4384; 89.4488 + int i4385; 89.4489 + int i4386; 89.4490 + int i4387; 89.4491 + int i4388; 89.4492 + int i4389; 89.4493 + int i4390; 89.4494 + int i4391; 89.4495 + int i4392; 89.4496 + int i4393; 89.4497 + int i4394; 89.4498 + int i4395; 89.4499 + int i4396; 89.4500 + int i4397; 89.4501 + int i4398; 89.4502 + int i4399; 89.4503 + int i4400; 89.4504 + int i4401; 89.4505 + int i4402; 89.4506 + int i4403; 89.4507 + int i4404; 89.4508 + int i4405; 89.4509 + int i4406; 89.4510 + int i4407; 89.4511 + int i4408; 89.4512 + int i4409; 89.4513 + int i4410; 89.4514 + int i4411; 89.4515 + int i4412; 89.4516 + int i4413; 89.4517 + int i4414; 89.4518 + int i4415; 89.4519 + int i4416; 89.4520 + int i4417; 89.4521 + int i4418; 89.4522 + int i4419; 89.4523 + int i4420; 89.4524 + int i4421; 89.4525 + int i4422; 89.4526 + int i4423; 89.4527 + int i4424; 89.4528 + int i4425; 89.4529 + int i4426; 89.4530 + int i4427; 89.4531 + int i4428; 89.4532 + int i4429; 89.4533 + int i4430; 89.4534 + int i4431; 89.4535 + int i4432; 89.4536 + int i4433; 89.4537 + int i4434; 89.4538 + int i4435; 89.4539 + int i4436; 89.4540 + int i4437; 89.4541 + int i4438; 89.4542 + int i4439; 89.4543 + int i4440; 89.4544 + int i4441; 89.4545 + int i4442; 89.4546 + int i4443; 89.4547 + int i4444; 89.4548 + int i4445; 89.4549 + int i4446; 89.4550 + int i4447; 89.4551 + int i4448; 89.4552 + int i4449; 89.4553 + int i4450; 89.4554 + int i4451; 89.4555 + int i4452; 89.4556 + int i4453; 89.4557 + int i4454; 89.4558 + int i4455; 89.4559 + int i4456; 89.4560 + int i4457; 89.4561 + int i4458; 89.4562 + int i4459; 89.4563 + int i4460; 89.4564 + int i4461; 89.4565 + int i4462; 89.4566 + int i4463; 89.4567 + int i4464; 89.4568 + int i4465; 89.4569 + int i4466; 89.4570 + int i4467; 89.4571 + int i4468; 89.4572 + int i4469; 89.4573 + int i4470; 89.4574 + int i4471; 89.4575 + int i4472; 89.4576 + int i4473; 89.4577 + int i4474; 89.4578 + int i4475; 89.4579 + int i4476; 89.4580 + int i4477; 89.4581 + int i4478; 89.4582 + int i4479; 89.4583 + int i4480; 89.4584 + int i4481; 89.4585 + int i4482; 89.4586 + int i4483; 89.4587 + int i4484; 89.4588 + int i4485; 89.4589 + int i4486; 89.4590 + int i4487; 89.4591 + int i4488; 89.4592 + int i4489; 89.4593 + int i4490; 89.4594 + int i4491; 89.4595 + int i4492; 89.4596 + int i4493; 89.4597 + int i4494; 89.4598 + int i4495; 89.4599 + int i4496; 89.4600 + int i4497; 89.4601 + int i4498; 89.4602 + int i4499; 89.4603 + int i4500; 89.4604 + int i4501; 89.4605 + int i4502; 89.4606 + int i4503; 89.4607 + int i4504; 89.4608 + int i4505; 89.4609 + int i4506; 89.4610 + int i4507; 89.4611 + int i4508; 89.4612 + int i4509; 89.4613 + int i4510; 89.4614 + int i4511; 89.4615 + int i4512; 89.4616 + int i4513; 89.4617 + int i4514; 89.4618 + int i4515; 89.4619 + int i4516; 89.4620 + int i4517; 89.4621 + int i4518; 89.4622 + int i4519; 89.4623 + int i4520; 89.4624 + int i4521; 89.4625 + int i4522; 89.4626 + int i4523; 89.4627 + int i4524; 89.4628 + int i4525; 89.4629 + int i4526; 89.4630 + int i4527; 89.4631 + int i4528; 89.4632 + int i4529; 89.4633 + int i4530; 89.4634 + int i4531; 89.4635 + int i4532; 89.4636 + int i4533; 89.4637 + int i4534; 89.4638 + int i4535; 89.4639 + int i4536; 89.4640 + int i4537; 89.4641 + int i4538; 89.4642 + int i4539; 89.4643 + int i4540; 89.4644 + int i4541; 89.4645 + int i4542; 89.4646 + int i4543; 89.4647 + int i4544; 89.4648 + int i4545; 89.4649 + int i4546; 89.4650 + int i4547; 89.4651 + int i4548; 89.4652 + int i4549; 89.4653 + int i4550; 89.4654 + int i4551; 89.4655 + int i4552; 89.4656 + int i4553; 89.4657 + int i4554; 89.4658 + int i4555; 89.4659 + int i4556; 89.4660 + int i4557; 89.4661 + int i4558; 89.4662 + int i4559; 89.4663 + int i4560; 89.4664 + int i4561; 89.4665 + int i4562; 89.4666 + int i4563; 89.4667 + int i4564; 89.4668 + int i4565; 89.4669 + int i4566; 89.4670 + int i4567; 89.4671 + int i4568; 89.4672 + int i4569; 89.4673 + int i4570; 89.4674 + int i4571; 89.4675 + int i4572; 89.4676 + int i4573; 89.4677 + int i4574; 89.4678 + int i4575; 89.4679 + int i4576; 89.4680 + int i4577; 89.4681 + int i4578; 89.4682 + int i4579; 89.4683 + int i4580; 89.4684 + int i4581; 89.4685 + int i4582; 89.4686 + int i4583; 89.4687 + int i4584; 89.4688 + int i4585; 89.4689 + int i4586; 89.4690 + int i4587; 89.4691 + int i4588; 89.4692 + int i4589; 89.4693 + int i4590; 89.4694 + int i4591; 89.4695 + int i4592; 89.4696 + int i4593; 89.4697 + int i4594; 89.4698 + int i4595; 89.4699 + int i4596; 89.4700 + int i4597; 89.4701 + int i4598; 89.4702 + int i4599; 89.4703 + int i4600; 89.4704 + int i4601; 89.4705 + int i4602; 89.4706 + int i4603; 89.4707 + int i4604; 89.4708 + int i4605; 89.4709 + int i4606; 89.4710 + int i4607; 89.4711 + int i4608; 89.4712 + int i4609; 89.4713 + int i4610; 89.4714 + int i4611; 89.4715 + int i4612; 89.4716 + int i4613; 89.4717 + int i4614; 89.4718 + int i4615; 89.4719 + int i4616; 89.4720 + int i4617; 89.4721 + int i4618; 89.4722 + int i4619; 89.4723 + int i4620; 89.4724 + int i4621; 89.4725 + int i4622; 89.4726 + int i4623; 89.4727 + int i4624; 89.4728 + int i4625; 89.4729 + int i4626; 89.4730 + int i4627; 89.4731 + int i4628; 89.4732 + int i4629; 89.4733 + int i4630; 89.4734 + int i4631; 89.4735 + int i4632; 89.4736 + int i4633; 89.4737 + int i4634; 89.4738 + int i4635; 89.4739 + int i4636; 89.4740 + int i4637; 89.4741 + int i4638; 89.4742 + int i4639; 89.4743 + int i4640; 89.4744 + int i4641; 89.4745 + int i4642; 89.4746 + int i4643; 89.4747 + int i4644; 89.4748 + int i4645; 89.4749 + int i4646; 89.4750 + int i4647; 89.4751 + int i4648; 89.4752 + int i4649; 89.4753 + int i4650; 89.4754 + int i4651; 89.4755 + int i4652; 89.4756 + int i4653; 89.4757 + int i4654; 89.4758 + int i4655; 89.4759 + int i4656; 89.4760 + int i4657; 89.4761 + int i4658; 89.4762 + int i4659; 89.4763 + int i4660; 89.4764 + int i4661; 89.4765 + int i4662; 89.4766 + int i4663; 89.4767 + int i4664; 89.4768 + int i4665; 89.4769 + int i4666; 89.4770 + int i4667; 89.4771 + int i4668; 89.4772 + int i4669; 89.4773 + int i4670; 89.4774 + int i4671; 89.4775 + int i4672; 89.4776 + int i4673; 89.4777 + int i4674; 89.4778 + int i4675; 89.4779 + int i4676; 89.4780 + int i4677; 89.4781 + int i4678; 89.4782 + int i4679; 89.4783 + int i4680; 89.4784 + int i4681; 89.4785 + int i4682; 89.4786 + int i4683; 89.4787 + int i4684; 89.4788 + int i4685; 89.4789 + int i4686; 89.4790 + int i4687; 89.4791 + int i4688; 89.4792 + int i4689; 89.4793 + int i4690; 89.4794 + int i4691; 89.4795 + int i4692; 89.4796 + int i4693; 89.4797 + int i4694; 89.4798 + int i4695; 89.4799 + int i4696; 89.4800 + int i4697; 89.4801 + int i4698; 89.4802 + int i4699; 89.4803 + int i4700; 89.4804 + int i4701; 89.4805 + int i4702; 89.4806 + int i4703; 89.4807 + int i4704; 89.4808 + int i4705; 89.4809 + int i4706; 89.4810 + int i4707; 89.4811 + int i4708; 89.4812 + int i4709; 89.4813 + int i4710; 89.4814 + int i4711; 89.4815 + int i4712; 89.4816 + int i4713; 89.4817 + int i4714; 89.4818 + int i4715; 89.4819 + int i4716; 89.4820 + int i4717; 89.4821 + int i4718; 89.4822 + int i4719; 89.4823 + int i4720; 89.4824 + int i4721; 89.4825 + int i4722; 89.4826 + int i4723; 89.4827 + int i4724; 89.4828 + int i4725; 89.4829 + int i4726; 89.4830 + int i4727; 89.4831 + int i4728; 89.4832 + int i4729; 89.4833 + int i4730; 89.4834 + int i4731; 89.4835 + int i4732; 89.4836 + int i4733; 89.4837 + int i4734; 89.4838 + int i4735; 89.4839 + int i4736; 89.4840 + int i4737; 89.4841 + int i4738; 89.4842 + int i4739; 89.4843 + int i4740; 89.4844 + int i4741; 89.4845 + int i4742; 89.4846 + int i4743; 89.4847 + int i4744; 89.4848 + int i4745; 89.4849 + int i4746; 89.4850 + int i4747; 89.4851 + int i4748; 89.4852 + int i4749; 89.4853 + int i4750; 89.4854 + int i4751; 89.4855 + int i4752; 89.4856 + int i4753; 89.4857 + int i4754; 89.4858 + int i4755; 89.4859 + int i4756; 89.4860 + int i4757; 89.4861 + int i4758; 89.4862 + int i4759; 89.4863 + int i4760; 89.4864 + int i4761; 89.4865 + int i4762; 89.4866 + int i4763; 89.4867 + int i4764; 89.4868 + int i4765; 89.4869 + int i4766; 89.4870 + int i4767; 89.4871 + int i4768; 89.4872 + int i4769; 89.4873 + int i4770; 89.4874 + int i4771; 89.4875 + int i4772; 89.4876 + int i4773; 89.4877 + int i4774; 89.4878 + int i4775; 89.4879 + int i4776; 89.4880 + int i4777; 89.4881 + int i4778; 89.4882 + int i4779; 89.4883 + int i4780; 89.4884 + int i4781; 89.4885 + int i4782; 89.4886 + int i4783; 89.4887 + int i4784; 89.4888 + int i4785; 89.4889 + int i4786; 89.4890 + int i4787; 89.4891 + int i4788; 89.4892 + int i4789; 89.4893 + int i4790; 89.4894 + int i4791; 89.4895 + int i4792; 89.4896 + int i4793; 89.4897 + int i4794; 89.4898 + int i4795; 89.4899 + int i4796; 89.4900 + int i4797; 89.4901 + int i4798; 89.4902 + int i4799; 89.4903 + int i4800; 89.4904 + int i4801; 89.4905 + int i4802; 89.4906 + int i4803; 89.4907 + int i4804; 89.4908 + int i4805; 89.4909 + int i4806; 89.4910 + int i4807; 89.4911 + int i4808; 89.4912 + int i4809; 89.4913 + int i4810; 89.4914 + int i4811; 89.4915 + int i4812; 89.4916 + int i4813; 89.4917 + int i4814; 89.4918 + int i4815; 89.4919 + int i4816; 89.4920 + int i4817; 89.4921 + int i4818; 89.4922 + int i4819; 89.4923 + int i4820; 89.4924 + int i4821; 89.4925 + int i4822; 89.4926 + int i4823; 89.4927 + int i4824; 89.4928 + int i4825; 89.4929 + int i4826; 89.4930 + int i4827; 89.4931 + int i4828; 89.4932 + int i4829; 89.4933 + int i4830; 89.4934 + int i4831; 89.4935 + int i4832; 89.4936 + int i4833; 89.4937 + int i4834; 89.4938 + int i4835; 89.4939 + int i4836; 89.4940 + int i4837; 89.4941 + int i4838; 89.4942 + int i4839; 89.4943 + int i4840; 89.4944 + int i4841; 89.4945 + int i4842; 89.4946 + int i4843; 89.4947 + int i4844; 89.4948 + int i4845; 89.4949 + int i4846; 89.4950 + int i4847; 89.4951 + int i4848; 89.4952 + int i4849; 89.4953 + int i4850; 89.4954 + int i4851; 89.4955 + int i4852; 89.4956 + int i4853; 89.4957 + int i4854; 89.4958 + int i4855; 89.4959 + int i4856; 89.4960 + int i4857; 89.4961 + int i4858; 89.4962 + int i4859; 89.4963 + int i4860; 89.4964 + int i4861; 89.4965 + int i4862; 89.4966 + int i4863; 89.4967 + int i4864; 89.4968 + int i4865; 89.4969 + int i4866; 89.4970 + int i4867; 89.4971 + int i4868; 89.4972 + int i4869; 89.4973 + int i4870; 89.4974 + int i4871; 89.4975 + int i4872; 89.4976 + int i4873; 89.4977 + int i4874; 89.4978 + int i4875; 89.4979 + int i4876; 89.4980 + int i4877; 89.4981 + int i4878; 89.4982 + int i4879; 89.4983 + int i4880; 89.4984 + int i4881; 89.4985 + int i4882; 89.4986 + int i4883; 89.4987 + int i4884; 89.4988 + int i4885; 89.4989 + int i4886; 89.4990 + int i4887; 89.4991 + int i4888; 89.4992 + int i4889; 89.4993 + int i4890; 89.4994 + int i4891; 89.4995 + int i4892; 89.4996 + int i4893; 89.4997 + int i4894; 89.4998 + int i4895; 89.4999 + int i4896; 89.5000 + int i4897; 89.5001 + int i4898; 89.5002 + int i4899; 89.5003 + int i4900; 89.5004 + int i4901; 89.5005 + int i4902; 89.5006 + int i4903; 89.5007 + int i4904; 89.5008 + int i4905; 89.5009 + int i4906; 89.5010 + int i4907; 89.5011 + int i4908; 89.5012 + int i4909; 89.5013 + int i4910; 89.5014 + int i4911; 89.5015 + int i4912; 89.5016 + int i4913; 89.5017 + int i4914; 89.5018 + int i4915; 89.5019 + int i4916; 89.5020 + int i4917; 89.5021 + int i4918; 89.5022 + int i4919; 89.5023 + int i4920; 89.5024 + int i4921; 89.5025 + int i4922; 89.5026 + int i4923; 89.5027 + int i4924; 89.5028 + int i4925; 89.5029 + int i4926; 89.5030 + int i4927; 89.5031 + int i4928; 89.5032 + int i4929; 89.5033 + int i4930; 89.5034 + int i4931; 89.5035 + int i4932; 89.5036 + int i4933; 89.5037 + int i4934; 89.5038 + int i4935; 89.5039 + int i4936; 89.5040 + int i4937; 89.5041 + int i4938; 89.5042 + int i4939; 89.5043 + int i4940; 89.5044 + int i4941; 89.5045 + int i4942; 89.5046 + int i4943; 89.5047 + int i4944; 89.5048 + int i4945; 89.5049 + int i4946; 89.5050 + int i4947; 89.5051 + int i4948; 89.5052 + int i4949; 89.5053 + int i4950; 89.5054 + int i4951; 89.5055 + int i4952; 89.5056 + int i4953; 89.5057 + int i4954; 89.5058 + int i4955; 89.5059 + int i4956; 89.5060 + int i4957; 89.5061 + int i4958; 89.5062 + int i4959; 89.5063 + int i4960; 89.5064 + int i4961; 89.5065 + int i4962; 89.5066 + int i4963; 89.5067 + int i4964; 89.5068 + int i4965; 89.5069 + int i4966; 89.5070 + int i4967; 89.5071 + int i4968; 89.5072 + int i4969; 89.5073 + int i4970; 89.5074 + int i4971; 89.5075 + int i4972; 89.5076 + int i4973; 89.5077 + int i4974; 89.5078 + int i4975; 89.5079 + int i4976; 89.5080 + int i4977; 89.5081 + int i4978; 89.5082 + int i4979; 89.5083 + int i4980; 89.5084 + int i4981; 89.5085 + int i4982; 89.5086 + int i4983; 89.5087 + int i4984; 89.5088 + int i4985; 89.5089 + int i4986; 89.5090 + int i4987; 89.5091 + int i4988; 89.5092 + int i4989; 89.5093 + int i4990; 89.5094 + int i4991; 89.5095 + int i4992; 89.5096 + int i4993; 89.5097 + int i4994; 89.5098 + int i4995; 89.5099 + int i4996; 89.5100 + int i4997; 89.5101 + int i4998; 89.5102 + int i4999; 89.5103 + int i5000; 89.5104 + int i5001; 89.5105 + int i5002; 89.5106 + int i5003; 89.5107 + int i5004; 89.5108 + int i5005; 89.5109 + int i5006; 89.5110 + int i5007; 89.5111 + int i5008; 89.5112 + int i5009; 89.5113 + int i5010; 89.5114 + int i5011; 89.5115 + int i5012; 89.5116 + int i5013; 89.5117 + int i5014; 89.5118 + int i5015; 89.5119 + int i5016; 89.5120 + int i5017; 89.5121 + int i5018; 89.5122 + int i5019; 89.5123 + int i5020; 89.5124 + int i5021; 89.5125 + int i5022; 89.5126 + int i5023; 89.5127 + int i5024; 89.5128 + int i5025; 89.5129 + int i5026; 89.5130 + int i5027; 89.5131 + int i5028; 89.5132 + int i5029; 89.5133 + int i5030; 89.5134 + int i5031; 89.5135 + int i5032; 89.5136 + int i5033; 89.5137 + int i5034; 89.5138 + int i5035; 89.5139 + int i5036; 89.5140 + int i5037; 89.5141 + int i5038; 89.5142 + int i5039; 89.5143 + int i5040; 89.5144 + int i5041; 89.5145 + int i5042; 89.5146 + int i5043; 89.5147 + int i5044; 89.5148 + int i5045; 89.5149 + int i5046; 89.5150 + int i5047; 89.5151 + int i5048; 89.5152 + int i5049; 89.5153 + int i5050; 89.5154 + int i5051; 89.5155 + int i5052; 89.5156 + int i5053; 89.5157 + int i5054; 89.5158 + int i5055; 89.5159 + int i5056; 89.5160 + int i5057; 89.5161 + int i5058; 89.5162 + int i5059; 89.5163 + int i5060; 89.5164 + int i5061; 89.5165 + int i5062; 89.5166 + int i5063; 89.5167 + int i5064; 89.5168 + int i5065; 89.5169 + int i5066; 89.5170 + int i5067; 89.5171 + int i5068; 89.5172 + int i5069; 89.5173 + int i5070; 89.5174 + int i5071; 89.5175 + int i5072; 89.5176 + int i5073; 89.5177 + int i5074; 89.5178 + int i5075; 89.5179 + int i5076; 89.5180 + int i5077; 89.5181 + int i5078; 89.5182 + int i5079; 89.5183 + int i5080; 89.5184 + int i5081; 89.5185 + int i5082; 89.5186 + int i5083; 89.5187 + int i5084; 89.5188 + int i5085; 89.5189 + int i5086; 89.5190 + int i5087; 89.5191 + int i5088; 89.5192 + int i5089; 89.5193 + int i5090; 89.5194 + int i5091; 89.5195 + int i5092; 89.5196 + int i5093; 89.5197 + int i5094; 89.5198 + int i5095; 89.5199 + int i5096; 89.5200 + int i5097; 89.5201 + int i5098; 89.5202 + int i5099; 89.5203 + int i5100; 89.5204 + int i5101; 89.5205 + int i5102; 89.5206 + int i5103; 89.5207 + int i5104; 89.5208 + int i5105; 89.5209 + int i5106; 89.5210 + int i5107; 89.5211 + int i5108; 89.5212 + int i5109; 89.5213 + int i5110; 89.5214 + int i5111; 89.5215 + int i5112; 89.5216 + int i5113; 89.5217 + int i5114; 89.5218 + int i5115; 89.5219 + int i5116; 89.5220 + int i5117; 89.5221 + int i5118; 89.5222 + int i5119; 89.5223 + int i5120; 89.5224 + int i5121; 89.5225 + int i5122; 89.5226 + int i5123; 89.5227 + int i5124; 89.5228 + int i5125; 89.5229 + int i5126; 89.5230 + int i5127; 89.5231 + int i5128; 89.5232 + int i5129; 89.5233 + int i5130; 89.5234 + int i5131; 89.5235 + int i5132; 89.5236 + int i5133; 89.5237 + int i5134; 89.5238 + int i5135; 89.5239 + int i5136; 89.5240 + int i5137; 89.5241 + int i5138; 89.5242 + int i5139; 89.5243 + int i5140; 89.5244 + int i5141; 89.5245 + int i5142; 89.5246 + int i5143; 89.5247 + int i5144; 89.5248 + int i5145; 89.5249 + int i5146; 89.5250 + int i5147; 89.5251 + int i5148; 89.5252 + int i5149; 89.5253 + int i5150; 89.5254 + int i5151; 89.5255 + int i5152; 89.5256 + int i5153; 89.5257 + int i5154; 89.5258 + int i5155; 89.5259 + int i5156; 89.5260 + int i5157; 89.5261 + int i5158; 89.5262 + int i5159; 89.5263 + int i5160; 89.5264 + int i5161; 89.5265 + int i5162; 89.5266 + int i5163; 89.5267 + int i5164; 89.5268 + int i5165; 89.5269 + int i5166; 89.5270 + int i5167; 89.5271 + int i5168; 89.5272 + int i5169; 89.5273 + int i5170; 89.5274 + int i5171; 89.5275 + int i5172; 89.5276 + int i5173; 89.5277 + int i5174; 89.5278 + int i5175; 89.5279 + int i5176; 89.5280 + int i5177; 89.5281 + int i5178; 89.5282 + int i5179; 89.5283 + int i5180; 89.5284 + int i5181; 89.5285 + int i5182; 89.5286 + int i5183; 89.5287 + int i5184; 89.5288 + int i5185; 89.5289 + int i5186; 89.5290 + int i5187; 89.5291 + int i5188; 89.5292 + int i5189; 89.5293 + int i5190; 89.5294 + int i5191; 89.5295 + int i5192; 89.5296 + int i5193; 89.5297 + int i5194; 89.5298 + int i5195; 89.5299 + int i5196; 89.5300 + int i5197; 89.5301 + int i5198; 89.5302 + int i5199; 89.5303 + int i5200; 89.5304 + int i5201; 89.5305 + int i5202; 89.5306 + int i5203; 89.5307 + int i5204; 89.5308 + int i5205; 89.5309 + int i5206; 89.5310 + int i5207; 89.5311 + int i5208; 89.5312 + int i5209; 89.5313 + int i5210; 89.5314 + int i5211; 89.5315 + int i5212; 89.5316 + int i5213; 89.5317 + int i5214; 89.5318 + int i5215; 89.5319 + int i5216; 89.5320 + int i5217; 89.5321 + int i5218; 89.5322 + int i5219; 89.5323 + int i5220; 89.5324 + int i5221; 89.5325 + int i5222; 89.5326 + int i5223; 89.5327 + int i5224; 89.5328 + int i5225; 89.5329 + int i5226; 89.5330 + int i5227; 89.5331 + int i5228; 89.5332 + int i5229; 89.5333 + int i5230; 89.5334 + int i5231; 89.5335 + int i5232; 89.5336 + int i5233; 89.5337 + int i5234; 89.5338 + int i5235; 89.5339 + int i5236; 89.5340 + int i5237; 89.5341 + int i5238; 89.5342 + int i5239; 89.5343 + int i5240; 89.5344 + int i5241; 89.5345 + int i5242; 89.5346 + int i5243; 89.5347 + int i5244; 89.5348 + int i5245; 89.5349 + int i5246; 89.5350 + int i5247; 89.5351 + int i5248; 89.5352 + int i5249; 89.5353 + int i5250; 89.5354 + int i5251; 89.5355 + int i5252; 89.5356 + int i5253; 89.5357 + int i5254; 89.5358 + int i5255; 89.5359 + int i5256; 89.5360 + int i5257; 89.5361 + int i5258; 89.5362 + int i5259; 89.5363 + int i5260; 89.5364 + int i5261; 89.5365 + int i5262; 89.5366 + int i5263; 89.5367 + int i5264; 89.5368 + int i5265; 89.5369 + int i5266; 89.5370 + int i5267; 89.5371 + int i5268; 89.5372 + int i5269; 89.5373 + int i5270; 89.5374 + int i5271; 89.5375 + int i5272; 89.5376 + int i5273; 89.5377 + int i5274; 89.5378 + int i5275; 89.5379 + int i5276; 89.5380 + int i5277; 89.5381 + int i5278; 89.5382 + int i5279; 89.5383 + int i5280; 89.5384 + int i5281; 89.5385 + int i5282; 89.5386 + int i5283; 89.5387 + int i5284; 89.5388 + int i5285; 89.5389 + int i5286; 89.5390 + int i5287; 89.5391 + int i5288; 89.5392 + int i5289; 89.5393 + int i5290; 89.5394 + int i5291; 89.5395 + int i5292; 89.5396 + int i5293; 89.5397 + int i5294; 89.5398 + int i5295; 89.5399 + int i5296; 89.5400 + int i5297; 89.5401 + int i5298; 89.5402 + int i5299; 89.5403 + int i5300; 89.5404 + int i5301; 89.5405 + int i5302; 89.5406 + int i5303; 89.5407 + int i5304; 89.5408 + int i5305; 89.5409 + int i5306; 89.5410 + int i5307; 89.5411 + int i5308; 89.5412 + int i5309; 89.5413 + int i5310; 89.5414 + int i5311; 89.5415 + int i5312; 89.5416 + int i5313; 89.5417 + int i5314; 89.5418 + int i5315; 89.5419 + int i5316; 89.5420 + int i5317; 89.5421 + int i5318; 89.5422 + int i5319; 89.5423 + int i5320; 89.5424 + int i5321; 89.5425 + int i5322; 89.5426 + int i5323; 89.5427 + int i5324; 89.5428 + int i5325; 89.5429 + int i5326; 89.5430 + int i5327; 89.5431 + int i5328; 89.5432 + int i5329; 89.5433 + int i5330; 89.5434 + int i5331; 89.5435 + int i5332; 89.5436 + int i5333; 89.5437 + int i5334; 89.5438 + int i5335; 89.5439 + int i5336; 89.5440 + int i5337; 89.5441 + int i5338; 89.5442 + int i5339; 89.5443 + int i5340; 89.5444 + int i5341; 89.5445 + int i5342; 89.5446 + int i5343; 89.5447 + int i5344; 89.5448 + int i5345; 89.5449 + int i5346; 89.5450 + int i5347; 89.5451 + int i5348; 89.5452 + int i5349; 89.5453 + int i5350; 89.5454 + int i5351; 89.5455 + int i5352; 89.5456 + int i5353; 89.5457 + int i5354; 89.5458 + int i5355; 89.5459 + int i5356; 89.5460 + int i5357; 89.5461 + int i5358; 89.5462 + int i5359; 89.5463 + int i5360; 89.5464 + int i5361; 89.5465 + int i5362; 89.5466 + int i5363; 89.5467 + int i5364; 89.5468 + int i5365; 89.5469 + int i5366; 89.5470 + int i5367; 89.5471 + int i5368; 89.5472 + int i5369; 89.5473 + int i5370; 89.5474 + int i5371; 89.5475 + int i5372; 89.5476 + int i5373; 89.5477 + int i5374; 89.5478 + int i5375; 89.5479 + int i5376; 89.5480 + int i5377; 89.5481 + int i5378; 89.5482 + int i5379; 89.5483 + int i5380; 89.5484 + int i5381; 89.5485 + int i5382; 89.5486 + int i5383; 89.5487 + int i5384; 89.5488 + int i5385; 89.5489 + int i5386; 89.5490 + int i5387; 89.5491 + int i5388; 89.5492 + int i5389; 89.5493 + int i5390; 89.5494 + int i5391; 89.5495 + int i5392; 89.5496 + int i5393; 89.5497 + int i5394; 89.5498 + int i5395; 89.5499 + int i5396; 89.5500 + int i5397; 89.5501 + int i5398; 89.5502 + int i5399; 89.5503 + int i5400; 89.5504 + int i5401; 89.5505 + int i5402; 89.5506 + int i5403; 89.5507 + int i5404; 89.5508 + int i5405; 89.5509 + int i5406; 89.5510 + int i5407; 89.5511 + int i5408; 89.5512 + int i5409; 89.5513 + int i5410; 89.5514 + int i5411; 89.5515 + int i5412; 89.5516 + int i5413; 89.5517 + int i5414; 89.5518 + int i5415; 89.5519 + int i5416; 89.5520 + int i5417; 89.5521 + int i5418; 89.5522 + int i5419; 89.5523 + int i5420; 89.5524 + int i5421; 89.5525 + int i5422; 89.5526 + int i5423; 89.5527 + int i5424; 89.5528 + int i5425; 89.5529 + int i5426; 89.5530 + int i5427; 89.5531 + int i5428; 89.5532 + int i5429; 89.5533 + int i5430; 89.5534 + int i5431; 89.5535 + int i5432; 89.5536 + int i5433; 89.5537 + int i5434; 89.5538 + int i5435; 89.5539 + int i5436; 89.5540 + int i5437; 89.5541 + int i5438; 89.5542 + int i5439; 89.5543 + int i5440; 89.5544 + int i5441; 89.5545 + int i5442; 89.5546 + int i5443; 89.5547 + int i5444; 89.5548 + int i5445; 89.5549 + int i5446; 89.5550 + int i5447; 89.5551 + int i5448; 89.5552 + int i5449; 89.5553 + int i5450; 89.5554 + int i5451; 89.5555 + int i5452; 89.5556 + int i5453; 89.5557 + int i5454; 89.5558 + int i5455; 89.5559 + int i5456; 89.5560 + int i5457; 89.5561 + int i5458; 89.5562 + int i5459; 89.5563 + int i5460; 89.5564 + int i5461; 89.5565 + int i5462; 89.5566 + int i5463; 89.5567 + int i5464; 89.5568 + int i5465; 89.5569 + int i5466; 89.5570 + int i5467; 89.5571 + int i5468; 89.5572 + int i5469; 89.5573 + int i5470; 89.5574 + int i5471; 89.5575 + int i5472; 89.5576 + int i5473; 89.5577 + int i5474; 89.5578 + int i5475; 89.5579 + int i5476; 89.5580 + int i5477; 89.5581 + int i5478; 89.5582 + int i5479; 89.5583 + int i5480; 89.5584 + int i5481; 89.5585 + int i5482; 89.5586 + int i5483; 89.5587 + int i5484; 89.5588 + int i5485; 89.5589 + int i5486; 89.5590 + int i5487; 89.5591 + int i5488; 89.5592 + int i5489; 89.5593 + int i5490; 89.5594 + int i5491; 89.5595 + int i5492; 89.5596 + int i5493; 89.5597 + int i5494; 89.5598 + int i5495; 89.5599 + int i5496; 89.5600 + int i5497; 89.5601 + int i5498; 89.5602 + int i5499; 89.5603 + int i5500; 89.5604 + int i5501; 89.5605 + int i5502; 89.5606 + int i5503; 89.5607 + int i5504; 89.5608 + int i5505; 89.5609 + int i5506; 89.5610 + int i5507; 89.5611 + int i5508; 89.5612 + int i5509; 89.5613 + int i5510; 89.5614 + int i5511; 89.5615 + int i5512; 89.5616 + int i5513; 89.5617 + int i5514; 89.5618 + int i5515; 89.5619 + int i5516; 89.5620 + int i5517; 89.5621 + int i5518; 89.5622 + int i5519; 89.5623 + int i5520; 89.5624 + int i5521; 89.5625 + int i5522; 89.5626 + int i5523; 89.5627 + int i5524; 89.5628 + int i5525; 89.5629 + int i5526; 89.5630 + int i5527; 89.5631 + int i5528; 89.5632 + int i5529; 89.5633 + int i5530; 89.5634 + int i5531; 89.5635 + int i5532; 89.5636 + int i5533; 89.5637 + int i5534; 89.5638 + int i5535; 89.5639 + int i5536; 89.5640 + int i5537; 89.5641 + int i5538; 89.5642 + int i5539; 89.5643 + int i5540; 89.5644 + int i5541; 89.5645 + int i5542; 89.5646 + int i5543; 89.5647 + int i5544; 89.5648 + int i5545; 89.5649 + int i5546; 89.5650 + int i5547; 89.5651 + int i5548; 89.5652 + int i5549; 89.5653 + int i5550; 89.5654 + int i5551; 89.5655 + int i5552; 89.5656 + int i5553; 89.5657 + int i5554; 89.5658 + int i5555; 89.5659 + int i5556; 89.5660 + int i5557; 89.5661 + int i5558; 89.5662 + int i5559; 89.5663 + int i5560; 89.5664 + int i5561; 89.5665 + int i5562; 89.5666 + int i5563; 89.5667 + int i5564; 89.5668 + int i5565; 89.5669 + int i5566; 89.5670 + int i5567; 89.5671 + int i5568; 89.5672 + int i5569; 89.5673 + int i5570; 89.5674 + int i5571; 89.5675 + int i5572; 89.5676 + int i5573; 89.5677 + int i5574; 89.5678 + int i5575; 89.5679 + int i5576; 89.5680 + int i5577; 89.5681 + int i5578; 89.5682 + int i5579; 89.5683 + int i5580; 89.5684 + int i5581; 89.5685 + int i5582; 89.5686 + int i5583; 89.5687 + int i5584; 89.5688 + int i5585; 89.5689 + int i5586; 89.5690 + int i5587; 89.5691 + int i5588; 89.5692 + int i5589; 89.5693 + int i5590; 89.5694 + int i5591; 89.5695 + int i5592; 89.5696 + int i5593; 89.5697 + int i5594; 89.5698 + int i5595; 89.5699 + int i5596; 89.5700 + int i5597; 89.5701 + int i5598; 89.5702 + int i5599; 89.5703 + int i5600; 89.5704 + int i5601; 89.5705 + int i5602; 89.5706 + int i5603; 89.5707 + int i5604; 89.5708 + int i5605; 89.5709 + int i5606; 89.5710 + int i5607; 89.5711 + int i5608; 89.5712 + int i5609; 89.5713 + int i5610; 89.5714 + int i5611; 89.5715 + int i5612; 89.5716 + int i5613; 89.5717 + int i5614; 89.5718 + int i5615; 89.5719 + int i5616; 89.5720 + int i5617; 89.5721 + int i5618; 89.5722 + int i5619; 89.5723 + int i5620; 89.5724 + int i5621; 89.5725 + int i5622; 89.5726 + int i5623; 89.5727 + int i5624; 89.5728 + int i5625; 89.5729 + int i5626; 89.5730 + int i5627; 89.5731 + int i5628; 89.5732 + int i5629; 89.5733 + int i5630; 89.5734 + int i5631; 89.5735 + int i5632; 89.5736 + int i5633; 89.5737 + int i5634; 89.5738 + int i5635; 89.5739 + int i5636; 89.5740 + int i5637; 89.5741 + int i5638; 89.5742 + int i5639; 89.5743 + int i5640; 89.5744 + int i5641; 89.5745 + int i5642; 89.5746 + int i5643; 89.5747 + int i5644; 89.5748 + int i5645; 89.5749 + int i5646; 89.5750 + int i5647; 89.5751 + int i5648; 89.5752 + int i5649; 89.5753 + int i5650; 89.5754 + int i5651; 89.5755 + int i5652; 89.5756 + int i5653; 89.5757 + int i5654; 89.5758 + int i5655; 89.5759 + int i5656; 89.5760 + int i5657; 89.5761 + int i5658; 89.5762 + int i5659; 89.5763 + int i5660; 89.5764 + int i5661; 89.5765 + int i5662; 89.5766 + int i5663; 89.5767 + int i5664; 89.5768 + int i5665; 89.5769 + int i5666; 89.5770 + int i5667; 89.5771 + int i5668; 89.5772 + int i5669; 89.5773 + int i5670; 89.5774 + int i5671; 89.5775 + int i5672; 89.5776 + int i5673; 89.5777 + int i5674; 89.5778 + int i5675; 89.5779 + int i5676; 89.5780 + int i5677; 89.5781 + int i5678; 89.5782 + int i5679; 89.5783 + int i5680; 89.5784 + int i5681; 89.5785 + int i5682; 89.5786 + int i5683; 89.5787 + int i5684; 89.5788 + int i5685; 89.5789 + int i5686; 89.5790 + int i5687; 89.5791 + int i5688; 89.5792 + int i5689; 89.5793 + int i5690; 89.5794 + int i5691; 89.5795 + int i5692; 89.5796 + int i5693; 89.5797 + int i5694; 89.5798 + int i5695; 89.5799 + int i5696; 89.5800 + int i5697; 89.5801 + int i5698; 89.5802 + int i5699; 89.5803 + int i5700; 89.5804 + int i5701; 89.5805 + int i5702; 89.5806 + int i5703; 89.5807 + int i5704; 89.5808 + int i5705; 89.5809 + int i5706; 89.5810 + int i5707; 89.5811 + int i5708; 89.5812 + int i5709; 89.5813 + int i5710; 89.5814 + int i5711; 89.5815 + int i5712; 89.5816 + int i5713; 89.5817 + int i5714; 89.5818 + int i5715; 89.5819 + int i5716; 89.5820 + int i5717; 89.5821 + int i5718; 89.5822 + int i5719; 89.5823 + int i5720; 89.5824 + int i5721; 89.5825 + int i5722; 89.5826 + int i5723; 89.5827 + int i5724; 89.5828 + int i5725; 89.5829 + int i5726; 89.5830 + int i5727; 89.5831 + int i5728; 89.5832 + int i5729; 89.5833 + int i5730; 89.5834 + int i5731; 89.5835 + int i5732; 89.5836 + int i5733; 89.5837 + int i5734; 89.5838 + int i5735; 89.5839 + int i5736; 89.5840 + int i5737; 89.5841 + int i5738; 89.5842 + int i5739; 89.5843 + int i5740; 89.5844 + int i5741; 89.5845 + int i5742; 89.5846 + int i5743; 89.5847 + int i5744; 89.5848 + int i5745; 89.5849 + int i5746; 89.5850 + int i5747; 89.5851 + int i5748; 89.5852 + int i5749; 89.5853 + int i5750; 89.5854 + int i5751; 89.5855 + int i5752; 89.5856 + int i5753; 89.5857 + int i5754; 89.5858 + int i5755; 89.5859 + int i5756; 89.5860 + int i5757; 89.5861 + int i5758; 89.5862 + int i5759; 89.5863 + int i5760; 89.5864 + int i5761; 89.5865 + int i5762; 89.5866 + int i5763; 89.5867 + int i5764; 89.5868 + int i5765; 89.5869 + int i5766; 89.5870 + int i5767; 89.5871 + int i5768; 89.5872 + int i5769; 89.5873 + int i5770; 89.5874 + int i5771; 89.5875 + int i5772; 89.5876 + int i5773; 89.5877 + int i5774; 89.5878 + int i5775; 89.5879 + int i5776; 89.5880 + int i5777; 89.5881 + int i5778; 89.5882 + int i5779; 89.5883 + int i5780; 89.5884 + int i5781; 89.5885 + int i5782; 89.5886 + int i5783; 89.5887 + int i5784; 89.5888 + int i5785; 89.5889 + int i5786; 89.5890 + int i5787; 89.5891 + int i5788; 89.5892 + int i5789; 89.5893 + int i5790; 89.5894 + int i5791; 89.5895 + int i5792; 89.5896 + int i5793; 89.5897 + int i5794; 89.5898 + int i5795; 89.5899 + int i5796; 89.5900 + int i5797; 89.5901 + int i5798; 89.5902 + int i5799; 89.5903 + int i5800; 89.5904 + int i5801; 89.5905 + int i5802; 89.5906 + int i5803; 89.5907 + int i5804; 89.5908 + int i5805; 89.5909 + int i5806; 89.5910 + int i5807; 89.5911 + int i5808; 89.5912 + int i5809; 89.5913 + int i5810; 89.5914 + int i5811; 89.5915 + int i5812; 89.5916 + int i5813; 89.5917 + int i5814; 89.5918 + int i5815; 89.5919 + int i5816; 89.5920 + int i5817; 89.5921 + int i5818; 89.5922 + int i5819; 89.5923 + int i5820; 89.5924 + int i5821; 89.5925 + int i5822; 89.5926 + int i5823; 89.5927 + int i5824; 89.5928 + int i5825; 89.5929 + int i5826; 89.5930 + int i5827; 89.5931 + int i5828; 89.5932 + int i5829; 89.5933 + int i5830; 89.5934 + int i5831; 89.5935 + int i5832; 89.5936 + int i5833; 89.5937 + int i5834; 89.5938 + int i5835; 89.5939 + int i5836; 89.5940 + int i5837; 89.5941 + int i5838; 89.5942 + int i5839; 89.5943 + int i5840; 89.5944 + int i5841; 89.5945 + int i5842; 89.5946 + int i5843; 89.5947 + int i5844; 89.5948 + int i5845; 89.5949 + int i5846; 89.5950 + int i5847; 89.5951 + int i5848; 89.5952 + int i5849; 89.5953 + int i5850; 89.5954 + int i5851; 89.5955 + int i5852; 89.5956 + int i5853; 89.5957 + int i5854; 89.5958 + int i5855; 89.5959 + int i5856; 89.5960 + int i5857; 89.5961 + int i5858; 89.5962 + int i5859; 89.5963 + int i5860; 89.5964 + int i5861; 89.5965 + int i5862; 89.5966 + int i5863; 89.5967 + int i5864; 89.5968 + int i5865; 89.5969 + int i5866; 89.5970 + int i5867; 89.5971 + int i5868; 89.5972 + int i5869; 89.5973 + int i5870; 89.5974 + int i5871; 89.5975 + int i5872; 89.5976 + int i5873; 89.5977 + int i5874; 89.5978 + int i5875; 89.5979 + int i5876; 89.5980 + int i5877; 89.5981 + int i5878; 89.5982 + int i5879; 89.5983 + int i5880; 89.5984 + int i5881; 89.5985 + int i5882; 89.5986 + int i5883; 89.5987 + int i5884; 89.5988 + int i5885; 89.5989 + int i5886; 89.5990 + int i5887; 89.5991 + int i5888; 89.5992 + int i5889; 89.5993 + int i5890; 89.5994 + int i5891; 89.5995 + int i5892; 89.5996 + int i5893; 89.5997 + int i5894; 89.5998 + int i5895; 89.5999 + int i5896; 89.6000 + int i5897; 89.6001 + int i5898; 89.6002 + int i5899; 89.6003 + int i5900; 89.6004 + int i5901; 89.6005 + int i5902; 89.6006 + int i5903; 89.6007 + int i5904; 89.6008 + int i5905; 89.6009 + int i5906; 89.6010 + int i5907; 89.6011 + int i5908; 89.6012 + int i5909; 89.6013 + int i5910; 89.6014 + int i5911; 89.6015 + int i5912; 89.6016 + int i5913; 89.6017 + int i5914; 89.6018 + int i5915; 89.6019 + int i5916; 89.6020 + int i5917; 89.6021 + int i5918; 89.6022 + int i5919; 89.6023 + int i5920; 89.6024 + int i5921; 89.6025 + int i5922; 89.6026 + int i5923; 89.6027 + int i5924; 89.6028 + int i5925; 89.6029 + int i5926; 89.6030 + int i5927; 89.6031 + int i5928; 89.6032 + int i5929; 89.6033 + int i5930; 89.6034 + int i5931; 89.6035 + int i5932; 89.6036 + int i5933; 89.6037 + int i5934; 89.6038 + int i5935; 89.6039 + int i5936; 89.6040 + int i5937; 89.6041 + int i5938; 89.6042 + int i5939; 89.6043 + int i5940; 89.6044 + int i5941; 89.6045 + int i5942; 89.6046 + int i5943; 89.6047 + int i5944; 89.6048 + int i5945; 89.6049 + int i5946; 89.6050 + int i5947; 89.6051 + int i5948; 89.6052 + int i5949; 89.6053 + int i5950; 89.6054 + int i5951; 89.6055 + int i5952; 89.6056 + int i5953; 89.6057 + int i5954; 89.6058 + int i5955; 89.6059 + int i5956; 89.6060 + int i5957; 89.6061 + int i5958; 89.6062 + int i5959; 89.6063 + int i5960; 89.6064 + int i5961; 89.6065 + int i5962; 89.6066 + int i5963; 89.6067 + int i5964; 89.6068 + int i5965; 89.6069 + int i5966; 89.6070 + int i5967; 89.6071 + int i5968; 89.6072 + int i5969; 89.6073 + int i5970; 89.6074 + int i5971; 89.6075 + int i5972; 89.6076 + int i5973; 89.6077 + int i5974; 89.6078 + int i5975; 89.6079 + int i5976; 89.6080 + int i5977; 89.6081 + int i5978; 89.6082 + int i5979; 89.6083 + int i5980; 89.6084 + int i5981; 89.6085 + int i5982; 89.6086 + int i5983; 89.6087 + int i5984; 89.6088 + int i5985; 89.6089 + int i5986; 89.6090 + int i5987; 89.6091 + int i5988; 89.6092 + int i5989; 89.6093 + int i5990; 89.6094 + int i5991; 89.6095 + int i5992; 89.6096 + int i5993; 89.6097 + int i5994; 89.6098 + int i5995; 89.6099 + int i5996; 89.6100 + int i5997; 89.6101 + int i5998; 89.6102 + int i5999; 89.6103 + int i6000; 89.6104 + int i6001; 89.6105 + int i6002; 89.6106 + int i6003; 89.6107 + int i6004; 89.6108 + int i6005; 89.6109 + int i6006; 89.6110 + int i6007; 89.6111 + int i6008; 89.6112 + int i6009; 89.6113 + int i6010; 89.6114 + int i6011; 89.6115 + int i6012; 89.6116 + int i6013; 89.6117 + int i6014; 89.6118 + int i6015; 89.6119 + int i6016; 89.6120 + int i6017; 89.6121 + int i6018; 89.6122 + int i6019; 89.6123 + int i6020; 89.6124 + int i6021; 89.6125 + int i6022; 89.6126 + int i6023; 89.6127 + int i6024; 89.6128 + int i6025; 89.6129 + int i6026; 89.6130 + int i6027; 89.6131 + int i6028; 89.6132 + int i6029; 89.6133 + int i6030; 89.6134 + int i6031; 89.6135 + int i6032; 89.6136 + int i6033; 89.6137 + int i6034; 89.6138 + int i6035; 89.6139 + int i6036; 89.6140 + int i6037; 89.6141 + int i6038; 89.6142 + int i6039; 89.6143 + int i6040; 89.6144 + int i6041; 89.6145 + int i6042; 89.6146 + int i6043; 89.6147 + int i6044; 89.6148 + int i6045; 89.6149 + int i6046; 89.6150 + int i6047; 89.6151 + int i6048; 89.6152 + int i6049; 89.6153 + int i6050; 89.6154 + int i6051; 89.6155 + int i6052; 89.6156 + int i6053; 89.6157 + int i6054; 89.6158 + int i6055; 89.6159 + int i6056; 89.6160 + int i6057; 89.6161 + int i6058; 89.6162 + int i6059; 89.6163 + int i6060; 89.6164 + int i6061; 89.6165 + int i6062; 89.6166 + int i6063; 89.6167 + int i6064; 89.6168 + int i6065; 89.6169 + int i6066; 89.6170 + int i6067; 89.6171 + int i6068; 89.6172 + int i6069; 89.6173 + int i6070; 89.6174 + int i6071; 89.6175 + int i6072; 89.6176 + int i6073; 89.6177 + int i6074; 89.6178 + int i6075; 89.6179 + int i6076; 89.6180 + int i6077; 89.6181 + int i6078; 89.6182 + int i6079; 89.6183 + int i6080; 89.6184 + int i6081; 89.6185 + int i6082; 89.6186 + int i6083; 89.6187 + int i6084; 89.6188 + int i6085; 89.6189 + int i6086; 89.6190 + int i6087; 89.6191 + int i6088; 89.6192 + int i6089; 89.6193 + int i6090; 89.6194 + int i6091; 89.6195 + int i6092; 89.6196 + int i6093; 89.6197 + int i6094; 89.6198 + int i6095; 89.6199 + int i6096; 89.6200 + int i6097; 89.6201 + int i6098; 89.6202 + int i6099; 89.6203 + int i6100; 89.6204 + int i6101; 89.6205 + int i6102; 89.6206 + int i6103; 89.6207 + int i6104; 89.6208 + int i6105; 89.6209 + int i6106; 89.6210 + int i6107; 89.6211 + int i6108; 89.6212 + int i6109; 89.6213 + int i6110; 89.6214 + int i6111; 89.6215 + int i6112; 89.6216 + int i6113; 89.6217 + int i6114; 89.6218 + int i6115; 89.6219 + int i6116; 89.6220 + int i6117; 89.6221 + int i6118; 89.6222 + int i6119; 89.6223 + int i6120; 89.6224 + int i6121; 89.6225 + int i6122; 89.6226 + int i6123; 89.6227 + int i6124; 89.6228 + int i6125; 89.6229 + int i6126; 89.6230 + int i6127; 89.6231 + int i6128; 89.6232 + int i6129; 89.6233 + int i6130; 89.6234 + int i6131; 89.6235 + int i6132; 89.6236 + int i6133; 89.6237 + int i6134; 89.6238 + int i6135; 89.6239 + int i6136; 89.6240 + int i6137; 89.6241 + int i6138; 89.6242 + int i6139; 89.6243 + int i6140; 89.6244 + int i6141; 89.6245 + int i6142; 89.6246 + int i6143; 89.6247 + int i6144; 89.6248 + int i6145; 89.6249 + int i6146; 89.6250 + int i6147; 89.6251 + int i6148; 89.6252 + int i6149; 89.6253 + int i6150; 89.6254 + int i6151; 89.6255 + int i6152; 89.6256 + int i6153; 89.6257 + int i6154; 89.6258 + int i6155; 89.6259 + int i6156; 89.6260 + int i6157; 89.6261 + int i6158; 89.6262 + int i6159; 89.6263 + int i6160; 89.6264 + int i6161; 89.6265 + int i6162; 89.6266 + int i6163; 89.6267 + int i6164; 89.6268 + int i6165; 89.6269 + int i6166; 89.6270 + int i6167; 89.6271 + int i6168; 89.6272 + int i6169; 89.6273 + int i6170; 89.6274 + int i6171; 89.6275 + int i6172; 89.6276 + int i6173; 89.6277 + int i6174; 89.6278 + int i6175; 89.6279 + int i6176; 89.6280 + int i6177; 89.6281 + int i6178; 89.6282 + int i6179; 89.6283 + int i6180; 89.6284 + int i6181; 89.6285 + int i6182; 89.6286 + int i6183; 89.6287 + int i6184; 89.6288 + int i6185; 89.6289 + int i6186; 89.6290 + int i6187; 89.6291 + int i6188; 89.6292 + int i6189; 89.6293 + int i6190; 89.6294 + int i6191; 89.6295 + int i6192; 89.6296 + int i6193; 89.6297 + int i6194; 89.6298 + int i6195; 89.6299 + int i6196; 89.6300 + int i6197; 89.6301 + int i6198; 89.6302 + int i6199; 89.6303 + int i6200; 89.6304 + int i6201; 89.6305 + int i6202; 89.6306 + int i6203; 89.6307 + int i6204; 89.6308 + int i6205; 89.6309 + int i6206; 89.6310 + int i6207; 89.6311 + int i6208; 89.6312 + int i6209; 89.6313 + int i6210; 89.6314 + int i6211; 89.6315 + int i6212; 89.6316 + int i6213; 89.6317 + int i6214; 89.6318 + int i6215; 89.6319 + int i6216; 89.6320 + int i6217; 89.6321 + int i6218; 89.6322 + int i6219; 89.6323 + int i6220; 89.6324 + int i6221; 89.6325 + int i6222; 89.6326 + int i6223; 89.6327 + int i6224; 89.6328 + int i6225; 89.6329 + int i6226; 89.6330 + int i6227; 89.6331 + int i6228; 89.6332 + int i6229; 89.6333 + int i6230; 89.6334 + int i6231; 89.6335 + int i6232; 89.6336 + int i6233; 89.6337 + int i6234; 89.6338 + int i6235; 89.6339 + int i6236; 89.6340 + int i6237; 89.6341 + int i6238; 89.6342 + int i6239; 89.6343 + int i6240; 89.6344 + int i6241; 89.6345 + int i6242; 89.6346 + int i6243; 89.6347 + int i6244; 89.6348 + int i6245; 89.6349 + int i6246; 89.6350 + int i6247; 89.6351 + int i6248; 89.6352 + int i6249; 89.6353 + int i6250; 89.6354 + int i6251; 89.6355 + int i6252; 89.6356 + int i6253; 89.6357 + int i6254; 89.6358 + int i6255; 89.6359 + int i6256; 89.6360 + int i6257; 89.6361 + int i6258; 89.6362 + int i6259; 89.6363 + int i6260; 89.6364 + int i6261; 89.6365 + int i6262; 89.6366 + int i6263; 89.6367 + int i6264; 89.6368 + int i6265; 89.6369 + int i6266; 89.6370 + int i6267; 89.6371 + int i6268; 89.6372 + int i6269; 89.6373 + int i6270; 89.6374 + int i6271; 89.6375 + int i6272; 89.6376 + int i6273; 89.6377 + int i6274; 89.6378 + int i6275; 89.6379 + int i6276; 89.6380 + int i6277; 89.6381 + int i6278; 89.6382 + int i6279; 89.6383 + int i6280; 89.6384 + int i6281; 89.6385 + int i6282; 89.6386 + int i6283; 89.6387 + int i6284; 89.6388 + int i6285; 89.6389 + int i6286; 89.6390 + int i6287; 89.6391 + int i6288; 89.6392 + int i6289; 89.6393 + int i6290; 89.6394 + int i6291; 89.6395 + int i6292; 89.6396 + int i6293; 89.6397 + int i6294; 89.6398 + int i6295; 89.6399 + int i6296; 89.6400 + int i6297; 89.6401 + int i6298; 89.6402 + int i6299; 89.6403 + int i6300; 89.6404 + int i6301; 89.6405 + int i6302; 89.6406 + int i6303; 89.6407 + int i6304; 89.6408 + int i6305; 89.6409 + int i6306; 89.6410 + int i6307; 89.6411 + int i6308; 89.6412 + int i6309; 89.6413 + int i6310; 89.6414 + int i6311; 89.6415 + int i6312; 89.6416 + int i6313; 89.6417 + int i6314; 89.6418 + int i6315; 89.6419 + int i6316; 89.6420 + int i6317; 89.6421 + int i6318; 89.6422 + int i6319; 89.6423 + int i6320; 89.6424 + int i6321; 89.6425 + int i6322; 89.6426 + int i6323; 89.6427 + int i6324; 89.6428 + int i6325; 89.6429 + int i6326; 89.6430 + int i6327; 89.6431 + int i6328; 89.6432 + int i6329; 89.6433 + int i6330; 89.6434 + int i6331; 89.6435 + int i6332; 89.6436 + int i6333; 89.6437 + int i6334; 89.6438 + int i6335; 89.6439 + int i6336; 89.6440 + int i6337; 89.6441 + int i6338; 89.6442 + int i6339; 89.6443 + int i6340; 89.6444 + int i6341; 89.6445 + int i6342; 89.6446 + int i6343; 89.6447 + int i6344; 89.6448 + int i6345; 89.6449 + int i6346; 89.6450 + int i6347; 89.6451 + int i6348; 89.6452 + int i6349; 89.6453 + int i6350; 89.6454 + int i6351; 89.6455 + int i6352; 89.6456 + int i6353; 89.6457 + int i6354; 89.6458 + int i6355; 89.6459 + int i6356; 89.6460 + int i6357; 89.6461 + int i6358; 89.6462 + int i6359; 89.6463 + int i6360; 89.6464 + int i6361; 89.6465 + int i6362; 89.6466 + int i6363; 89.6467 + int i6364; 89.6468 + int i6365; 89.6469 + int i6366; 89.6470 + int i6367; 89.6471 + int i6368; 89.6472 + int i6369; 89.6473 + int i6370; 89.6474 + int i6371; 89.6475 + int i6372; 89.6476 + int i6373; 89.6477 + int i6374; 89.6478 + int i6375; 89.6479 + int i6376; 89.6480 + int i6377; 89.6481 + int i6378; 89.6482 + int i6379; 89.6483 + int i6380; 89.6484 + int i6381; 89.6485 + int i6382; 89.6486 + int i6383; 89.6487 + int i6384; 89.6488 + int i6385; 89.6489 + int i6386; 89.6490 + int i6387; 89.6491 + int i6388; 89.6492 + int i6389; 89.6493 + int i6390; 89.6494 + int i6391; 89.6495 + int i6392; 89.6496 + int i6393; 89.6497 + int i6394; 89.6498 + int i6395; 89.6499 + int i6396; 89.6500 + int i6397; 89.6501 + int i6398; 89.6502 + int i6399; 89.6503 + int i6400; 89.6504 + int i6401; 89.6505 + int i6402; 89.6506 + int i6403; 89.6507 + int i6404; 89.6508 + int i6405; 89.6509 + int i6406; 89.6510 + int i6407; 89.6511 + int i6408; 89.6512 + int i6409; 89.6513 + int i6410; 89.6514 + int i6411; 89.6515 + int i6412; 89.6516 + int i6413; 89.6517 + int i6414; 89.6518 + int i6415; 89.6519 + int i6416; 89.6520 + int i6417; 89.6521 + int i6418; 89.6522 + int i6419; 89.6523 + int i6420; 89.6524 + int i6421; 89.6525 + int i6422; 89.6526 + int i6423; 89.6527 + int i6424; 89.6528 + int i6425; 89.6529 + int i6426; 89.6530 + int i6427; 89.6531 + int i6428; 89.6532 + int i6429; 89.6533 + int i6430; 89.6534 + int i6431; 89.6535 + int i6432; 89.6536 + int i6433; 89.6537 + int i6434; 89.6538 + int i6435; 89.6539 + int i6436; 89.6540 + int i6437; 89.6541 + int i6438; 89.6542 + int i6439; 89.6543 + int i6440; 89.6544 + int i6441; 89.6545 + int i6442; 89.6546 + int i6443; 89.6547 + int i6444; 89.6548 + int i6445; 89.6549 + int i6446; 89.6550 + int i6447; 89.6551 + int i6448; 89.6552 + int i6449; 89.6553 + int i6450; 89.6554 + int i6451; 89.6555 + int i6452; 89.6556 + int i6453; 89.6557 + int i6454; 89.6558 + int i6455; 89.6559 + int i6456; 89.6560 + int i6457; 89.6561 + int i6458; 89.6562 + int i6459; 89.6563 + int i6460; 89.6564 + int i6461; 89.6565 + int i6462; 89.6566 + int i6463; 89.6567 + int i6464; 89.6568 + int i6465; 89.6569 + int i6466; 89.6570 + int i6467; 89.6571 + int i6468; 89.6572 + int i6469; 89.6573 + int i6470; 89.6574 + int i6471; 89.6575 + int i6472; 89.6576 + int i6473; 89.6577 + int i6474; 89.6578 + int i6475; 89.6579 + int i6476; 89.6580 + int i6477; 89.6581 + int i6478; 89.6582 + int i6479; 89.6583 + int i6480; 89.6584 + int i6481; 89.6585 + int i6482; 89.6586 + int i6483; 89.6587 + int i6484; 89.6588 + int i6485; 89.6589 + int i6486; 89.6590 + int i6487; 89.6591 + int i6488; 89.6592 + int i6489; 89.6593 + int i6490; 89.6594 + int i6491; 89.6595 + int i6492; 89.6596 + int i6493; 89.6597 + int i6494; 89.6598 + int i6495; 89.6599 + int i6496; 89.6600 + int i6497; 89.6601 + int i6498; 89.6602 + int i6499; 89.6603 + int i6500; 89.6604 + int i6501; 89.6605 + int i6502; 89.6606 + int i6503; 89.6607 + int i6504; 89.6608 + int i6505; 89.6609 + int i6506; 89.6610 + int i6507; 89.6611 + int i6508; 89.6612 + int i6509; 89.6613 + int i6510; 89.6614 + int i6511; 89.6615 + int i6512; 89.6616 + int i6513; 89.6617 + int i6514; 89.6618 + int i6515; 89.6619 + int i6516; 89.6620 + int i6517; 89.6621 + int i6518; 89.6622 + int i6519; 89.6623 + int i6520; 89.6624 + int i6521; 89.6625 + int i6522; 89.6626 + int i6523; 89.6627 + int i6524; 89.6628 + int i6525; 89.6629 + int i6526; 89.6630 + int i6527; 89.6631 + int i6528; 89.6632 + int i6529; 89.6633 + int i6530; 89.6634 + int i6531; 89.6635 + int i6532; 89.6636 + int i6533; 89.6637 + int i6534; 89.6638 + int i6535; 89.6639 + int i6536; 89.6640 + int i6537; 89.6641 + int i6538; 89.6642 + int i6539; 89.6643 + int i6540; 89.6644 + int i6541; 89.6645 + int i6542; 89.6646 + int i6543; 89.6647 + int i6544; 89.6648 + int i6545; 89.6649 + int i6546; 89.6650 + int i6547; 89.6651 + int i6548; 89.6652 + int i6549; 89.6653 + int i6550; 89.6654 + int i6551; 89.6655 + int i6552; 89.6656 + int i6553; 89.6657 + int i6554; 89.6658 + int i6555; 89.6659 + int i6556; 89.6660 + int i6557; 89.6661 + int i6558; 89.6662 + int i6559; 89.6663 + int i6560; 89.6664 + int i6561; 89.6665 + int i6562; 89.6666 + int i6563; 89.6667 + int i6564; 89.6668 + int i6565; 89.6669 + int i6566; 89.6670 + int i6567; 89.6671 + int i6568; 89.6672 + int i6569; 89.6673 + int i6570; 89.6674 + int i6571; 89.6675 + int i6572; 89.6676 + int i6573; 89.6677 + int i6574; 89.6678 + int i6575; 89.6679 + int i6576; 89.6680 + int i6577; 89.6681 + int i6578; 89.6682 + int i6579; 89.6683 + int i6580; 89.6684 + int i6581; 89.6685 + int i6582; 89.6686 + int i6583; 89.6687 + int i6584; 89.6688 + int i6585; 89.6689 + int i6586; 89.6690 + int i6587; 89.6691 + int i6588; 89.6692 + int i6589; 89.6693 + int i6590; 89.6694 + int i6591; 89.6695 + int i6592; 89.6696 + int i6593; 89.6697 + int i6594; 89.6698 + int i6595; 89.6699 + int i6596; 89.6700 + int i6597; 89.6701 + int i6598; 89.6702 + int i6599; 89.6703 + int i6600; 89.6704 + int i6601; 89.6705 + int i6602; 89.6706 + int i6603; 89.6707 + int i6604; 89.6708 + int i6605; 89.6709 + int i6606; 89.6710 + int i6607; 89.6711 + int i6608; 89.6712 + int i6609; 89.6713 + int i6610; 89.6714 + int i6611; 89.6715 + int i6612; 89.6716 + int i6613; 89.6717 + int i6614; 89.6718 + int i6615; 89.6719 + int i6616; 89.6720 + int i6617; 89.6721 + int i6618; 89.6722 + int i6619; 89.6723 + int i6620; 89.6724 + int i6621; 89.6725 + int i6622; 89.6726 + int i6623; 89.6727 + int i6624; 89.6728 + int i6625; 89.6729 + int i6626; 89.6730 + int i6627; 89.6731 + int i6628; 89.6732 + int i6629; 89.6733 + int i6630; 89.6734 + int i6631; 89.6735 + int i6632; 89.6736 + int i6633; 89.6737 + int i6634; 89.6738 + int i6635; 89.6739 + int i6636; 89.6740 + int i6637; 89.6741 + int i6638; 89.6742 + int i6639; 89.6743 + int i6640; 89.6744 + int i6641; 89.6745 + int i6642; 89.6746 + int i6643; 89.6747 + int i6644; 89.6748 + int i6645; 89.6749 + int i6646; 89.6750 + int i6647; 89.6751 + int i6648; 89.6752 + int i6649; 89.6753 + int i6650; 89.6754 + int i6651; 89.6755 + int i6652; 89.6756 + int i6653; 89.6757 + int i6654; 89.6758 + int i6655; 89.6759 + int i6656; 89.6760 + int i6657; 89.6761 + int i6658; 89.6762 + int i6659; 89.6763 + int i6660; 89.6764 + int i6661; 89.6765 + int i6662; 89.6766 + int i6663; 89.6767 + int i6664; 89.6768 + int i6665; 89.6769 + int i6666; 89.6770 + int i6667; 89.6771 + int i6668; 89.6772 + int i6669; 89.6773 + int i6670; 89.6774 + int i6671; 89.6775 + int i6672; 89.6776 + int i6673; 89.6777 + int i6674; 89.6778 + int i6675; 89.6779 + int i6676; 89.6780 + int i6677; 89.6781 + int i6678; 89.6782 + int i6679; 89.6783 + int i6680; 89.6784 + int i6681; 89.6785 + int i6682; 89.6786 + int i6683; 89.6787 + int i6684; 89.6788 + int i6685; 89.6789 + int i6686; 89.6790 + int i6687; 89.6791 + int i6688; 89.6792 + int i6689; 89.6793 + int i6690; 89.6794 + int i6691; 89.6795 + int i6692; 89.6796 + int i6693; 89.6797 + int i6694; 89.6798 + int i6695; 89.6799 + int i6696; 89.6800 + int i6697; 89.6801 + int i6698; 89.6802 + int i6699; 89.6803 + int i6700; 89.6804 + int i6701; 89.6805 + int i6702; 89.6806 + int i6703; 89.6807 + int i6704; 89.6808 + int i6705; 89.6809 + int i6706; 89.6810 + int i6707; 89.6811 + int i6708; 89.6812 + int i6709; 89.6813 + int i6710; 89.6814 + int i6711; 89.6815 + int i6712; 89.6816 + int i6713; 89.6817 + int i6714; 89.6818 + int i6715; 89.6819 + int i6716; 89.6820 + int i6717; 89.6821 + int i6718; 89.6822 + int i6719; 89.6823 + int i6720; 89.6824 + int i6721; 89.6825 + int i6722; 89.6826 + int i6723; 89.6827 + int i6724; 89.6828 + int i6725; 89.6829 + int i6726; 89.6830 + int i6727; 89.6831 + int i6728; 89.6832 + int i6729; 89.6833 + int i6730; 89.6834 + int i6731; 89.6835 + int i6732; 89.6836 + int i6733; 89.6837 + int i6734; 89.6838 + int i6735; 89.6839 + int i6736; 89.6840 + int i6737; 89.6841 + int i6738; 89.6842 + int i6739; 89.6843 + int i6740; 89.6844 + int i6741; 89.6845 + int i6742; 89.6846 + int i6743; 89.6847 + int i6744; 89.6848 + int i6745; 89.6849 + int i6746; 89.6850 + int i6747; 89.6851 + int i6748; 89.6852 + int i6749; 89.6853 + int i6750; 89.6854 + int i6751; 89.6855 + int i6752; 89.6856 + int i6753; 89.6857 + int i6754; 89.6858 + int i6755; 89.6859 + int i6756; 89.6860 + int i6757; 89.6861 + int i6758; 89.6862 + int i6759; 89.6863 + int i6760; 89.6864 + int i6761; 89.6865 + int i6762; 89.6866 + int i6763; 89.6867 + int i6764; 89.6868 + int i6765; 89.6869 + int i6766; 89.6870 + int i6767; 89.6871 + int i6768; 89.6872 + int i6769; 89.6873 + int i6770; 89.6874 + int i6771; 89.6875 + int i6772; 89.6876 + int i6773; 89.6877 + int i6774; 89.6878 + int i6775; 89.6879 + int i6776; 89.6880 + int i6777; 89.6881 + int i6778; 89.6882 + int i6779; 89.6883 + int i6780; 89.6884 + int i6781; 89.6885 + int i6782; 89.6886 + int i6783; 89.6887 + int i6784; 89.6888 + int i6785; 89.6889 + int i6786; 89.6890 + int i6787; 89.6891 + int i6788; 89.6892 + int i6789; 89.6893 + int i6790; 89.6894 + int i6791; 89.6895 + int i6792; 89.6896 + int i6793; 89.6897 + int i6794; 89.6898 + int i6795; 89.6899 + int i6796; 89.6900 + int i6797; 89.6901 + int i6798; 89.6902 + int i6799; 89.6903 + int i6800; 89.6904 + int i6801; 89.6905 + int i6802; 89.6906 + int i6803; 89.6907 + int i6804; 89.6908 + int i6805; 89.6909 + int i6806; 89.6910 + int i6807; 89.6911 + int i6808; 89.6912 + int i6809; 89.6913 + int i6810; 89.6914 + int i6811; 89.6915 + int i6812; 89.6916 + int i6813; 89.6917 + int i6814; 89.6918 + int i6815; 89.6919 + int i6816; 89.6920 + int i6817; 89.6921 + int i6818; 89.6922 + int i6819; 89.6923 + int i6820; 89.6924 + int i6821; 89.6925 + int i6822; 89.6926 + int i6823; 89.6927 + int i6824; 89.6928 + int i6825; 89.6929 + int i6826; 89.6930 + int i6827; 89.6931 + int i6828; 89.6932 + int i6829; 89.6933 + int i6830; 89.6934 + int i6831; 89.6935 + int i6832; 89.6936 + int i6833; 89.6937 + int i6834; 89.6938 + int i6835; 89.6939 + int i6836; 89.6940 + int i6837; 89.6941 + int i6838; 89.6942 + int i6839; 89.6943 + int i6840; 89.6944 + int i6841; 89.6945 + int i6842; 89.6946 + int i6843; 89.6947 + int i6844; 89.6948 + int i6845; 89.6949 + int i6846; 89.6950 + int i6847; 89.6951 + int i6848; 89.6952 + int i6849; 89.6953 + int i6850; 89.6954 + int i6851; 89.6955 + int i6852; 89.6956 + int i6853; 89.6957 + int i6854; 89.6958 + int i6855; 89.6959 + int i6856; 89.6960 + int i6857; 89.6961 + int i6858; 89.6962 + int i6859; 89.6963 + int i6860; 89.6964 + int i6861; 89.6965 + int i6862; 89.6966 + int i6863; 89.6967 + int i6864; 89.6968 + int i6865; 89.6969 + int i6866; 89.6970 + int i6867; 89.6971 + int i6868; 89.6972 + int i6869; 89.6973 + int i6870; 89.6974 + int i6871; 89.6975 + int i6872; 89.6976 + int i6873; 89.6977 + int i6874; 89.6978 + int i6875; 89.6979 + int i6876; 89.6980 + int i6877; 89.6981 + int i6878; 89.6982 + int i6879; 89.6983 + int i6880; 89.6984 + int i6881; 89.6985 + int i6882; 89.6986 + int i6883; 89.6987 + int i6884; 89.6988 + int i6885; 89.6989 + int i6886; 89.6990 + int i6887; 89.6991 + int i6888; 89.6992 + int i6889; 89.6993 + int i6890; 89.6994 + int i6891; 89.6995 + int i6892; 89.6996 + int i6893; 89.6997 + int i6894; 89.6998 + int i6895; 89.6999 + int i6896; 89.7000 + int i6897; 89.7001 + int i6898; 89.7002 + int i6899; 89.7003 + int i6900; 89.7004 + int i6901; 89.7005 + int i6902; 89.7006 + int i6903; 89.7007 + int i6904; 89.7008 + int i6905; 89.7009 + int i6906; 89.7010 + int i6907; 89.7011 + int i6908; 89.7012 + int i6909; 89.7013 + int i6910; 89.7014 + int i6911; 89.7015 + int i6912; 89.7016 + int i6913; 89.7017 + int i6914; 89.7018 + int i6915; 89.7019 + int i6916; 89.7020 + int i6917; 89.7021 + int i6918; 89.7022 + int i6919; 89.7023 + int i6920; 89.7024 + int i6921; 89.7025 + int i6922; 89.7026 + int i6923; 89.7027 + int i6924; 89.7028 + int i6925; 89.7029 + int i6926; 89.7030 + int i6927; 89.7031 + int i6928; 89.7032 + int i6929; 89.7033 + int i6930; 89.7034 + int i6931; 89.7035 + int i6932; 89.7036 + int i6933; 89.7037 + int i6934; 89.7038 + int i6935; 89.7039 + int i6936; 89.7040 + int i6937; 89.7041 + int i6938; 89.7042 + int i6939; 89.7043 + int i6940; 89.7044 + int i6941; 89.7045 + int i6942; 89.7046 + int i6943; 89.7047 + int i6944; 89.7048 + int i6945; 89.7049 + int i6946; 89.7050 + int i6947; 89.7051 + int i6948; 89.7052 + int i6949; 89.7053 + int i6950; 89.7054 + int i6951; 89.7055 + int i6952; 89.7056 + int i6953; 89.7057 + int i6954; 89.7058 + int i6955; 89.7059 + int i6956; 89.7060 + int i6957; 89.7061 + int i6958; 89.7062 + int i6959; 89.7063 + int i6960; 89.7064 + int i6961; 89.7065 + int i6962; 89.7066 + int i6963; 89.7067 + int i6964; 89.7068 + int i6965; 89.7069 + int i6966; 89.7070 + int i6967; 89.7071 + int i6968; 89.7072 + int i6969; 89.7073 + int i6970; 89.7074 + int i6971; 89.7075 + int i6972; 89.7076 + int i6973; 89.7077 + int i6974; 89.7078 + int i6975; 89.7079 + int i6976; 89.7080 + int i6977; 89.7081 + int i6978; 89.7082 + int i6979; 89.7083 + int i6980; 89.7084 + int i6981; 89.7085 + int i6982; 89.7086 + int i6983; 89.7087 + int i6984; 89.7088 + int i6985; 89.7089 + int i6986; 89.7090 + int i6987; 89.7091 + int i6988; 89.7092 + int i6989; 89.7093 + int i6990; 89.7094 + int i6991; 89.7095 + int i6992; 89.7096 + int i6993; 89.7097 + int i6994; 89.7098 + int i6995; 89.7099 + int i6996; 89.7100 + int i6997; 89.7101 + int i6998; 89.7102 + int i6999; 89.7103 + int i7000; 89.7104 + int i7001; 89.7105 + int i7002; 89.7106 + int i7003; 89.7107 + int i7004; 89.7108 + int i7005; 89.7109 + int i7006; 89.7110 + int i7007; 89.7111 + int i7008; 89.7112 + int i7009; 89.7113 + int i7010; 89.7114 + int i7011; 89.7115 + int i7012; 89.7116 + int i7013; 89.7117 + int i7014; 89.7118 + int i7015; 89.7119 + int i7016; 89.7120 + int i7017; 89.7121 + int i7018; 89.7122 + int i7019; 89.7123 + int i7020; 89.7124 + int i7021; 89.7125 + int i7022; 89.7126 + int i7023; 89.7127 + int i7024; 89.7128 + int i7025; 89.7129 + int i7026; 89.7130 + int i7027; 89.7131 + int i7028; 89.7132 + int i7029; 89.7133 + int i7030; 89.7134 + int i7031; 89.7135 + int i7032; 89.7136 + int i7033; 89.7137 + int i7034; 89.7138 + int i7035; 89.7139 + int i7036; 89.7140 + int i7037; 89.7141 + int i7038; 89.7142 + int i7039; 89.7143 + int i7040; 89.7144 + int i7041; 89.7145 + int i7042; 89.7146 + int i7043; 89.7147 + int i7044; 89.7148 + int i7045; 89.7149 + int i7046; 89.7150 + int i7047; 89.7151 + int i7048; 89.7152 + int i7049; 89.7153 + int i7050; 89.7154 + int i7051; 89.7155 + int i7052; 89.7156 + int i7053; 89.7157 + int i7054; 89.7158 + int i7055; 89.7159 + int i7056; 89.7160 + int i7057; 89.7161 + int i7058; 89.7162 + int i7059; 89.7163 + int i7060; 89.7164 + int i7061; 89.7165 + int i7062; 89.7166 + int i7063; 89.7167 + int i7064; 89.7168 + int i7065; 89.7169 + int i7066; 89.7170 + int i7067; 89.7171 + int i7068; 89.7172 + int i7069; 89.7173 + int i7070; 89.7174 + int i7071; 89.7175 + int i7072; 89.7176 + int i7073; 89.7177 + int i7074; 89.7178 + int i7075; 89.7179 + int i7076; 89.7180 + int i7077; 89.7181 + int i7078; 89.7182 + int i7079; 89.7183 + int i7080; 89.7184 + int i7081; 89.7185 + int i7082; 89.7186 + int i7083; 89.7187 + int i7084; 89.7188 + int i7085; 89.7189 + int i7086; 89.7190 + int i7087; 89.7191 + int i7088; 89.7192 + int i7089; 89.7193 + int i7090; 89.7194 + int i7091; 89.7195 + int i7092; 89.7196 + int i7093; 89.7197 + int i7094; 89.7198 + int i7095; 89.7199 + int i7096; 89.7200 + int i7097; 89.7201 + int i7098; 89.7202 + int i7099; 89.7203 + int i7100; 89.7204 + int i7101; 89.7205 + int i7102; 89.7206 + int i7103; 89.7207 + int i7104; 89.7208 + int i7105; 89.7209 + int i7106; 89.7210 + int i7107; 89.7211 + int i7108; 89.7212 + int i7109; 89.7213 + int i7110; 89.7214 + int i7111; 89.7215 + int i7112; 89.7216 + int i7113; 89.7217 + int i7114; 89.7218 + int i7115; 89.7219 + int i7116; 89.7220 + int i7117; 89.7221 + int i7118; 89.7222 + int i7119; 89.7223 + int i7120; 89.7224 + int i7121; 89.7225 + int i7122; 89.7226 + int i7123; 89.7227 + int i7124; 89.7228 + int i7125; 89.7229 + int i7126; 89.7230 + int i7127; 89.7231 + int i7128; 89.7232 + int i7129; 89.7233 + int i7130; 89.7234 + int i7131; 89.7235 + int i7132; 89.7236 + int i7133; 89.7237 + int i7134; 89.7238 + int i7135; 89.7239 + int i7136; 89.7240 + int i7137; 89.7241 + int i7138; 89.7242 + int i7139; 89.7243 + int i7140; 89.7244 + int i7141; 89.7245 + int i7142; 89.7246 + int i7143; 89.7247 + int i7144; 89.7248 + int i7145; 89.7249 + int i7146; 89.7250 + int i7147; 89.7251 + int i7148; 89.7252 + int i7149; 89.7253 + int i7150; 89.7254 + int i7151; 89.7255 + int i7152; 89.7256 + int i7153; 89.7257 + int i7154; 89.7258 + int i7155; 89.7259 + int i7156; 89.7260 + int i7157; 89.7261 + int i7158; 89.7262 + int i7159; 89.7263 + int i7160; 89.7264 + int i7161; 89.7265 + int i7162; 89.7266 + int i7163; 89.7267 + int i7164; 89.7268 + int i7165; 89.7269 + int i7166; 89.7270 + int i7167; 89.7271 + int i7168; 89.7272 + int i7169; 89.7273 + int i7170; 89.7274 + int i7171; 89.7275 + int i7172; 89.7276 + int i7173; 89.7277 + int i7174; 89.7278 + int i7175; 89.7279 + int i7176; 89.7280 + int i7177; 89.7281 + int i7178; 89.7282 + int i7179; 89.7283 + int i7180; 89.7284 + int i7181; 89.7285 + int i7182; 89.7286 + int i7183; 89.7287 + int i7184; 89.7288 + int i7185; 89.7289 + int i7186; 89.7290 + int i7187; 89.7291 + int i7188; 89.7292 + int i7189; 89.7293 + int i7190; 89.7294 + int i7191; 89.7295 + int i7192; 89.7296 + int i7193; 89.7297 + int i7194; 89.7298 + int i7195; 89.7299 + int i7196; 89.7300 + int i7197; 89.7301 + int i7198; 89.7302 + int i7199; 89.7303 + int i7200; 89.7304 + int i7201; 89.7305 + int i7202; 89.7306 + int i7203; 89.7307 + int i7204; 89.7308 + int i7205; 89.7309 + int i7206; 89.7310 + int i7207; 89.7311 + int i7208; 89.7312 + int i7209; 89.7313 + int i7210; 89.7314 + int i7211; 89.7315 + int i7212; 89.7316 + int i7213; 89.7317 + int i7214; 89.7318 + int i7215; 89.7319 + int i7216; 89.7320 + int i7217; 89.7321 + int i7218; 89.7322 + int i7219; 89.7323 + int i7220; 89.7324 + int i7221; 89.7325 + int i7222; 89.7326 + int i7223; 89.7327 + int i7224; 89.7328 + int i7225; 89.7329 + int i7226; 89.7330 + int i7227; 89.7331 + int i7228; 89.7332 + int i7229; 89.7333 + int i7230; 89.7334 + int i7231; 89.7335 + int i7232; 89.7336 + int i7233; 89.7337 + int i7234; 89.7338 + int i7235; 89.7339 + int i7236; 89.7340 + int i7237; 89.7341 + int i7238; 89.7342 + int i7239; 89.7343 + int i7240; 89.7344 + int i7241; 89.7345 + int i7242; 89.7346 + int i7243; 89.7347 + int i7244; 89.7348 + int i7245; 89.7349 + int i7246; 89.7350 + int i7247; 89.7351 + int i7248; 89.7352 + int i7249; 89.7353 + int i7250; 89.7354 + int i7251; 89.7355 + int i7252; 89.7356 + int i7253; 89.7357 + int i7254; 89.7358 + int i7255; 89.7359 + int i7256; 89.7360 + int i7257; 89.7361 + int i7258; 89.7362 + int i7259; 89.7363 + int i7260; 89.7364 + int i7261; 89.7365 + int i7262; 89.7366 + int i7263; 89.7367 + int i7264; 89.7368 + int i7265; 89.7369 + int i7266; 89.7370 + int i7267; 89.7371 + int i7268; 89.7372 + int i7269; 89.7373 + int i7270; 89.7374 + int i7271; 89.7375 + int i7272; 89.7376 + int i7273; 89.7377 + int i7274; 89.7378 + int i7275; 89.7379 + int i7276; 89.7380 + int i7277; 89.7381 + int i7278; 89.7382 + int i7279; 89.7383 + int i7280; 89.7384 + int i7281; 89.7385 + int i7282; 89.7386 + int i7283; 89.7387 + int i7284; 89.7388 + int i7285; 89.7389 + int i7286; 89.7390 + int i7287; 89.7391 + int i7288; 89.7392 + int i7289; 89.7393 + int i7290; 89.7394 + int i7291; 89.7395 + int i7292; 89.7396 + int i7293; 89.7397 + int i7294; 89.7398 + int i7295; 89.7399 + int i7296; 89.7400 + int i7297; 89.7401 + int i7298; 89.7402 + int i7299; 89.7403 + int i7300; 89.7404 + int i7301; 89.7405 + int i7302; 89.7406 + int i7303; 89.7407 + int i7304; 89.7408 + int i7305; 89.7409 + int i7306; 89.7410 + int i7307; 89.7411 + int i7308; 89.7412 + int i7309; 89.7413 + int i7310; 89.7414 + int i7311; 89.7415 + int i7312; 89.7416 + int i7313; 89.7417 + int i7314; 89.7418 + int i7315; 89.7419 + int i7316; 89.7420 + int i7317; 89.7421 + int i7318; 89.7422 + int i7319; 89.7423 + int i7320; 89.7424 + int i7321; 89.7425 + int i7322; 89.7426 + int i7323; 89.7427 + int i7324; 89.7428 + int i7325; 89.7429 + int i7326; 89.7430 + int i7327; 89.7431 + int i7328; 89.7432 + int i7329; 89.7433 + int i7330; 89.7434 + int i7331; 89.7435 + int i7332; 89.7436 + int i7333; 89.7437 + int i7334; 89.7438 + int i7335; 89.7439 + int i7336; 89.7440 + int i7337; 89.7441 + int i7338; 89.7442 + int i7339; 89.7443 + int i7340; 89.7444 + int i7341; 89.7445 + int i7342; 89.7446 + int i7343; 89.7447 + int i7344; 89.7448 + int i7345; 89.7449 + int i7346; 89.7450 + int i7347; 89.7451 + int i7348; 89.7452 + int i7349; 89.7453 + int i7350; 89.7454 + int i7351; 89.7455 + int i7352; 89.7456 + int i7353; 89.7457 + int i7354; 89.7458 + int i7355; 89.7459 + int i7356; 89.7460 + int i7357; 89.7461 + int i7358; 89.7462 + int i7359; 89.7463 + int i7360; 89.7464 + int i7361; 89.7465 + int i7362; 89.7466 + int i7363; 89.7467 + int i7364; 89.7468 + int i7365; 89.7469 + int i7366; 89.7470 + int i7367; 89.7471 + int i7368; 89.7472 + int i7369; 89.7473 + int i7370; 89.7474 + int i7371; 89.7475 + int i7372; 89.7476 + int i7373; 89.7477 + int i7374; 89.7478 + int i7375; 89.7479 + int i7376; 89.7480 + int i7377; 89.7481 + int i7378; 89.7482 + int i7379; 89.7483 + int i7380; 89.7484 + int i7381; 89.7485 + int i7382; 89.7486 + int i7383; 89.7487 + int i7384; 89.7488 + int i7385; 89.7489 + int i7386; 89.7490 + int i7387; 89.7491 + int i7388; 89.7492 + int i7389; 89.7493 + int i7390; 89.7494 + int i7391; 89.7495 + int i7392; 89.7496 + int i7393; 89.7497 + int i7394; 89.7498 + int i7395; 89.7499 + int i7396; 89.7500 + int i7397; 89.7501 + int i7398; 89.7502 + int i7399; 89.7503 + int i7400; 89.7504 + int i7401; 89.7505 + int i7402; 89.7506 + int i7403; 89.7507 + int i7404; 89.7508 + int i7405; 89.7509 + int i7406; 89.7510 + int i7407; 89.7511 + int i7408; 89.7512 + int i7409; 89.7513 + int i7410; 89.7514 + int i7411; 89.7515 + int i7412; 89.7516 + int i7413; 89.7517 + int i7414; 89.7518 + int i7415; 89.7519 + int i7416; 89.7520 + int i7417; 89.7521 + int i7418; 89.7522 + int i7419; 89.7523 + int i7420; 89.7524 + int i7421; 89.7525 + int i7422; 89.7526 + int i7423; 89.7527 + int i7424; 89.7528 + int i7425; 89.7529 + int i7426; 89.7530 + int i7427; 89.7531 + int i7428; 89.7532 + int i7429; 89.7533 + int i7430; 89.7534 + int i7431; 89.7535 + int i7432; 89.7536 + int i7433; 89.7537 + int i7434; 89.7538 + int i7435; 89.7539 + int i7436; 89.7540 + int i7437; 89.7541 + int i7438; 89.7542 + int i7439; 89.7543 + int i7440; 89.7544 + int i7441; 89.7545 + int i7442; 89.7546 + int i7443; 89.7547 + int i7444; 89.7548 + int i7445; 89.7549 + int i7446; 89.7550 + int i7447; 89.7551 + int i7448; 89.7552 + int i7449; 89.7553 + int i7450; 89.7554 + int i7451; 89.7555 + int i7452; 89.7556 + int i7453; 89.7557 + int i7454; 89.7558 + int i7455; 89.7559 + int i7456; 89.7560 + int i7457; 89.7561 + int i7458; 89.7562 + int i7459; 89.7563 + int i7460; 89.7564 + int i7461; 89.7565 + int i7462; 89.7566 + int i7463; 89.7567 + int i7464; 89.7568 + int i7465; 89.7569 + int i7466; 89.7570 + int i7467; 89.7571 + int i7468; 89.7572 + int i7469; 89.7573 + int i7470; 89.7574 + int i7471; 89.7575 + int i7472; 89.7576 + int i7473; 89.7577 + int i7474; 89.7578 + int i7475; 89.7579 + int i7476; 89.7580 + int i7477; 89.7581 + int i7478; 89.7582 + int i7479; 89.7583 + int i7480; 89.7584 + int i7481; 89.7585 + int i7482; 89.7586 + int i7483; 89.7587 + int i7484; 89.7588 + int i7485; 89.7589 + int i7486; 89.7590 + int i7487; 89.7591 + int i7488; 89.7592 + int i7489; 89.7593 + int i7490; 89.7594 + int i7491; 89.7595 + int i7492; 89.7596 + int i7493; 89.7597 + int i7494; 89.7598 + int i7495; 89.7599 + int i7496; 89.7600 + int i7497; 89.7601 + int i7498; 89.7602 + int i7499; 89.7603 + int i7500; 89.7604 + int i7501; 89.7605 + int i7502; 89.7606 + int i7503; 89.7607 + int i7504; 89.7608 + int i7505; 89.7609 + int i7506; 89.7610 + int i7507; 89.7611 + int i7508; 89.7612 + int i7509; 89.7613 + int i7510; 89.7614 + int i7511; 89.7615 + int i7512; 89.7616 + int i7513; 89.7617 + int i7514; 89.7618 + int i7515; 89.7619 + int i7516; 89.7620 + int i7517; 89.7621 + int i7518; 89.7622 + int i7519; 89.7623 + int i7520; 89.7624 + int i7521; 89.7625 + int i7522; 89.7626 + int i7523; 89.7627 + int i7524; 89.7628 + int i7525; 89.7629 + int i7526; 89.7630 + int i7527; 89.7631 + int i7528; 89.7632 + int i7529; 89.7633 + int i7530; 89.7634 + int i7531; 89.7635 + int i7532; 89.7636 + int i7533; 89.7637 + int i7534; 89.7638 + int i7535; 89.7639 + int i7536; 89.7640 + int i7537; 89.7641 + int i7538; 89.7642 + int i7539; 89.7643 + int i7540; 89.7644 + int i7541; 89.7645 + int i7542; 89.7646 + int i7543; 89.7647 + int i7544; 89.7648 + int i7545; 89.7649 + int i7546; 89.7650 + int i7547; 89.7651 + int i7548; 89.7652 + int i7549; 89.7653 + int i7550; 89.7654 + int i7551; 89.7655 + int i7552; 89.7656 + int i7553; 89.7657 + int i7554; 89.7658 + int i7555; 89.7659 + int i7556; 89.7660 + int i7557; 89.7661 + int i7558; 89.7662 + int i7559; 89.7663 + int i7560; 89.7664 + int i7561; 89.7665 + int i7562; 89.7666 + int i7563; 89.7667 + int i7564; 89.7668 + int i7565; 89.7669 + int i7566; 89.7670 + int i7567; 89.7671 + int i7568; 89.7672 + int i7569; 89.7673 + int i7570; 89.7674 + int i7571; 89.7675 + int i7572; 89.7676 + int i7573; 89.7677 + int i7574; 89.7678 + int i7575; 89.7679 + int i7576; 89.7680 + int i7577; 89.7681 + int i7578; 89.7682 + int i7579; 89.7683 + int i7580; 89.7684 + int i7581; 89.7685 + int i7582; 89.7686 + int i7583; 89.7687 + int i7584; 89.7688 + int i7585; 89.7689 + int i7586; 89.7690 + int i7587; 89.7691 + int i7588; 89.7692 + int i7589; 89.7693 + int i7590; 89.7694 + int i7591; 89.7695 + int i7592; 89.7696 + int i7593; 89.7697 + int i7594; 89.7698 + int i7595; 89.7699 + int i7596; 89.7700 + int i7597; 89.7701 + int i7598; 89.7702 + int i7599; 89.7703 + int i7600; 89.7704 + int i7601; 89.7705 + int i7602; 89.7706 + int i7603; 89.7707 + int i7604; 89.7708 + int i7605; 89.7709 + int i7606; 89.7710 + int i7607; 89.7711 + int i7608; 89.7712 + int i7609; 89.7713 + int i7610; 89.7714 + int i7611; 89.7715 + int i7612; 89.7716 + int i7613; 89.7717 + int i7614; 89.7718 + int i7615; 89.7719 + int i7616; 89.7720 + int i7617; 89.7721 + int i7618; 89.7722 + int i7619; 89.7723 + int i7620; 89.7724 + int i7621; 89.7725 + int i7622; 89.7726 + int i7623; 89.7727 + int i7624; 89.7728 + int i7625; 89.7729 + int i7626; 89.7730 + int i7627; 89.7731 + int i7628; 89.7732 + int i7629; 89.7733 + int i7630; 89.7734 + int i7631; 89.7735 + int i7632; 89.7736 + int i7633; 89.7737 + int i7634; 89.7738 + int i7635; 89.7739 + int i7636; 89.7740 + int i7637; 89.7741 + int i7638; 89.7742 + int i7639; 89.7743 + int i7640; 89.7744 + int i7641; 89.7745 + int i7642; 89.7746 + int i7643; 89.7747 + int i7644; 89.7748 + int i7645; 89.7749 + int i7646; 89.7750 + int i7647; 89.7751 + int i7648; 89.7752 + int i7649; 89.7753 + int i7650; 89.7754 + int i7651; 89.7755 + int i7652; 89.7756 + int i7653; 89.7757 + int i7654; 89.7758 + int i7655; 89.7759 + int i7656; 89.7760 + int i7657; 89.7761 + int i7658; 89.7762 + int i7659; 89.7763 + int i7660; 89.7764 + int i7661; 89.7765 + int i7662; 89.7766 + int i7663; 89.7767 + int i7664; 89.7768 + int i7665; 89.7769 + int i7666; 89.7770 + int i7667; 89.7771 + int i7668; 89.7772 + int i7669; 89.7773 + int i7670; 89.7774 + int i7671; 89.7775 + int i7672; 89.7776 + int i7673; 89.7777 + int i7674; 89.7778 + int i7675; 89.7779 + int i7676; 89.7780 + int i7677; 89.7781 + int i7678; 89.7782 + int i7679; 89.7783 + int i7680; 89.7784 + int i7681; 89.7785 + int i7682; 89.7786 + int i7683; 89.7787 + int i7684; 89.7788 + int i7685; 89.7789 + int i7686; 89.7790 + int i7687; 89.7791 + int i7688; 89.7792 + int i7689; 89.7793 + int i7690; 89.7794 + int i7691; 89.7795 + int i7692; 89.7796 + int i7693; 89.7797 + int i7694; 89.7798 + int i7695; 89.7799 + int i7696; 89.7800 + int i7697; 89.7801 + int i7698; 89.7802 + int i7699; 89.7803 + int i7700; 89.7804 + int i7701; 89.7805 + int i7702; 89.7806 + int i7703; 89.7807 + int i7704; 89.7808 + int i7705; 89.7809 + int i7706; 89.7810 + int i7707; 89.7811 + int i7708; 89.7812 + int i7709; 89.7813 + int i7710; 89.7814 + int i7711; 89.7815 + int i7712; 89.7816 + int i7713; 89.7817 + int i7714; 89.7818 + int i7715; 89.7819 + int i7716; 89.7820 + int i7717; 89.7821 + int i7718; 89.7822 + int i7719; 89.7823 + int i7720; 89.7824 + int i7721; 89.7825 + int i7722; 89.7826 + int i7723; 89.7827 + int i7724; 89.7828 + int i7725; 89.7829 + int i7726; 89.7830 + int i7727; 89.7831 + int i7728; 89.7832 + int i7729; 89.7833 + int i7730; 89.7834 + int i7731; 89.7835 + int i7732; 89.7836 + int i7733; 89.7837 + int i7734; 89.7838 + int i7735; 89.7839 + int i7736; 89.7840 + int i7737; 89.7841 + int i7738; 89.7842 + int i7739; 89.7843 + int i7740; 89.7844 + int i7741; 89.7845 + int i7742; 89.7846 + int i7743; 89.7847 + int i7744; 89.7848 + int i7745; 89.7849 + int i7746; 89.7850 + int i7747; 89.7851 + int i7748; 89.7852 + int i7749; 89.7853 + int i7750; 89.7854 + int i7751; 89.7855 + int i7752; 89.7856 + int i7753; 89.7857 + int i7754; 89.7858 + int i7755; 89.7859 + int i7756; 89.7860 + int i7757; 89.7861 + int i7758; 89.7862 + int i7759; 89.7863 + int i7760; 89.7864 + int i7761; 89.7865 + int i7762; 89.7866 + int i7763; 89.7867 + int i7764; 89.7868 + int i7765; 89.7869 + int i7766; 89.7870 + int i7767; 89.7871 + int i7768; 89.7872 + int i7769; 89.7873 + int i7770; 89.7874 + int i7771; 89.7875 + int i7772; 89.7876 + int i7773; 89.7877 + int i7774; 89.7878 + int i7775; 89.7879 + int i7776; 89.7880 + int i7777; 89.7881 + int i7778; 89.7882 + int i7779; 89.7883 + int i7780; 89.7884 + int i7781; 89.7885 + int i7782; 89.7886 + int i7783; 89.7887 + int i7784; 89.7888 + int i7785; 89.7889 + int i7786; 89.7890 + int i7787; 89.7891 + int i7788; 89.7892 + int i7789; 89.7893 + int i7790; 89.7894 + int i7791; 89.7895 + int i7792; 89.7896 + int i7793; 89.7897 + int i7794; 89.7898 + int i7795; 89.7899 + int i7796; 89.7900 + int i7797; 89.7901 + int i7798; 89.7902 + int i7799; 89.7903 + int i7800; 89.7904 + int i7801; 89.7905 + int i7802; 89.7906 + int i7803; 89.7907 + int i7804; 89.7908 + int i7805; 89.7909 + int i7806; 89.7910 + int i7807; 89.7911 + int i7808; 89.7912 + int i7809; 89.7913 + int i7810; 89.7914 + int i7811; 89.7915 + int i7812; 89.7916 + int i7813; 89.7917 + int i7814; 89.7918 + int i7815; 89.7919 + int i7816; 89.7920 + int i7817; 89.7921 + int i7818; 89.7922 + int i7819; 89.7923 + int i7820; 89.7924 + int i7821; 89.7925 + int i7822; 89.7926 + int i7823; 89.7927 + int i7824; 89.7928 + int i7825; 89.7929 + int i7826; 89.7930 + int i7827; 89.7931 + int i7828; 89.7932 + int i7829; 89.7933 + int i7830; 89.7934 + int i7831; 89.7935 + int i7832; 89.7936 + int i7833; 89.7937 + int i7834; 89.7938 + int i7835; 89.7939 + int i7836; 89.7940 + int i7837; 89.7941 + int i7838; 89.7942 + int i7839; 89.7943 + int i7840; 89.7944 + int i7841; 89.7945 + int i7842; 89.7946 + int i7843; 89.7947 + int i7844; 89.7948 + int i7845; 89.7949 + int i7846; 89.7950 + int i7847; 89.7951 + int i7848; 89.7952 + int i7849; 89.7953 + int i7850; 89.7954 + int i7851; 89.7955 + int i7852; 89.7956 + int i7853; 89.7957 + int i7854; 89.7958 + int i7855; 89.7959 + int i7856; 89.7960 + int i7857; 89.7961 + int i7858; 89.7962 + int i7859; 89.7963 + int i7860; 89.7964 + int i7861; 89.7965 + int i7862; 89.7966 + int i7863; 89.7967 + int i7864; 89.7968 + int i7865; 89.7969 + int i7866; 89.7970 + int i7867; 89.7971 + int i7868; 89.7972 + int i7869; 89.7973 + int i7870; 89.7974 + int i7871; 89.7975 + int i7872; 89.7976 + int i7873; 89.7977 + int i7874; 89.7978 + int i7875; 89.7979 + int i7876; 89.7980 + int i7877; 89.7981 + int i7878; 89.7982 + int i7879; 89.7983 + int i7880; 89.7984 + int i7881; 89.7985 + int i7882; 89.7986 + int i7883; 89.7987 + int i7884; 89.7988 + int i7885; 89.7989 + int i7886; 89.7990 + int i7887; 89.7991 + int i7888; 89.7992 + int i7889; 89.7993 + int i7890; 89.7994 + int i7891; 89.7995 + int i7892; 89.7996 + int i7893; 89.7997 + int i7894; 89.7998 + int i7895; 89.7999 + int i7896; 89.8000 + int i7897; 89.8001 + int i7898; 89.8002 + int i7899; 89.8003 + int i7900; 89.8004 + int i7901; 89.8005 + int i7902; 89.8006 + int i7903; 89.8007 + int i7904; 89.8008 + int i7905; 89.8009 + int i7906; 89.8010 + int i7907; 89.8011 + int i7908; 89.8012 + int i7909; 89.8013 + int i7910; 89.8014 + int i7911; 89.8015 + int i7912; 89.8016 + int i7913; 89.8017 + int i7914; 89.8018 + int i7915; 89.8019 + int i7916; 89.8020 + int i7917; 89.8021 + int i7918; 89.8022 + int i7919; 89.8023 + int i7920; 89.8024 + int i7921; 89.8025 + int i7922; 89.8026 + int i7923; 89.8027 + int i7924; 89.8028 + int i7925; 89.8029 + int i7926; 89.8030 + int i7927; 89.8031 + int i7928; 89.8032 + int i7929; 89.8033 + int i7930; 89.8034 + int i7931; 89.8035 + int i7932; 89.8036 + int i7933; 89.8037 + int i7934; 89.8038 + int i7935; 89.8039 + int i7936; 89.8040 + int i7937; 89.8041 + int i7938; 89.8042 + int i7939; 89.8043 + int i7940; 89.8044 + int i7941; 89.8045 + int i7942; 89.8046 + int i7943; 89.8047 + int i7944; 89.8048 + int i7945; 89.8049 + int i7946; 89.8050 + int i7947; 89.8051 + int i7948; 89.8052 + int i7949; 89.8053 + int i7950; 89.8054 + int i7951; 89.8055 + int i7952; 89.8056 + int i7953; 89.8057 + int i7954; 89.8058 + int i7955; 89.8059 + int i7956; 89.8060 + int i7957; 89.8061 + int i7958; 89.8062 + int i7959; 89.8063 + int i7960; 89.8064 + int i7961; 89.8065 + int i7962; 89.8066 + int i7963; 89.8067 + int i7964; 89.8068 + int i7965; 89.8069 + int i7966; 89.8070 + int i7967; 89.8071 + int i7968; 89.8072 + int i7969; 89.8073 + int i7970; 89.8074 + int i7971; 89.8075 + int i7972; 89.8076 + int i7973; 89.8077 + int i7974; 89.8078 + int i7975; 89.8079 + int i7976; 89.8080 + int i7977; 89.8081 + int i7978; 89.8082 + int i7979; 89.8083 + int i7980; 89.8084 + int i7981; 89.8085 + int i7982; 89.8086 + int i7983; 89.8087 + int i7984; 89.8088 + int i7985; 89.8089 + int i7986; 89.8090 + int i7987; 89.8091 + int i7988; 89.8092 + int i7989; 89.8093 + int i7990; 89.8094 + int i7991; 89.8095 + int i7992; 89.8096 + int i7993; 89.8097 + int i7994; 89.8098 + int i7995; 89.8099 + int i7996; 89.8100 + int i7997; 89.8101 + int i7998; 89.8102 + int i7999; 89.8103 + int i8000; 89.8104 + int i8001; 89.8105 + int i8002; 89.8106 + int i8003; 89.8107 + int i8004; 89.8108 + int i8005; 89.8109 + int i8006; 89.8110 + int i8007; 89.8111 + int i8008; 89.8112 + int i8009; 89.8113 + int i8010; 89.8114 + int i8011; 89.8115 + int i8012; 89.8116 + int i8013; 89.8117 + int i8014; 89.8118 + int i8015; 89.8119 + int i8016; 89.8120 + int i8017; 89.8121 + int i8018; 89.8122 + int i8019; 89.8123 + int i8020; 89.8124 + int i8021; 89.8125 + int i8022; 89.8126 + int i8023; 89.8127 + int i8024; 89.8128 + int i8025; 89.8129 + int i8026; 89.8130 + int i8027; 89.8131 + int i8028; 89.8132 + int i8029; 89.8133 + int i8030; 89.8134 + int i8031; 89.8135 + int i8032; 89.8136 + int i8033; 89.8137 + int i8034; 89.8138 + int i8035; 89.8139 + int i8036; 89.8140 + int i8037; 89.8141 + int i8038; 89.8142 + int i8039; 89.8143 + int i8040; 89.8144 + int i8041; 89.8145 + int i8042; 89.8146 + int i8043; 89.8147 + int i8044; 89.8148 + int i8045; 89.8149 + int i8046; 89.8150 + int i8047; 89.8151 + int i8048; 89.8152 + int i8049; 89.8153 + int i8050; 89.8154 + int i8051; 89.8155 + int i8052; 89.8156 + int i8053; 89.8157 + int i8054; 89.8158 + int i8055; 89.8159 + int i8056; 89.8160 + int i8057; 89.8161 + int i8058; 89.8162 + int i8059; 89.8163 + int i8060; 89.8164 + int i8061; 89.8165 + int i8062; 89.8166 + int i8063; 89.8167 + int i8064; 89.8168 + int i8065; 89.8169 + int i8066; 89.8170 + int i8067; 89.8171 + int i8068; 89.8172 + int i8069; 89.8173 + int i8070; 89.8174 + int i8071; 89.8175 + int i8072; 89.8176 + int i8073; 89.8177 + int i8074; 89.8178 + int i8075; 89.8179 + int i8076; 89.8180 + int i8077; 89.8181 + int i8078; 89.8182 + int i8079; 89.8183 + int i8080; 89.8184 + int i8081; 89.8185 + int i8082; 89.8186 + int i8083; 89.8187 + int i8084; 89.8188 + int i8085; 89.8189 + int i8086; 89.8190 + int i8087; 89.8191 + int i8088; 89.8192 + int i8089; 89.8193 + int i8090; 89.8194 + int i8091; 89.8195 + int i8092; 89.8196 + int i8093; 89.8197 + int i8094; 89.8198 + int i8095; 89.8199 + int i8096; 89.8200 + int i8097; 89.8201 + int i8098; 89.8202 + int i8099; 89.8203 + int i8100; 89.8204 + int i8101; 89.8205 + int i8102; 89.8206 + int i8103; 89.8207 + int i8104; 89.8208 + int i8105; 89.8209 + int i8106; 89.8210 + int i8107; 89.8211 + int i8108; 89.8212 + int i8109; 89.8213 + int i8110; 89.8214 + int i8111; 89.8215 + int i8112; 89.8216 + int i8113; 89.8217 + int i8114; 89.8218 + int i8115; 89.8219 + int i8116; 89.8220 + int i8117; 89.8221 + int i8118; 89.8222 + int i8119; 89.8223 + int i8120; 89.8224 + int i8121; 89.8225 + int i8122; 89.8226 + int i8123; 89.8227 + int i8124; 89.8228 + int i8125; 89.8229 + int i8126; 89.8230 + int i8127; 89.8231 + int i8128; 89.8232 + int i8129; 89.8233 + int i8130; 89.8234 + int i8131; 89.8235 + int i8132; 89.8236 + int i8133; 89.8237 + int i8134; 89.8238 + int i8135; 89.8239 + int i8136; 89.8240 + int i8137; 89.8241 + int i8138; 89.8242 + int i8139; 89.8243 + int i8140; 89.8244 + int i8141; 89.8245 + int i8142; 89.8246 + int i8143; 89.8247 + int i8144; 89.8248 + int i8145; 89.8249 + int i8146; 89.8250 + int i8147; 89.8251 + int i8148; 89.8252 + int i8149; 89.8253 + int i8150; 89.8254 + int i8151; 89.8255 + int i8152; 89.8256 + int i8153; 89.8257 + int i8154; 89.8258 + int i8155; 89.8259 + int i8156; 89.8260 + int i8157; 89.8261 + int i8158; 89.8262 + int i8159; 89.8263 + int i8160; 89.8264 + int i8161; 89.8265 + int i8162; 89.8266 + int i8163; 89.8267 + int i8164; 89.8268 + int i8165; 89.8269 + int i8166; 89.8270 + int i8167; 89.8271 + int i8168; 89.8272 + int i8169; 89.8273 + int i8170; 89.8274 + int i8171; 89.8275 + int i8172; 89.8276 + int i8173; 89.8277 + int i8174; 89.8278 + int i8175; 89.8279 + int i8176; 89.8280 + int i8177; 89.8281 + int i8178; 89.8282 + int i8179; 89.8283 + int i8180; 89.8284 + int i8181; 89.8285 + int i8182; 89.8286 + int i8183; 89.8287 + int i8184; 89.8288 + int i8185; 89.8289 + int i8186; 89.8290 + int i8187; 89.8291 + int i8188; 89.8292 + int i8189; 89.8293 + int i8190; 89.8294 + int i8191; 89.8295 + int i8192; 89.8296 + int i8193; 89.8297 + int i8194; 89.8298 + int i8195; 89.8299 + int i8196; 89.8300 + int i8197; 89.8301 + int i8198; 89.8302 + int i8199; 89.8303 + int i8200; 89.8304 + int i8201; 89.8305 + int i8202; 89.8306 + int i8203; 89.8307 + int i8204; 89.8308 + int i8205; 89.8309 + int i8206; 89.8310 + int i8207; 89.8311 + int i8208; 89.8312 + int i8209; 89.8313 + int i8210; 89.8314 + int i8211; 89.8315 + int i8212; 89.8316 + int i8213; 89.8317 + int i8214; 89.8318 + int i8215; 89.8319 + int i8216; 89.8320 + int i8217; 89.8321 + int i8218; 89.8322 + int i8219; 89.8323 + int i8220; 89.8324 + int i8221; 89.8325 + int i8222; 89.8326 + int i8223; 89.8327 + int i8224; 89.8328 + int i8225; 89.8329 + int i8226; 89.8330 + int i8227; 89.8331 + int i8228; 89.8332 + int i8229; 89.8333 + int i8230; 89.8334 + int i8231; 89.8335 + int i8232; 89.8336 + int i8233; 89.8337 + int i8234; 89.8338 + int i8235; 89.8339 + int i8236; 89.8340 + int i8237; 89.8341 + int i8238; 89.8342 + int i8239; 89.8343 + int i8240; 89.8344 + int i8241; 89.8345 + int i8242; 89.8346 + int i8243; 89.8347 + int i8244; 89.8348 + int i8245; 89.8349 + int i8246; 89.8350 + int i8247; 89.8351 + int i8248; 89.8352 + int i8249; 89.8353 + int i8250; 89.8354 + int i8251; 89.8355 + int i8252; 89.8356 + int i8253; 89.8357 + int i8254; 89.8358 + int i8255; 89.8359 + int i8256; 89.8360 + int i8257; 89.8361 + int i8258; 89.8362 + int i8259; 89.8363 + int i8260; 89.8364 + int i8261; 89.8365 + int i8262; 89.8366 + int i8263; 89.8367 + int i8264; 89.8368 + int i8265; 89.8369 + int i8266; 89.8370 + int i8267; 89.8371 + int i8268; 89.8372 + int i8269; 89.8373 + int i8270; 89.8374 + int i8271; 89.8375 + int i8272; 89.8376 + int i8273; 89.8377 + int i8274; 89.8378 + int i8275; 89.8379 + int i8276; 89.8380 + int i8277; 89.8381 + int i8278; 89.8382 + int i8279; 89.8383 + int i8280; 89.8384 + int i8281; 89.8385 + int i8282; 89.8386 + int i8283; 89.8387 + int i8284; 89.8388 + int i8285; 89.8389 + int i8286; 89.8390 + int i8287; 89.8391 + int i8288; 89.8392 + int i8289; 89.8393 + int i8290; 89.8394 + int i8291; 89.8395 + int i8292; 89.8396 + int i8293; 89.8397 + int i8294; 89.8398 + int i8295; 89.8399 + int i8296; 89.8400 + int i8297; 89.8401 + int i8298; 89.8402 + int i8299; 89.8403 + int i8300; 89.8404 + int i8301; 89.8405 + int i8302; 89.8406 + int i8303; 89.8407 + int i8304; 89.8408 + int i8305; 89.8409 + int i8306; 89.8410 + int i8307; 89.8411 + int i8308; 89.8412 + int i8309; 89.8413 + int i8310; 89.8414 + int i8311; 89.8415 + int i8312; 89.8416 + int i8313; 89.8417 + int i8314; 89.8418 + int i8315; 89.8419 + int i8316; 89.8420 + int i8317; 89.8421 + int i8318; 89.8422 + int i8319; 89.8423 + int i8320; 89.8424 + int i8321; 89.8425 + int i8322; 89.8426 + int i8323; 89.8427 + int i8324; 89.8428 + int i8325; 89.8429 + int i8326; 89.8430 + int i8327; 89.8431 + int i8328; 89.8432 + int i8329; 89.8433 + int i8330; 89.8434 + int i8331; 89.8435 + int i8332; 89.8436 + int i8333; 89.8437 + int i8334; 89.8438 + int i8335; 89.8439 + int i8336; 89.8440 + int i8337; 89.8441 + int i8338; 89.8442 + int i8339; 89.8443 + int i8340; 89.8444 + int i8341; 89.8445 + int i8342; 89.8446 + int i8343; 89.8447 + int i8344; 89.8448 + int i8345; 89.8449 + int i8346; 89.8450 + int i8347; 89.8451 + int i8348; 89.8452 + int i8349; 89.8453 + int i8350; 89.8454 + int i8351; 89.8455 + int i8352; 89.8456 + int i8353; 89.8457 + int i8354; 89.8458 + int i8355; 89.8459 + int i8356; 89.8460 + int i8357; 89.8461 + int i8358; 89.8462 + int i8359; 89.8463 + int i8360; 89.8464 + int i8361; 89.8465 + int i8362; 89.8466 + int i8363; 89.8467 + int i8364; 89.8468 + int i8365; 89.8469 + int i8366; 89.8470 + int i8367; 89.8471 + int i8368; 89.8472 + int i8369; 89.8473 + int i8370; 89.8474 + int i8371; 89.8475 + int i8372; 89.8476 + int i8373; 89.8477 + int i8374; 89.8478 + int i8375; 89.8479 + int i8376; 89.8480 + int i8377; 89.8481 + int i8378; 89.8482 + int i8379; 89.8483 + int i8380; 89.8484 + int i8381; 89.8485 + int i8382; 89.8486 + int i8383; 89.8487 + int i8384; 89.8488 + int i8385; 89.8489 + int i8386; 89.8490 + int i8387; 89.8491 + int i8388; 89.8492 + int i8389; 89.8493 + int i8390; 89.8494 + int i8391; 89.8495 + int i8392; 89.8496 + int i8393; 89.8497 + int i8394; 89.8498 + int i8395; 89.8499 + int i8396; 89.8500 + int i8397; 89.8501 + int i8398; 89.8502 + int i8399; 89.8503 + int i8400; 89.8504 + int i8401; 89.8505 + int i8402; 89.8506 + int i8403; 89.8507 + int i8404; 89.8508 + int i8405; 89.8509 + int i8406; 89.8510 + int i8407; 89.8511 + int i8408; 89.8512 + int i8409; 89.8513 + int i8410; 89.8514 + int i8411; 89.8515 + int i8412; 89.8516 + int i8413; 89.8517 + int i8414; 89.8518 + int i8415; 89.8519 + int i8416; 89.8520 + int i8417; 89.8521 + int i8418; 89.8522 + int i8419; 89.8523 + int i8420; 89.8524 + int i8421; 89.8525 + int i8422; 89.8526 + int i8423; 89.8527 + int i8424; 89.8528 + int i8425; 89.8529 + int i8426; 89.8530 + int i8427; 89.8531 + int i8428; 89.8532 + int i8429; 89.8533 + int i8430; 89.8534 + int i8431; 89.8535 + int i8432; 89.8536 + int i8433; 89.8537 + int i8434; 89.8538 + int i8435; 89.8539 + int i8436; 89.8540 + int i8437; 89.8541 + int i8438; 89.8542 + int i8439; 89.8543 + int i8440; 89.8544 + int i8441; 89.8545 + int i8442; 89.8546 + int i8443; 89.8547 + int i8444; 89.8548 + int i8445; 89.8549 + int i8446; 89.8550 + int i8447; 89.8551 + int i8448; 89.8552 + int i8449; 89.8553 + int i8450; 89.8554 + int i8451; 89.8555 + int i8452; 89.8556 + int i8453; 89.8557 + int i8454; 89.8558 + int i8455; 89.8559 + int i8456; 89.8560 + int i8457; 89.8561 + int i8458; 89.8562 + int i8459; 89.8563 + int i8460; 89.8564 + int i8461; 89.8565 + int i8462; 89.8566 + int i8463; 89.8567 + int i8464; 89.8568 + int i8465; 89.8569 + int i8466; 89.8570 + int i8467; 89.8571 + int i8468; 89.8572 + int i8469; 89.8573 + int i8470; 89.8574 + int i8471; 89.8575 + int i8472; 89.8576 + int i8473; 89.8577 + int i8474; 89.8578 + int i8475; 89.8579 + int i8476; 89.8580 + int i8477; 89.8581 + int i8478; 89.8582 + int i8479; 89.8583 + int i8480; 89.8584 + int i8481; 89.8585 + int i8482; 89.8586 + int i8483; 89.8587 + int i8484; 89.8588 + int i8485; 89.8589 + int i8486; 89.8590 + int i8487; 89.8591 + int i8488; 89.8592 + int i8489; 89.8593 + int i8490; 89.8594 + int i8491; 89.8595 + int i8492; 89.8596 + int i8493; 89.8597 + int i8494; 89.8598 + int i8495; 89.8599 + int i8496; 89.8600 + int i8497; 89.8601 + int i8498; 89.8602 + int i8499; 89.8603 + int i8500; 89.8604 + int i8501; 89.8605 + int i8502; 89.8606 + int i8503; 89.8607 + int i8504; 89.8608 + int i8505; 89.8609 + int i8506; 89.8610 + int i8507; 89.8611 + int i8508; 89.8612 + int i8509; 89.8613 + int i8510; 89.8614 + int i8511; 89.8615 + int i8512; 89.8616 + int i8513; 89.8617 + int i8514; 89.8618 + int i8515; 89.8619 + int i8516; 89.8620 + int i8517; 89.8621 + int i8518; 89.8622 + int i8519; 89.8623 + int i8520; 89.8624 + int i8521; 89.8625 + int i8522; 89.8626 + int i8523; 89.8627 + int i8524; 89.8628 + int i8525; 89.8629 + int i8526; 89.8630 + int i8527; 89.8631 + int i8528; 89.8632 + int i8529; 89.8633 + int i8530; 89.8634 + int i8531; 89.8635 + int i8532; 89.8636 + int i8533; 89.8637 + int i8534; 89.8638 + int i8535; 89.8639 + int i8536; 89.8640 + int i8537; 89.8641 + int i8538; 89.8642 + int i8539; 89.8643 + int i8540; 89.8644 + int i8541; 89.8645 + int i8542; 89.8646 + int i8543; 89.8647 + int i8544; 89.8648 + int i8545; 89.8649 + int i8546; 89.8650 + int i8547; 89.8651 + int i8548; 89.8652 + int i8549; 89.8653 + int i8550; 89.8654 + int i8551; 89.8655 + int i8552; 89.8656 + int i8553; 89.8657 + int i8554; 89.8658 + int i8555; 89.8659 + int i8556; 89.8660 + int i8557; 89.8661 + int i8558; 89.8662 + int i8559; 89.8663 + int i8560; 89.8664 + int i8561; 89.8665 + int i8562; 89.8666 + int i8563; 89.8667 + int i8564; 89.8668 + int i8565; 89.8669 + int i8566; 89.8670 + int i8567; 89.8671 + int i8568; 89.8672 + int i8569; 89.8673 + int i8570; 89.8674 + int i8571; 89.8675 + int i8572; 89.8676 + int i8573; 89.8677 + int i8574; 89.8678 + int i8575; 89.8679 + int i8576; 89.8680 + int i8577; 89.8681 + int i8578; 89.8682 + int i8579; 89.8683 + int i8580; 89.8684 + int i8581; 89.8685 + int i8582; 89.8686 + int i8583; 89.8687 + int i8584; 89.8688 + int i8585; 89.8689 + int i8586; 89.8690 + int i8587; 89.8691 + int i8588; 89.8692 + int i8589; 89.8693 + int i8590; 89.8694 + int i8591; 89.8695 + int i8592; 89.8696 + int i8593; 89.8697 + int i8594; 89.8698 + int i8595; 89.8699 + int i8596; 89.8700 + int i8597; 89.8701 + int i8598; 89.8702 + int i8599; 89.8703 + int i8600; 89.8704 + int i8601; 89.8705 + int i8602; 89.8706 + int i8603; 89.8707 + int i8604; 89.8708 + int i8605; 89.8709 + int i8606; 89.8710 + int i8607; 89.8711 + int i8608; 89.8712 + int i8609; 89.8713 + int i8610; 89.8714 + int i8611; 89.8715 + int i8612; 89.8716 + int i8613; 89.8717 + int i8614; 89.8718 + int i8615; 89.8719 + int i8616; 89.8720 + int i8617; 89.8721 + int i8618; 89.8722 + int i8619; 89.8723 + int i8620; 89.8724 + int i8621; 89.8725 + int i8622; 89.8726 + int i8623; 89.8727 + int i8624; 89.8728 + int i8625; 89.8729 + int i8626; 89.8730 + int i8627; 89.8731 + int i8628; 89.8732 + int i8629; 89.8733 + int i8630; 89.8734 + int i8631; 89.8735 + int i8632; 89.8736 + int i8633; 89.8737 + int i8634; 89.8738 + int i8635; 89.8739 + int i8636; 89.8740 + int i8637; 89.8741 + int i8638; 89.8742 + int i8639; 89.8743 + int i8640; 89.8744 + int i8641; 89.8745 + int i8642; 89.8746 + int i8643; 89.8747 + int i8644; 89.8748 + int i8645; 89.8749 + int i8646; 89.8750 + int i8647; 89.8751 + int i8648; 89.8752 + int i8649; 89.8753 + int i8650; 89.8754 + int i8651; 89.8755 + int i8652; 89.8756 + int i8653; 89.8757 + int i8654; 89.8758 + int i8655; 89.8759 + int i8656; 89.8760 + int i8657; 89.8761 + int i8658; 89.8762 + int i8659; 89.8763 + int i8660; 89.8764 + int i8661; 89.8765 + int i8662; 89.8766 + int i8663; 89.8767 + int i8664; 89.8768 + int i8665; 89.8769 + int i8666; 89.8770 + int i8667; 89.8771 + int i8668; 89.8772 + int i8669; 89.8773 + int i8670; 89.8774 + int i8671; 89.8775 + int i8672; 89.8776 + int i8673; 89.8777 + int i8674; 89.8778 + int i8675; 89.8779 + int i8676; 89.8780 + int i8677; 89.8781 + int i8678; 89.8782 + int i8679; 89.8783 + int i8680; 89.8784 + int i8681; 89.8785 + int i8682; 89.8786 + int i8683; 89.8787 + int i8684; 89.8788 + int i8685; 89.8789 + int i8686; 89.8790 + int i8687; 89.8791 + int i8688; 89.8792 + int i8689; 89.8793 + int i8690; 89.8794 + int i8691; 89.8795 + int i8692; 89.8796 + int i8693; 89.8797 + int i8694; 89.8798 + int i8695; 89.8799 + int i8696; 89.8800 + int i8697; 89.8801 + int i8698; 89.8802 + int i8699; 89.8803 + int i8700; 89.8804 + int i8701; 89.8805 + int i8702; 89.8806 + int i8703; 89.8807 + int i8704; 89.8808 + int i8705; 89.8809 + int i8706; 89.8810 + int i8707; 89.8811 + int i8708; 89.8812 + int i8709; 89.8813 + int i8710; 89.8814 + int i8711; 89.8815 + int i8712; 89.8816 + int i8713; 89.8817 + int i8714; 89.8818 + int i8715; 89.8819 + int i8716; 89.8820 + int i8717; 89.8821 + int i8718; 89.8822 + int i8719; 89.8823 + int i8720; 89.8824 + int i8721; 89.8825 + int i8722; 89.8826 + int i8723; 89.8827 + int i8724; 89.8828 + int i8725; 89.8829 + int i8726; 89.8830 + int i8727; 89.8831 + int i8728; 89.8832 + int i8729; 89.8833 + int i8730; 89.8834 + int i8731; 89.8835 + int i8732; 89.8836 + int i8733; 89.8837 + int i8734; 89.8838 + int i8735; 89.8839 + int i8736; 89.8840 + int i8737; 89.8841 + int i8738; 89.8842 + int i8739; 89.8843 + int i8740; 89.8844 + int i8741; 89.8845 + int i8742; 89.8846 + int i8743; 89.8847 + int i8744; 89.8848 + int i8745; 89.8849 + int i8746; 89.8850 + int i8747; 89.8851 + int i8748; 89.8852 + int i8749; 89.8853 + int i8750; 89.8854 + int i8751; 89.8855 + int i8752; 89.8856 + int i8753; 89.8857 + int i8754; 89.8858 + int i8755; 89.8859 + int i8756; 89.8860 + int i8757; 89.8861 + int i8758; 89.8862 + int i8759; 89.8863 + int i8760; 89.8864 + int i8761; 89.8865 + int i8762; 89.8866 + int i8763; 89.8867 + int i8764; 89.8868 + int i8765; 89.8869 + int i8766; 89.8870 + int i8767; 89.8871 + int i8768; 89.8872 + int i8769; 89.8873 + int i8770; 89.8874 + int i8771; 89.8875 + int i8772; 89.8876 + int i8773; 89.8877 + int i8774; 89.8878 + int i8775; 89.8879 + int i8776; 89.8880 + int i8777; 89.8881 + int i8778; 89.8882 + int i8779; 89.8883 + int i8780; 89.8884 + int i8781; 89.8885 + int i8782; 89.8886 + int i8783; 89.8887 + int i8784; 89.8888 + int i8785; 89.8889 + int i8786; 89.8890 + int i8787; 89.8891 + int i8788; 89.8892 + int i8789; 89.8893 + int i8790; 89.8894 + int i8791; 89.8895 + int i8792; 89.8896 + int i8793; 89.8897 + int i8794; 89.8898 + int i8795; 89.8899 + int i8796; 89.8900 + int i8797; 89.8901 + int i8798; 89.8902 + int i8799; 89.8903 + int i8800; 89.8904 + int i8801; 89.8905 + int i8802; 89.8906 + int i8803; 89.8907 + int i8804; 89.8908 + int i8805; 89.8909 + int i8806; 89.8910 + int i8807; 89.8911 + int i8808; 89.8912 + int i8809; 89.8913 + int i8810; 89.8914 + int i8811; 89.8915 + int i8812; 89.8916 + int i8813; 89.8917 + int i8814; 89.8918 + int i8815; 89.8919 + int i8816; 89.8920 + int i8817; 89.8921 + int i8818; 89.8922 + int i8819; 89.8923 + int i8820; 89.8924 + int i8821; 89.8925 + int i8822; 89.8926 + int i8823; 89.8927 + int i8824; 89.8928 + int i8825; 89.8929 + int i8826; 89.8930 + int i8827; 89.8931 + int i8828; 89.8932 + int i8829; 89.8933 + int i8830; 89.8934 + int i8831; 89.8935 + int i8832; 89.8936 + int i8833; 89.8937 + int i8834; 89.8938 + int i8835; 89.8939 + int i8836; 89.8940 + int i8837; 89.8941 + int i8838; 89.8942 + int i8839; 89.8943 + int i8840; 89.8944 + int i8841; 89.8945 + int i8842; 89.8946 + int i8843; 89.8947 + int i8844; 89.8948 + int i8845; 89.8949 + int i8846; 89.8950 + int i8847; 89.8951 + int i8848; 89.8952 + int i8849; 89.8953 + int i8850; 89.8954 + int i8851; 89.8955 + int i8852; 89.8956 + int i8853; 89.8957 + int i8854; 89.8958 + int i8855; 89.8959 + int i8856; 89.8960 + int i8857; 89.8961 + int i8858; 89.8962 + int i8859; 89.8963 + int i8860; 89.8964 + int i8861; 89.8965 + int i8862; 89.8966 + int i8863; 89.8967 + int i8864; 89.8968 + int i8865; 89.8969 + int i8866; 89.8970 + int i8867; 89.8971 + int i8868; 89.8972 + int i8869; 89.8973 + int i8870; 89.8974 + int i8871; 89.8975 + int i8872; 89.8976 + int i8873; 89.8977 + int i8874; 89.8978 + int i8875; 89.8979 + int i8876; 89.8980 + int i8877; 89.8981 + int i8878; 89.8982 + int i8879; 89.8983 + int i8880; 89.8984 + int i8881; 89.8985 + int i8882; 89.8986 + int i8883; 89.8987 + int i8884; 89.8988 + int i8885; 89.8989 + int i8886; 89.8990 + int i8887; 89.8991 + int i8888; 89.8992 + int i8889; 89.8993 + int i8890; 89.8994 + int i8891; 89.8995 + int i8892; 89.8996 + int i8893; 89.8997 + int i8894; 89.8998 + int i8895; 89.8999 + int i8896; 89.9000 + int i8897; 89.9001 + int i8898; 89.9002 + int i8899; 89.9003 + int i8900; 89.9004 + int i8901; 89.9005 + int i8902; 89.9006 + int i8903; 89.9007 + int i8904; 89.9008 + int i8905; 89.9009 + int i8906; 89.9010 + int i8907; 89.9011 + int i8908; 89.9012 + int i8909; 89.9013 + int i8910; 89.9014 + int i8911; 89.9015 + int i8912; 89.9016 + int i8913; 89.9017 + int i8914; 89.9018 + int i8915; 89.9019 + int i8916; 89.9020 + int i8917; 89.9021 + int i8918; 89.9022 + int i8919; 89.9023 + int i8920; 89.9024 + int i8921; 89.9025 + int i8922; 89.9026 + int i8923; 89.9027 + int i8924; 89.9028 + int i8925; 89.9029 + int i8926; 89.9030 + int i8927; 89.9031 + int i8928; 89.9032 + int i8929; 89.9033 + int i8930; 89.9034 + int i8931; 89.9035 + int i8932; 89.9036 + int i8933; 89.9037 + int i8934; 89.9038 + int i8935; 89.9039 + int i8936; 89.9040 + int i8937; 89.9041 + int i8938; 89.9042 + int i8939; 89.9043 + int i8940; 89.9044 + int i8941; 89.9045 + int i8942; 89.9046 + int i8943; 89.9047 + int i8944; 89.9048 + int i8945; 89.9049 + int i8946; 89.9050 + int i8947; 89.9051 + int i8948; 89.9052 + int i8949; 89.9053 + int i8950; 89.9054 + int i8951; 89.9055 + int i8952; 89.9056 + int i8953; 89.9057 + int i8954; 89.9058 + int i8955; 89.9059 + int i8956; 89.9060 + int i8957; 89.9061 + int i8958; 89.9062 + int i8959; 89.9063 + int i8960; 89.9064 + int i8961; 89.9065 + int i8962; 89.9066 + int i8963; 89.9067 + int i8964; 89.9068 + int i8965; 89.9069 + int i8966; 89.9070 + int i8967; 89.9071 + int i8968; 89.9072 + int i8969; 89.9073 + int i8970; 89.9074 + int i8971; 89.9075 + int i8972; 89.9076 + int i8973; 89.9077 + int i8974; 89.9078 + int i8975; 89.9079 + int i8976; 89.9080 + int i8977; 89.9081 + int i8978; 89.9082 + int i8979; 89.9083 + int i8980; 89.9084 + int i8981; 89.9085 + int i8982; 89.9086 + int i8983; 89.9087 + int i8984; 89.9088 + int i8985; 89.9089 + int i8986; 89.9090 + int i8987; 89.9091 + int i8988; 89.9092 + int i8989; 89.9093 + int i8990; 89.9094 + int i8991; 89.9095 + int i8992; 89.9096 + int i8993; 89.9097 + int i8994; 89.9098 + int i8995; 89.9099 + int i8996; 89.9100 + int i8997; 89.9101 + int i8998; 89.9102 + int i8999; 89.9103 + int i9000; 89.9104 + int i9001; 89.9105 + int i9002; 89.9106 + int i9003; 89.9107 + int i9004; 89.9108 + int i9005; 89.9109 + int i9006; 89.9110 + int i9007; 89.9111 + int i9008; 89.9112 + int i9009; 89.9113 + int i9010; 89.9114 + int i9011; 89.9115 + int i9012; 89.9116 + int i9013; 89.9117 + int i9014; 89.9118 + int i9015; 89.9119 + int i9016; 89.9120 + int i9017; 89.9121 + int i9018; 89.9122 + int i9019; 89.9123 + int i9020; 89.9124 + int i9021; 89.9125 + int i9022; 89.9126 + int i9023; 89.9127 + int i9024; 89.9128 + int i9025; 89.9129 + int i9026; 89.9130 + int i9027; 89.9131 + int i9028; 89.9132 + int i9029; 89.9133 + int i9030; 89.9134 + int i9031; 89.9135 + int i9032; 89.9136 + int i9033; 89.9137 + int i9034; 89.9138 + int i9035; 89.9139 + int i9036; 89.9140 + int i9037; 89.9141 + int i9038; 89.9142 + int i9039; 89.9143 + int i9040; 89.9144 + int i9041; 89.9145 + int i9042; 89.9146 + int i9043; 89.9147 + int i9044; 89.9148 + int i9045; 89.9149 + int i9046; 89.9150 + int i9047; 89.9151 + int i9048; 89.9152 + int i9049; 89.9153 + int i9050; 89.9154 + int i9051; 89.9155 + int i9052; 89.9156 + int i9053; 89.9157 + int i9054; 89.9158 + int i9055; 89.9159 + int i9056; 89.9160 + int i9057; 89.9161 + int i9058; 89.9162 + int i9059; 89.9163 + int i9060; 89.9164 + int i9061; 89.9165 + int i9062; 89.9166 + int i9063; 89.9167 + int i9064; 89.9168 + int i9065; 89.9169 + int i9066; 89.9170 + int i9067; 89.9171 + int i9068; 89.9172 + int i9069; 89.9173 + int i9070; 89.9174 + int i9071; 89.9175 + int i9072; 89.9176 + int i9073; 89.9177 + int i9074; 89.9178 + int i9075; 89.9179 + int i9076; 89.9180 + int i9077; 89.9181 + int i9078; 89.9182 + int i9079; 89.9183 + int i9080; 89.9184 + int i9081; 89.9185 + int i9082; 89.9186 + int i9083; 89.9187 + int i9084; 89.9188 + int i9085; 89.9189 + int i9086; 89.9190 + int i9087; 89.9191 + int i9088; 89.9192 + int i9089; 89.9193 + int i9090; 89.9194 + int i9091; 89.9195 + int i9092; 89.9196 + int i9093; 89.9197 + int i9094; 89.9198 + int i9095; 89.9199 + int i9096; 89.9200 + int i9097; 89.9201 + int i9098; 89.9202 + int i9099; 89.9203 + int i9100; 89.9204 + int i9101; 89.9205 + int i9102; 89.9206 + int i9103; 89.9207 + int i9104; 89.9208 + int i9105; 89.9209 + int i9106; 89.9210 + int i9107; 89.9211 + int i9108; 89.9212 + int i9109; 89.9213 + int i9110; 89.9214 + int i9111; 89.9215 + int i9112; 89.9216 + int i9113; 89.9217 + int i9114; 89.9218 + int i9115; 89.9219 + int i9116; 89.9220 + int i9117; 89.9221 + int i9118; 89.9222 + int i9119; 89.9223 + int i9120; 89.9224 + int i9121; 89.9225 + int i9122; 89.9226 + int i9123; 89.9227 + int i9124; 89.9228 + int i9125; 89.9229 + int i9126; 89.9230 + int i9127; 89.9231 + int i9128; 89.9232 + int i9129; 89.9233 + int i9130; 89.9234 + int i9131; 89.9235 + int i9132; 89.9236 + int i9133; 89.9237 + int i9134; 89.9238 + int i9135; 89.9239 + int i9136; 89.9240 + int i9137; 89.9241 + int i9138; 89.9242 + int i9139; 89.9243 + int i9140; 89.9244 + int i9141; 89.9245 + int i9142; 89.9246 + int i9143; 89.9247 + int i9144; 89.9248 + int i9145; 89.9249 + int i9146; 89.9250 + int i9147; 89.9251 + int i9148; 89.9252 + int i9149; 89.9253 + int i9150; 89.9254 + int i9151; 89.9255 + int i9152; 89.9256 + int i9153; 89.9257 + int i9154; 89.9258 + int i9155; 89.9259 + int i9156; 89.9260 + int i9157; 89.9261 + int i9158; 89.9262 + int i9159; 89.9263 + int i9160; 89.9264 + int i9161; 89.9265 + int i9162; 89.9266 + int i9163; 89.9267 + int i9164; 89.9268 + int i9165; 89.9269 + int i9166; 89.9270 + int i9167; 89.9271 + int i9168; 89.9272 + int i9169; 89.9273 + int i9170; 89.9274 + int i9171; 89.9275 + int i9172; 89.9276 + int i9173; 89.9277 + int i9174; 89.9278 + int i9175; 89.9279 + int i9176; 89.9280 + int i9177; 89.9281 + int i9178; 89.9282 + int i9179; 89.9283 + int i9180; 89.9284 + int i9181; 89.9285 + int i9182; 89.9286 + int i9183; 89.9287 + int i9184; 89.9288 + int i9185; 89.9289 + int i9186; 89.9290 + int i9187; 89.9291 + int i9188; 89.9292 + int i9189; 89.9293 + int i9190; 89.9294 + int i9191; 89.9295 + int i9192; 89.9296 + int i9193; 89.9297 + int i9194; 89.9298 + int i9195; 89.9299 + int i9196; 89.9300 + int i9197; 89.9301 + int i9198; 89.9302 + int i9199; 89.9303 + int i9200; 89.9304 + int i9201; 89.9305 + int i9202; 89.9306 + int i9203; 89.9307 + int i9204; 89.9308 + int i9205; 89.9309 + int i9206; 89.9310 + int i9207; 89.9311 + int i9208; 89.9312 + int i9209; 89.9313 + int i9210; 89.9314 + int i9211; 89.9315 + int i9212; 89.9316 + int i9213; 89.9317 + int i9214; 89.9318 + int i9215; 89.9319 + int i9216; 89.9320 + int i9217; 89.9321 + int i9218; 89.9322 + int i9219; 89.9323 + int i9220; 89.9324 + int i9221; 89.9325 + int i9222; 89.9326 + int i9223; 89.9327 + int i9224; 89.9328 + int i9225; 89.9329 + int i9226; 89.9330 + int i9227; 89.9331 + int i9228; 89.9332 + int i9229; 89.9333 + int i9230; 89.9334 + int i9231; 89.9335 + int i9232; 89.9336 + int i9233; 89.9337 + int i9234; 89.9338 + int i9235; 89.9339 + int i9236; 89.9340 + int i9237; 89.9341 + int i9238; 89.9342 + int i9239; 89.9343 + int i9240; 89.9344 + int i9241; 89.9345 + int i9242; 89.9346 + int i9243; 89.9347 + int i9244; 89.9348 + int i9245; 89.9349 + int i9246; 89.9350 + int i9247; 89.9351 + int i9248; 89.9352 + int i9249; 89.9353 + int i9250; 89.9354 + int i9251; 89.9355 + int i9252; 89.9356 + int i9253; 89.9357 + int i9254; 89.9358 + int i9255; 89.9359 + int i9256; 89.9360 + int i9257; 89.9361 + int i9258; 89.9362 + int i9259; 89.9363 + int i9260; 89.9364 + int i9261; 89.9365 + int i9262; 89.9366 + int i9263; 89.9367 + int i9264; 89.9368 + int i9265; 89.9369 + int i9266; 89.9370 + int i9267; 89.9371 + int i9268; 89.9372 + int i9269; 89.9373 + int i9270; 89.9374 + int i9271; 89.9375 + int i9272; 89.9376 + int i9273; 89.9377 + int i9274; 89.9378 + int i9275; 89.9379 + int i9276; 89.9380 + int i9277; 89.9381 + int i9278; 89.9382 + int i9279; 89.9383 + int i9280; 89.9384 + int i9281; 89.9385 + int i9282; 89.9386 + int i9283; 89.9387 + int i9284; 89.9388 + int i9285; 89.9389 + int i9286; 89.9390 + int i9287; 89.9391 + int i9288; 89.9392 + int i9289; 89.9393 + int i9290; 89.9394 + int i9291; 89.9395 + int i9292; 89.9396 + int i9293; 89.9397 + int i9294; 89.9398 + int i9295; 89.9399 + int i9296; 89.9400 + int i9297; 89.9401 + int i9298; 89.9402 + int i9299; 89.9403 + int i9300; 89.9404 + int i9301; 89.9405 + int i9302; 89.9406 + int i9303; 89.9407 + int i9304; 89.9408 + int i9305; 89.9409 + int i9306; 89.9410 + int i9307; 89.9411 + int i9308; 89.9412 + int i9309; 89.9413 + int i9310; 89.9414 + int i9311; 89.9415 + int i9312; 89.9416 + int i9313; 89.9417 + int i9314; 89.9418 + int i9315; 89.9419 + int i9316; 89.9420 + int i9317; 89.9421 + int i9318; 89.9422 + int i9319; 89.9423 + int i9320; 89.9424 + int i9321; 89.9425 + int i9322; 89.9426 + int i9323; 89.9427 + int i9324; 89.9428 + int i9325; 89.9429 + int i9326; 89.9430 + int i9327; 89.9431 + int i9328; 89.9432 + int i9329; 89.9433 + int i9330; 89.9434 + int i9331; 89.9435 + int i9332; 89.9436 + int i9333; 89.9437 + int i9334; 89.9438 + int i9335; 89.9439 + int i9336; 89.9440 + int i9337; 89.9441 + int i9338; 89.9442 + int i9339; 89.9443 + int i9340; 89.9444 + int i9341; 89.9445 + int i9342; 89.9446 + int i9343; 89.9447 + int i9344; 89.9448 + int i9345; 89.9449 + int i9346; 89.9450 + int i9347; 89.9451 + int i9348; 89.9452 + int i9349; 89.9453 + int i9350; 89.9454 + int i9351; 89.9455 + int i9352; 89.9456 + int i9353; 89.9457 + int i9354; 89.9458 + int i9355; 89.9459 + int i9356; 89.9460 + int i9357; 89.9461 + int i9358; 89.9462 + int i9359; 89.9463 + int i9360; 89.9464 + int i9361; 89.9465 + int i9362; 89.9466 + int i9363; 89.9467 + int i9364; 89.9468 + int i9365; 89.9469 + int i9366; 89.9470 + int i9367; 89.9471 + int i9368; 89.9472 + int i9369; 89.9473 + int i9370; 89.9474 + int i9371; 89.9475 + int i9372; 89.9476 + int i9373; 89.9477 + int i9374; 89.9478 + int i9375; 89.9479 + int i9376; 89.9480 + int i9377; 89.9481 + int i9378; 89.9482 + int i9379; 89.9483 + int i9380; 89.9484 + int i9381; 89.9485 + int i9382; 89.9486 + int i9383; 89.9487 + int i9384; 89.9488 + int i9385; 89.9489 + int i9386; 89.9490 + int i9387; 89.9491 + int i9388; 89.9492 + int i9389; 89.9493 + int i9390; 89.9494 + int i9391; 89.9495 + int i9392; 89.9496 + int i9393; 89.9497 + int i9394; 89.9498 + int i9395; 89.9499 + int i9396; 89.9500 + int i9397; 89.9501 + int i9398; 89.9502 + int i9399; 89.9503 + int i9400; 89.9504 + int i9401; 89.9505 + int i9402; 89.9506 + int i9403; 89.9507 + int i9404; 89.9508 + int i9405; 89.9509 + int i9406; 89.9510 + int i9407; 89.9511 + int i9408; 89.9512 + int i9409; 89.9513 + int i9410; 89.9514 + int i9411; 89.9515 + int i9412; 89.9516 + int i9413; 89.9517 + int i9414; 89.9518 + int i9415; 89.9519 + int i9416; 89.9520 + int i9417; 89.9521 + int i9418; 89.9522 + int i9419; 89.9523 + int i9420; 89.9524 + int i9421; 89.9525 + int i9422; 89.9526 + int i9423; 89.9527 + int i9424; 89.9528 + int i9425; 89.9529 + int i9426; 89.9530 + int i9427; 89.9531 + int i9428; 89.9532 + int i9429; 89.9533 + int i9430; 89.9534 + int i9431; 89.9535 + int i9432; 89.9536 + int i9433; 89.9537 + int i9434; 89.9538 + int i9435; 89.9539 + int i9436; 89.9540 + int i9437; 89.9541 + int i9438; 89.9542 + int i9439; 89.9543 + int i9440; 89.9544 + int i9441; 89.9545 + int i9442; 89.9546 + int i9443; 89.9547 + int i9444; 89.9548 + int i9445; 89.9549 + int i9446; 89.9550 + int i9447; 89.9551 + int i9448; 89.9552 + int i9449; 89.9553 + int i9450; 89.9554 + int i9451; 89.9555 + int i9452; 89.9556 + int i9453; 89.9557 + int i9454; 89.9558 + int i9455; 89.9559 + int i9456; 89.9560 + int i9457; 89.9561 + int i9458; 89.9562 + int i9459; 89.9563 + int i9460; 89.9564 + int i9461; 89.9565 + int i9462; 89.9566 + int i9463; 89.9567 + int i9464; 89.9568 + int i9465; 89.9569 + int i9466; 89.9570 + int i9467; 89.9571 + int i9468; 89.9572 + int i9469; 89.9573 + int i9470; 89.9574 + int i9471; 89.9575 + int i9472; 89.9576 + int i9473; 89.9577 + int i9474; 89.9578 + int i9475; 89.9579 + int i9476; 89.9580 + int i9477; 89.9581 + int i9478; 89.9582 + int i9479; 89.9583 + int i9480; 89.9584 + int i9481; 89.9585 + int i9482; 89.9586 + int i9483; 89.9587 + int i9484; 89.9588 + int i9485; 89.9589 + int i9486; 89.9590 + int i9487; 89.9591 + int i9488; 89.9592 + int i9489; 89.9593 + int i9490; 89.9594 + int i9491; 89.9595 + int i9492; 89.9596 + int i9493; 89.9597 + int i9494; 89.9598 + int i9495; 89.9599 + int i9496; 89.9600 + int i9497; 89.9601 + int i9498; 89.9602 + int i9499; 89.9603 + int i9500; 89.9604 + int i9501; 89.9605 + int i9502; 89.9606 + int i9503; 89.9607 + int i9504; 89.9608 + int i9505; 89.9609 + int i9506; 89.9610 + int i9507; 89.9611 + int i9508; 89.9612 + int i9509; 89.9613 + int i9510; 89.9614 + int i9511; 89.9615 + int i9512; 89.9616 + int i9513; 89.9617 + int i9514; 89.9618 + int i9515; 89.9619 + int i9516; 89.9620 + int i9517; 89.9621 + int i9518; 89.9622 + int i9519; 89.9623 + int i9520; 89.9624 + int i9521; 89.9625 + int i9522; 89.9626 + int i9523; 89.9627 + int i9524; 89.9628 + int i9525; 89.9629 + int i9526; 89.9630 + int i9527; 89.9631 + int i9528; 89.9632 + int i9529; 89.9633 + int i9530; 89.9634 + int i9531; 89.9635 + int i9532; 89.9636 + int i9533; 89.9637 + int i9534; 89.9638 + int i9535; 89.9639 + int i9536; 89.9640 + int i9537; 89.9641 + int i9538; 89.9642 + int i9539; 89.9643 + int i9540; 89.9644 + int i9541; 89.9645 + int i9542; 89.9646 + int i9543; 89.9647 + int i9544; 89.9648 + int i9545; 89.9649 + int i9546; 89.9650 + int i9547; 89.9651 + int i9548; 89.9652 + int i9549; 89.9653 + int i9550; 89.9654 + int i9551; 89.9655 + int i9552; 89.9656 + int i9553; 89.9657 + int i9554; 89.9658 + int i9555; 89.9659 + int i9556; 89.9660 + int i9557; 89.9661 + int i9558; 89.9662 + int i9559; 89.9663 + int i9560; 89.9664 + int i9561; 89.9665 + int i9562; 89.9666 + int i9563; 89.9667 + int i9564; 89.9668 + int i9565; 89.9669 + int i9566; 89.9670 + int i9567; 89.9671 + int i9568; 89.9672 + int i9569; 89.9673 + int i9570; 89.9674 + int i9571; 89.9675 + int i9572; 89.9676 + int i9573; 89.9677 + int i9574; 89.9678 + int i9575; 89.9679 + int i9576; 89.9680 + int i9577; 89.9681 + int i9578; 89.9682 + int i9579; 89.9683 + int i9580; 89.9684 + int i9581; 89.9685 + int i9582; 89.9686 + int i9583; 89.9687 + int i9584; 89.9688 + int i9585; 89.9689 + int i9586; 89.9690 + int i9587; 89.9691 + int i9588; 89.9692 + int i9589; 89.9693 + int i9590; 89.9694 + int i9591; 89.9695 + int i9592; 89.9696 + int i9593; 89.9697 + int i9594; 89.9698 + int i9595; 89.9699 + int i9596; 89.9700 + int i9597; 89.9701 + int i9598; 89.9702 + int i9599; 89.9703 + int i9600; 89.9704 + int i9601; 89.9705 + int i9602; 89.9706 + int i9603; 89.9707 + int i9604; 89.9708 + int i9605; 89.9709 + int i9606; 89.9710 + int i9607; 89.9711 + int i9608; 89.9712 + int i9609; 89.9713 + int i9610; 89.9714 + int i9611; 89.9715 + int i9612; 89.9716 + int i9613; 89.9717 + int i9614; 89.9718 + int i9615; 89.9719 + int i9616; 89.9720 + int i9617; 89.9721 + int i9618; 89.9722 + int i9619; 89.9723 + int i9620; 89.9724 + int i9621; 89.9725 + int i9622; 89.9726 + int i9623; 89.9727 + int i9624; 89.9728 + int i9625; 89.9729 + int i9626; 89.9730 + int i9627; 89.9731 + int i9628; 89.9732 + int i9629; 89.9733 + int i9630; 89.9734 + int i9631; 89.9735 + int i9632; 89.9736 + int i9633; 89.9737 + int i9634; 89.9738 + int i9635; 89.9739 + int i9636; 89.9740 + int i9637; 89.9741 + int i9638; 89.9742 + int i9639; 89.9743 + int i9640; 89.9744 + int i9641; 89.9745 + int i9642; 89.9746 + int i9643; 89.9747 + int i9644; 89.9748 + int i9645; 89.9749 + int i9646; 89.9750 + int i9647; 89.9751 + int i9648; 89.9752 + int i9649; 89.9753 + int i9650; 89.9754 + int i9651; 89.9755 + int i9652; 89.9756 + int i9653; 89.9757 + int i9654; 89.9758 + int i9655; 89.9759 + int i9656; 89.9760 + int i9657; 89.9761 + int i9658; 89.9762 + int i9659; 89.9763 + int i9660; 89.9764 + int i9661; 89.9765 + int i9662; 89.9766 + int i9663; 89.9767 + int i9664; 89.9768 + int i9665; 89.9769 + int i9666; 89.9770 + int i9667; 89.9771 + int i9668; 89.9772 + int i9669; 89.9773 + int i9670; 89.9774 + int i9671; 89.9775 + int i9672; 89.9776 + int i9673; 89.9777 + int i9674; 89.9778 + int i9675; 89.9779 + int i9676; 89.9780 + int i9677; 89.9781 + int i9678; 89.9782 + int i9679; 89.9783 + int i9680; 89.9784 + int i9681; 89.9785 + int i9682; 89.9786 + int i9683; 89.9787 + int i9684; 89.9788 + int i9685; 89.9789 + int i9686; 89.9790 + int i9687; 89.9791 + int i9688; 89.9792 + int i9689; 89.9793 + int i9690; 89.9794 + int i9691; 89.9795 + int i9692; 89.9796 + int i9693; 89.9797 + int i9694; 89.9798 + int i9695; 89.9799 + int i9696; 89.9800 + int i9697; 89.9801 + int i9698; 89.9802 + int i9699; 89.9803 + int i9700; 89.9804 + int i9701; 89.9805 + int i9702; 89.9806 + int i9703; 89.9807 + int i9704; 89.9808 + int i9705; 89.9809 + int i9706; 89.9810 + int i9707; 89.9811 + int i9708; 89.9812 + int i9709; 89.9813 + int i9710; 89.9814 + int i9711; 89.9815 + int i9712; 89.9816 + int i9713; 89.9817 + int i9714; 89.9818 + int i9715; 89.9819 + int i9716; 89.9820 + int i9717; 89.9821 + int i9718; 89.9822 + int i9719; 89.9823 + int i9720; 89.9824 + int i9721; 89.9825 + int i9722; 89.9826 + int i9723; 89.9827 + int i9724; 89.9828 + int i9725; 89.9829 + int i9726; 89.9830 + int i9727; 89.9831 + int i9728; 89.9832 + int i9729; 89.9833 + int i9730; 89.9834 + int i9731; 89.9835 + int i9732; 89.9836 + int i9733; 89.9837 + int i9734; 89.9838 + int i9735; 89.9839 + int i9736; 89.9840 + int i9737; 89.9841 + int i9738; 89.9842 + int i9739; 89.9843 + int i9740; 89.9844 + int i9741; 89.9845 + int i9742; 89.9846 + int i9743; 89.9847 + int i9744; 89.9848 + int i9745; 89.9849 + int i9746; 89.9850 + int i9747; 89.9851 + int i9748; 89.9852 + int i9749; 89.9853 + int i9750; 89.9854 + int i9751; 89.9855 + int i9752; 89.9856 + int i9753; 89.9857 + int i9754; 89.9858 + int i9755; 89.9859 + int i9756; 89.9860 + int i9757; 89.9861 + int i9758; 89.9862 + int i9759; 89.9863 + int i9760; 89.9864 + int i9761; 89.9865 + int i9762; 89.9866 + int i9763; 89.9867 + int i9764; 89.9868 + int i9765; 89.9869 + int i9766; 89.9870 + int i9767; 89.9871 + int i9768; 89.9872 + int i9769; 89.9873 + int i9770; 89.9874 + int i9771; 89.9875 + int i9772; 89.9876 + int i9773; 89.9877 + int i9774; 89.9878 + int i9775; 89.9879 + int i9776; 89.9880 + int i9777; 89.9881 + int i9778; 89.9882 + int i9779; 89.9883 + int i9780; 89.9884 + int i9781; 89.9885 + int i9782; 89.9886 + int i9783; 89.9887 + int i9784; 89.9888 + int i9785; 89.9889 + int i9786; 89.9890 + int i9787; 89.9891 + int i9788; 89.9892 + int i9789; 89.9893 + int i9790; 89.9894 + int i9791; 89.9895 + int i9792; 89.9896 + int i9793; 89.9897 + int i9794; 89.9898 + int i9795; 89.9899 + int i9796; 89.9900 + int i9797; 89.9901 + int i9798; 89.9902 + int i9799; 89.9903 + int i9800; 89.9904 + int i9801; 89.9905 + int i9802; 89.9906 + int i9803; 89.9907 + int i9804; 89.9908 + int i9805; 89.9909 + int i9806; 89.9910 + int i9807; 89.9911 + int i9808; 89.9912 + int i9809; 89.9913 + int i9810; 89.9914 + int i9811; 89.9915 + int i9812; 89.9916 + int i9813; 89.9917 + int i9814; 89.9918 + int i9815; 89.9919 + int i9816; 89.9920 + int i9817; 89.9921 + int i9818; 89.9922 + int i9819; 89.9923 + int i9820; 89.9924 + int i9821; 89.9925 + int i9822; 89.9926 + int i9823; 89.9927 + int i9824; 89.9928 + int i9825; 89.9929 + int i9826; 89.9930 + int i9827; 89.9931 + int i9828; 89.9932 + int i9829; 89.9933 + int i9830; 89.9934 + int i9831; 89.9935 + int i9832; 89.9936 + int i9833; 89.9937 + int i9834; 89.9938 + int i9835; 89.9939 + int i9836; 89.9940 + int i9837; 89.9941 + int i9838; 89.9942 + int i9839; 89.9943 + int i9840; 89.9944 + int i9841; 89.9945 + int i9842; 89.9946 + int i9843; 89.9947 + int i9844; 89.9948 + int i9845; 89.9949 + int i9846; 89.9950 + int i9847; 89.9951 + int i9848; 89.9952 + int i9849; 89.9953 + int i9850; 89.9954 + int i9851; 89.9955 + int i9852; 89.9956 + int i9853; 89.9957 + int i9854; 89.9958 + int i9855; 89.9959 + int i9856; 89.9960 + int i9857; 89.9961 + int i9858; 89.9962 + int i9859; 89.9963 + int i9860; 89.9964 + int i9861; 89.9965 + int i9862; 89.9966 + int i9863; 89.9967 + int i9864; 89.9968 + int i9865; 89.9969 + int i9866; 89.9970 + int i9867; 89.9971 + int i9868; 89.9972 + int i9869; 89.9973 + int i9870; 89.9974 + int i9871; 89.9975 + int i9872; 89.9976 + int i9873; 89.9977 + int i9874; 89.9978 + int i9875; 89.9979 + int i9876; 89.9980 + int i9877; 89.9981 + int i9878; 89.9982 + int i9879; 89.9983 + int i9880; 89.9984 + int i9881; 89.9985 + int i9882; 89.9986 + int i9883; 89.9987 + int i9884; 89.9988 + int i9885; 89.9989 + int i9886; 89.9990 + int i9887; 89.9991 + int i9888; 89.9992 + int i9889; 89.9993 + int i9890; 89.9994 + int i9891; 89.9995 + int i9892; 89.9996 + int i9893; 89.9997 + int i9894; 89.9998 + int i9895; 89.9999 + int i9896; 89.10000 + int i9897; 89.10001 + int i9898; 89.10002 + int i9899; 89.10003 + int i9900; 89.10004 + int i9901; 89.10005 + int i9902; 89.10006 + int i9903; 89.10007 + int i9904; 89.10008 + int i9905; 89.10009 + int i9906; 89.10010 + int i9907; 89.10011 + int i9908; 89.10012 + int i9909; 89.10013 + int i9910; 89.10014 + int i9911; 89.10015 + int i9912; 89.10016 + int i9913; 89.10017 + int i9914; 89.10018 + int i9915; 89.10019 + int i9916; 89.10020 + int i9917; 89.10021 + int i9918; 89.10022 + int i9919; 89.10023 + int i9920; 89.10024 + int i9921; 89.10025 + int i9922; 89.10026 + int i9923; 89.10027 + int i9924; 89.10028 + int i9925; 89.10029 + int i9926; 89.10030 + int i9927; 89.10031 + int i9928; 89.10032 + int i9929; 89.10033 + int i9930; 89.10034 + int i9931; 89.10035 + int i9932; 89.10036 + int i9933; 89.10037 + int i9934; 89.10038 + int i9935; 89.10039 + int i9936; 89.10040 + int i9937; 89.10041 + int i9938; 89.10042 + int i9939; 89.10043 + int i9940; 89.10044 + int i9941; 89.10045 + int i9942; 89.10046 + int i9943; 89.10047 + int i9944; 89.10048 + int i9945; 89.10049 + int i9946; 89.10050 + int i9947; 89.10051 + int i9948; 89.10052 + int i9949; 89.10053 + int i9950; 89.10054 + int i9951; 89.10055 + int i9952; 89.10056 + int i9953; 89.10057 + int i9954; 89.10058 + int i9955; 89.10059 + int i9956; 89.10060 + int i9957; 89.10061 + int i9958; 89.10062 + int i9959; 89.10063 + int i9960; 89.10064 + int i9961; 89.10065 + int i9962; 89.10066 + int i9963; 89.10067 + int i9964; 89.10068 + int i9965; 89.10069 + int i9966; 89.10070 + int i9967; 89.10071 + int i9968; 89.10072 + int i9969; 89.10073 + int i9970; 89.10074 + int i9971; 89.10075 + int i9972; 89.10076 + int i9973; 89.10077 + int i9974; 89.10078 + int i9975; 89.10079 + int i9976; 89.10080 + int i9977; 89.10081 + int i9978; 89.10082 + int i9979; 89.10083 + int i9980; 89.10084 + int i9981; 89.10085 + int i9982; 89.10086 + int i9983; 89.10087 + int i9984; 89.10088 + int i9985; 89.10089 + int i9986; 89.10090 + int i9987; 89.10091 + int i9988; 89.10092 + int i9989; 89.10093 + int i9990; 89.10094 + int i9991; 89.10095 + int i9992; 89.10096 + int i9993; 89.10097 + int i9994; 89.10098 + int i9995; 89.10099 + int i9996; 89.10100 + int i9997; 89.10101 + int i9998; 89.10102 + int i9999; 89.10103 + int i10000; 89.10104 + int i10001; 89.10105 + int i10002; 89.10106 + int i10003; 89.10107 + int i10004; 89.10108 + int i10005; 89.10109 + int i10006; 89.10110 + int i10007; 89.10111 + int i10008; 89.10112 + int i10009; 89.10113 + int i10010; 89.10114 + int i10011; 89.10115 + int i10012; 89.10116 + int i10013; 89.10117 + int i10014; 89.10118 + int i10015; 89.10119 + int i10016; 89.10120 + int i10017; 89.10121 + int i10018; 89.10122 + int i10019; 89.10123 + int i10020; 89.10124 + int i10021; 89.10125 + int i10022; 89.10126 + int i10023; 89.10127 + int i10024; 89.10128 + int i10025; 89.10129 + int i10026; 89.10130 + int i10027; 89.10131 + int i10028; 89.10132 + int i10029; 89.10133 + int i10030; 89.10134 + int i10031; 89.10135 + int i10032; 89.10136 + int i10033; 89.10137 + int i10034; 89.10138 + int i10035; 89.10139 + int i10036; 89.10140 + int i10037; 89.10141 + int i10038; 89.10142 + int i10039; 89.10143 + int i10040; 89.10144 + int i10041; 89.10145 + int i10042; 89.10146 + int i10043; 89.10147 + int i10044; 89.10148 + int i10045; 89.10149 + int i10046; 89.10150 + int i10047; 89.10151 + int i10048; 89.10152 + int i10049; 89.10153 + int i10050; 89.10154 + int i10051; 89.10155 + int i10052; 89.10156 + int i10053; 89.10157 + int i10054; 89.10158 + int i10055; 89.10159 + int i10056; 89.10160 + int i10057; 89.10161 + int i10058; 89.10162 + int i10059; 89.10163 + int i10060; 89.10164 + int i10061; 89.10165 + int i10062; 89.10166 + int i10063; 89.10167 + int i10064; 89.10168 + int i10065; 89.10169 + int i10066; 89.10170 + int i10067; 89.10171 + int i10068; 89.10172 + int i10069; 89.10173 + int i10070; 89.10174 + int i10071; 89.10175 + int i10072; 89.10176 + int i10073; 89.10177 + int i10074; 89.10178 + int i10075; 89.10179 + int i10076; 89.10180 + int i10077; 89.10181 + int i10078; 89.10182 + int i10079; 89.10183 + int i10080; 89.10184 + int i10081; 89.10185 + int i10082; 89.10186 + int i10083; 89.10187 + int i10084; 89.10188 + int i10085; 89.10189 + int i10086; 89.10190 + int i10087; 89.10191 + int i10088; 89.10192 + int i10089; 89.10193 + int i10090; 89.10194 + int i10091; 89.10195 + int i10092; 89.10196 + int i10093; 89.10197 + int i10094; 89.10198 + int i10095; 89.10199 + int i10096; 89.10200 + int i10097; 89.10201 + int i10098; 89.10202 + int i10099; 89.10203 + int i10100; 89.10204 + int i10101; 89.10205 + int i10102; 89.10206 + int i10103; 89.10207 + int i10104; 89.10208 + int i10105; 89.10209 + int i10106; 89.10210 + int i10107; 89.10211 + int i10108; 89.10212 + int i10109; 89.10213 + int i10110; 89.10214 + int i10111; 89.10215 + int i10112; 89.10216 + int i10113; 89.10217 + int i10114; 89.10218 + int i10115; 89.10219 + int i10116; 89.10220 + int i10117; 89.10221 + int i10118; 89.10222 + int i10119; 89.10223 + int i10120; 89.10224 + int i10121; 89.10225 + int i10122; 89.10226 + int i10123; 89.10227 + int i10124; 89.10228 + int i10125; 89.10229 + int i10126; 89.10230 + int i10127; 89.10231 + int i10128; 89.10232 + int i10129; 89.10233 + int i10130; 89.10234 + int i10131; 89.10235 + int i10132; 89.10236 + int i10133; 89.10237 + int i10134; 89.10238 + int i10135; 89.10239 + int i10136; 89.10240 + int i10137; 89.10241 + int i10138; 89.10242 + int i10139; 89.10243 + int i10140; 89.10244 + int i10141; 89.10245 + int i10142; 89.10246 + int i10143; 89.10247 + int i10144; 89.10248 + int i10145; 89.10249 + int i10146; 89.10250 + int i10147; 89.10251 + int i10148; 89.10252 + int i10149; 89.10253 + int i10150; 89.10254 + int i10151; 89.10255 + int i10152; 89.10256 + int i10153; 89.10257 + int i10154; 89.10258 + int i10155; 89.10259 + int i10156; 89.10260 + int i10157; 89.10261 + int i10158; 89.10262 + int i10159; 89.10263 + int i10160; 89.10264 + int i10161; 89.10265 + int i10162; 89.10266 + int i10163; 89.10267 + int i10164; 89.10268 + int i10165; 89.10269 + int i10166; 89.10270 + int i10167; 89.10271 + int i10168; 89.10272 + int i10169; 89.10273 + int i10170; 89.10274 + int i10171; 89.10275 + int i10172; 89.10276 + int i10173; 89.10277 + int i10174; 89.10278 + int i10175; 89.10279 + int i10176; 89.10280 + int i10177; 89.10281 + int i10178; 89.10282 + int i10179; 89.10283 + int i10180; 89.10284 + int i10181; 89.10285 + int i10182; 89.10286 + int i10183; 89.10287 + int i10184; 89.10288 + int i10185; 89.10289 + int i10186; 89.10290 + int i10187; 89.10291 + int i10188; 89.10292 + int i10189; 89.10293 + int i10190; 89.10294 + int i10191; 89.10295 + int i10192; 89.10296 + int i10193; 89.10297 + int i10194; 89.10298 + int i10195; 89.10299 + int i10196; 89.10300 + int i10197; 89.10301 + int i10198; 89.10302 + int i10199; 89.10303 + int i10200; 89.10304 + int i10201; 89.10305 + int i10202; 89.10306 + int i10203; 89.10307 + int i10204; 89.10308 + int i10205; 89.10309 + int i10206; 89.10310 + int i10207; 89.10311 + int i10208; 89.10312 + int i10209; 89.10313 + int i10210; 89.10314 + int i10211; 89.10315 + int i10212; 89.10316 + int i10213; 89.10317 + int i10214; 89.10318 + int i10215; 89.10319 + int i10216; 89.10320 + int i10217; 89.10321 + int i10218; 89.10322 + int i10219; 89.10323 + int i10220; 89.10324 + int i10221; 89.10325 + int i10222; 89.10326 + int i10223; 89.10327 + int i10224; 89.10328 + int i10225; 89.10329 + int i10226; 89.10330 + int i10227; 89.10331 + int i10228; 89.10332 + int i10229; 89.10333 + int i10230; 89.10334 + int i10231; 89.10335 + int i10232; 89.10336 + int i10233; 89.10337 + int i10234; 89.10338 + int i10235; 89.10339 + int i10236; 89.10340 + int i10237; 89.10341 + int i10238; 89.10342 + int i10239; 89.10343 + int i10240; 89.10344 + int i10241; 89.10345 + int i10242; 89.10346 + int i10243; 89.10347 + int i10244; 89.10348 + int i10245; 89.10349 + int i10246; 89.10350 + int i10247; 89.10351 + int i10248; 89.10352 + int i10249; 89.10353 + int i10250; 89.10354 + int i10251; 89.10355 + int i10252; 89.10356 + int i10253; 89.10357 + int i10254; 89.10358 + int i10255; 89.10359 + int i10256; 89.10360 + int i10257; 89.10361 + int i10258; 89.10362 + int i10259; 89.10363 + int i10260; 89.10364 + int i10261; 89.10365 + int i10262; 89.10366 + int i10263; 89.10367 + int i10264; 89.10368 + int i10265; 89.10369 + int i10266; 89.10370 + int i10267; 89.10371 + int i10268; 89.10372 + int i10269; 89.10373 + int i10270; 89.10374 + int i10271; 89.10375 + int i10272; 89.10376 + int i10273; 89.10377 + int i10274; 89.10378 + int i10275; 89.10379 + int i10276; 89.10380 + int i10277; 89.10381 + int i10278; 89.10382 + int i10279; 89.10383 + int i10280; 89.10384 + int i10281; 89.10385 + int i10282; 89.10386 + int i10283; 89.10387 + int i10284; 89.10388 + int i10285; 89.10389 + int i10286; 89.10390 + int i10287; 89.10391 + int i10288; 89.10392 + int i10289; 89.10393 + int i10290; 89.10394 + int i10291; 89.10395 + int i10292; 89.10396 + int i10293; 89.10397 + int i10294; 89.10398 + int i10295; 89.10399 + int i10296; 89.10400 + int i10297; 89.10401 + int i10298; 89.10402 + int i10299; 89.10403 + int i10300; 89.10404 + int i10301; 89.10405 + int i10302; 89.10406 + int i10303; 89.10407 + int i10304; 89.10408 + int i10305; 89.10409 + int i10306; 89.10410 + int i10307; 89.10411 + int i10308; 89.10412 + int i10309; 89.10413 + int i10310; 89.10414 + int i10311; 89.10415 + int i10312; 89.10416 + int i10313; 89.10417 + int i10314; 89.10418 + int i10315; 89.10419 + int i10316; 89.10420 + int i10317; 89.10421 + int i10318; 89.10422 + int i10319; 89.10423 + int i10320; 89.10424 + int i10321; 89.10425 + int i10322; 89.10426 + int i10323; 89.10427 + int i10324; 89.10428 + int i10325; 89.10429 + int i10326; 89.10430 + int i10327; 89.10431 + int i10328; 89.10432 + int i10329; 89.10433 + int i10330; 89.10434 + int i10331; 89.10435 + int i10332; 89.10436 + int i10333; 89.10437 + int i10334; 89.10438 + int i10335; 89.10439 + int i10336; 89.10440 + int i10337; 89.10441 + int i10338; 89.10442 + int i10339; 89.10443 + int i10340; 89.10444 + int i10341; 89.10445 + int i10342; 89.10446 + int i10343; 89.10447 + int i10344; 89.10448 + int i10345; 89.10449 + int i10346; 89.10450 + int i10347; 89.10451 + int i10348; 89.10452 + int i10349; 89.10453 + int i10350; 89.10454 + int i10351; 89.10455 + int i10352; 89.10456 + int i10353; 89.10457 + int i10354; 89.10458 + int i10355; 89.10459 + int i10356; 89.10460 + int i10357; 89.10461 + int i10358; 89.10462 + int i10359; 89.10463 + int i10360; 89.10464 + int i10361; 89.10465 + int i10362; 89.10466 + int i10363; 89.10467 + int i10364; 89.10468 + int i10365; 89.10469 + int i10366; 89.10470 + int i10367; 89.10471 + int i10368; 89.10472 + int i10369; 89.10473 + int i10370; 89.10474 + int i10371; 89.10475 + int i10372; 89.10476 + int i10373; 89.10477 + int i10374; 89.10478 + int i10375; 89.10479 + int i10376; 89.10480 + int i10377; 89.10481 + int i10378; 89.10482 + int i10379; 89.10483 + int i10380; 89.10484 + int i10381; 89.10485 + int i10382; 89.10486 + int i10383; 89.10487 + int i10384; 89.10488 + int i10385; 89.10489 + int i10386; 89.10490 + int i10387; 89.10491 + int i10388; 89.10492 + int i10389; 89.10493 + int i10390; 89.10494 + int i10391; 89.10495 + int i10392; 89.10496 + int i10393; 89.10497 + int i10394; 89.10498 + int i10395; 89.10499 + int i10396; 89.10500 + int i10397; 89.10501 + int i10398; 89.10502 + int i10399; 89.10503 + int i10400; 89.10504 + int i10401; 89.10505 + int i10402; 89.10506 + int i10403; 89.10507 + int i10404; 89.10508 + int i10405; 89.10509 + int i10406; 89.10510 + int i10407; 89.10511 + int i10408; 89.10512 + int i10409; 89.10513 + int i10410; 89.10514 + int i10411; 89.10515 + int i10412; 89.10516 + int i10413; 89.10517 + int i10414; 89.10518 + int i10415; 89.10519 + int i10416; 89.10520 + int i10417; 89.10521 + int i10418; 89.10522 + int i10419; 89.10523 + int i10420; 89.10524 + int i10421; 89.10525 + int i10422; 89.10526 + int i10423; 89.10527 + int i10424; 89.10528 + int i10425; 89.10529 + int i10426; 89.10530 + int i10427; 89.10531 + int i10428; 89.10532 + int i10429; 89.10533 + int i10430; 89.10534 + int i10431; 89.10535 + int i10432; 89.10536 + int i10433; 89.10537 + int i10434; 89.10538 + int i10435; 89.10539 + int i10436; 89.10540 + int i10437; 89.10541 + int i10438; 89.10542 + int i10439; 89.10543 + int i10440; 89.10544 + int i10441; 89.10545 + int i10442; 89.10546 + int i10443; 89.10547 + int i10444; 89.10548 + int i10445; 89.10549 + int i10446; 89.10550 + int i10447; 89.10551 + int i10448; 89.10552 + int i10449; 89.10553 + int i10450; 89.10554 + int i10451; 89.10555 + int i10452; 89.10556 + int i10453; 89.10557 + int i10454; 89.10558 + int i10455; 89.10559 + int i10456; 89.10560 + int i10457; 89.10561 + int i10458; 89.10562 + int i10459; 89.10563 + int i10460; 89.10564 + int i10461; 89.10565 + int i10462; 89.10566 + int i10463; 89.10567 + int i10464; 89.10568 + int i10465; 89.10569 + int i10466; 89.10570 + int i10467; 89.10571 + int i10468; 89.10572 + int i10469; 89.10573 + int i10470; 89.10574 + int i10471; 89.10575 + int i10472; 89.10576 + int i10473; 89.10577 + int i10474; 89.10578 + int i10475; 89.10579 + int i10476; 89.10580 + int i10477; 89.10581 + int i10478; 89.10582 + int i10479; 89.10583 + int i10480; 89.10584 + int i10481; 89.10585 + int i10482; 89.10586 + int i10483; 89.10587 + int i10484; 89.10588 + int i10485; 89.10589 + int i10486; 89.10590 + int i10487; 89.10591 + int i10488; 89.10592 + int i10489; 89.10593 + int i10490; 89.10594 + int i10491; 89.10595 + int i10492; 89.10596 + int i10493; 89.10597 + int i10494; 89.10598 + int i10495; 89.10599 + int i10496; 89.10600 + int i10497; 89.10601 + int i10498; 89.10602 + int i10499; 89.10603 + int i10500; 89.10604 + int i10501; 89.10605 + int i10502; 89.10606 + int i10503; 89.10607 + int i10504; 89.10608 + int i10505; 89.10609 + int i10506; 89.10610 + int i10507; 89.10611 + int i10508; 89.10612 + int i10509; 89.10613 + int i10510; 89.10614 + int i10511; 89.10615 + int i10512; 89.10616 + int i10513; 89.10617 + int i10514; 89.10618 + int i10515; 89.10619 + int i10516; 89.10620 + int i10517; 89.10621 + int i10518; 89.10622 + int i10519; 89.10623 + int i10520; 89.10624 + int i10521; 89.10625 + int i10522; 89.10626 + int i10523; 89.10627 + int i10524; 89.10628 + int i10525; 89.10629 + int i10526; 89.10630 + int i10527; 89.10631 + int i10528; 89.10632 + int i10529; 89.10633 + int i10530; 89.10634 + int i10531; 89.10635 + int i10532; 89.10636 + int i10533; 89.10637 + int i10534; 89.10638 + int i10535; 89.10639 + int i10536; 89.10640 + int i10537; 89.10641 + int i10538; 89.10642 + int i10539; 89.10643 + int i10540; 89.10644 + int i10541; 89.10645 + int i10542; 89.10646 + int i10543; 89.10647 + int i10544; 89.10648 + int i10545; 89.10649 + int i10546; 89.10650 + int i10547; 89.10651 + int i10548; 89.10652 + int i10549; 89.10653 + int i10550; 89.10654 + int i10551; 89.10655 + int i10552; 89.10656 + int i10553; 89.10657 + int i10554; 89.10658 + int i10555; 89.10659 + int i10556; 89.10660 + int i10557; 89.10661 + int i10558; 89.10662 + int i10559; 89.10663 + int i10560; 89.10664 + int i10561; 89.10665 + int i10562; 89.10666 + int i10563; 89.10667 + int i10564; 89.10668 + int i10565; 89.10669 + int i10566; 89.10670 + int i10567; 89.10671 + int i10568; 89.10672 + int i10569; 89.10673 + int i10570; 89.10674 + int i10571; 89.10675 + int i10572; 89.10676 + int i10573; 89.10677 + int i10574; 89.10678 + int i10575; 89.10679 + int i10576; 89.10680 + int i10577; 89.10681 + int i10578; 89.10682 + int i10579; 89.10683 + int i10580; 89.10684 + int i10581; 89.10685 + int i10582; 89.10686 + int i10583; 89.10687 + int i10584; 89.10688 + int i10585; 89.10689 + int i10586; 89.10690 + int i10587; 89.10691 + int i10588; 89.10692 + int i10589; 89.10693 + int i10590; 89.10694 + int i10591; 89.10695 + int i10592; 89.10696 + int i10593; 89.10697 + int i10594; 89.10698 + int i10595; 89.10699 + int i10596; 89.10700 + int i10597; 89.10701 + int i10598; 89.10702 + int i10599; 89.10703 + int i10600; 89.10704 + int i10601; 89.10705 + int i10602; 89.10706 + int i10603; 89.10707 + int i10604; 89.10708 + int i10605; 89.10709 + int i10606; 89.10710 + int i10607; 89.10711 + int i10608; 89.10712 + int i10609; 89.10713 + int i10610; 89.10714 + int i10611; 89.10715 + int i10612; 89.10716 + int i10613; 89.10717 + int i10614; 89.10718 + int i10615; 89.10719 + int i10616; 89.10720 + int i10617; 89.10721 + int i10618; 89.10722 + int i10619; 89.10723 + int i10620; 89.10724 + int i10621; 89.10725 + int i10622; 89.10726 + int i10623; 89.10727 + int i10624; 89.10728 + int i10625; 89.10729 + int i10626; 89.10730 + int i10627; 89.10731 + int i10628; 89.10732 + int i10629; 89.10733 + int i10630; 89.10734 + int i10631; 89.10735 + int i10632; 89.10736 + int i10633; 89.10737 + int i10634; 89.10738 + int i10635; 89.10739 + int i10636; 89.10740 + int i10637; 89.10741 + int i10638; 89.10742 + int i10639; 89.10743 + int i10640; 89.10744 + int i10641; 89.10745 + int i10642; 89.10746 + int i10643; 89.10747 + int i10644; 89.10748 + int i10645; 89.10749 + int i10646; 89.10750 + int i10647; 89.10751 + int i10648; 89.10752 + int i10649; 89.10753 + int i10650; 89.10754 + int i10651; 89.10755 + int i10652; 89.10756 + int i10653; 89.10757 + int i10654; 89.10758 + int i10655; 89.10759 + int i10656; 89.10760 + int i10657; 89.10761 + int i10658; 89.10762 + int i10659; 89.10763 + int i10660; 89.10764 + int i10661; 89.10765 + int i10662; 89.10766 + int i10663; 89.10767 + int i10664; 89.10768 + int i10665; 89.10769 + int i10666; 89.10770 + int i10667; 89.10771 + int i10668; 89.10772 + int i10669; 89.10773 + int i10670; 89.10774 + int i10671; 89.10775 + int i10672; 89.10776 + int i10673; 89.10777 + int i10674; 89.10778 + int i10675; 89.10779 + int i10676; 89.10780 + int i10677; 89.10781 + int i10678; 89.10782 + int i10679; 89.10783 + int i10680; 89.10784 + int i10681; 89.10785 + int i10682; 89.10786 + int i10683; 89.10787 + int i10684; 89.10788 + int i10685; 89.10789 + int i10686; 89.10790 + int i10687; 89.10791 + int i10688; 89.10792 + int i10689; 89.10793 + int i10690; 89.10794 + int i10691; 89.10795 + int i10692; 89.10796 + int i10693; 89.10797 + int i10694; 89.10798 + int i10695; 89.10799 + int i10696; 89.10800 + int i10697; 89.10801 + int i10698; 89.10802 + int i10699; 89.10803 + int i10700; 89.10804 + int i10701; 89.10805 + int i10702; 89.10806 + int i10703; 89.10807 + int i10704; 89.10808 + int i10705; 89.10809 + int i10706; 89.10810 + int i10707; 89.10811 + int i10708; 89.10812 + int i10709; 89.10813 + int i10710; 89.10814 + int i10711; 89.10815 + int i10712; 89.10816 + int i10713; 89.10817 + int i10714; 89.10818 + int i10715; 89.10819 + int i10716; 89.10820 + int i10717; 89.10821 + int i10718; 89.10822 + int i10719; 89.10823 + int i10720; 89.10824 + int i10721; 89.10825 + int i10722; 89.10826 + int i10723; 89.10827 + int i10724; 89.10828 + int i10725; 89.10829 + int i10726; 89.10830 + int i10727; 89.10831 + int i10728; 89.10832 + int i10729; 89.10833 + int i10730; 89.10834 + int i10731; 89.10835 + int i10732; 89.10836 + int i10733; 89.10837 + int i10734; 89.10838 + int i10735; 89.10839 + int i10736; 89.10840 + int i10737; 89.10841 + int i10738; 89.10842 + int i10739; 89.10843 + int i10740; 89.10844 + int i10741; 89.10845 + int i10742; 89.10846 + int i10743; 89.10847 + int i10744; 89.10848 + int i10745; 89.10849 + int i10746; 89.10850 + int i10747; 89.10851 + int i10748; 89.10852 + int i10749; 89.10853 + int i10750; 89.10854 + int i10751; 89.10855 + int i10752; 89.10856 + int i10753; 89.10857 + int i10754; 89.10858 + int i10755; 89.10859 + int i10756; 89.10860 + int i10757; 89.10861 + int i10758; 89.10862 + int i10759; 89.10863 + int i10760; 89.10864 + int i10761; 89.10865 + int i10762; 89.10866 + int i10763; 89.10867 + int i10764; 89.10868 + int i10765; 89.10869 + int i10766; 89.10870 + int i10767; 89.10871 + int i10768; 89.10872 + int i10769; 89.10873 + int i10770; 89.10874 + int i10771; 89.10875 + int i10772; 89.10876 + int i10773; 89.10877 + int i10774; 89.10878 + int i10775; 89.10879 + int i10776; 89.10880 + int i10777; 89.10881 + int i10778; 89.10882 + int i10779; 89.10883 + int i10780; 89.10884 + int i10781; 89.10885 + int i10782; 89.10886 + int i10783; 89.10887 + int i10784; 89.10888 + int i10785; 89.10889 + int i10786; 89.10890 + int i10787; 89.10891 + int i10788; 89.10892 + int i10789; 89.10893 + int i10790; 89.10894 + int i10791; 89.10895 + int i10792; 89.10896 + int i10793; 89.10897 + int i10794; 89.10898 + int i10795; 89.10899 + int i10796; 89.10900 + int i10797; 89.10901 + int i10798; 89.10902 + int i10799; 89.10903 + 89.10904 + if (unlikely) { 89.10905 + // Since Foo is not loaded this will turn into an uncommon trap 89.10906 + Class c = Foo.class; 89.10907 + 89.10908 + StringBuilder sb = new StringBuilder(); 89.10909 + } 89.10910 + } 89.10911 +}
90.1 --- a/test/gc/arguments/TestMaxHeapSizeTools.java Wed Nov 20 11:08:09 2013 -0800 90.2 +++ b/test/gc/arguments/TestMaxHeapSizeTools.java Thu Nov 21 12:30:35 2013 -0800 90.3 @@ -64,32 +64,29 @@ 90.4 long newPlusOldSize = values[0] + values[1]; 90.5 long smallValue = newPlusOldSize / 2; 90.6 long largeValue = newPlusOldSize * 2; 90.7 + long maxHeapSize = largeValue + (2 * 1024 * 1024); 90.8 90.9 // -Xms is not set 90.10 - checkErgonomics(new String[] { gcflag, "-Xmx16M" }, values, -1, -1); 90.11 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue); 90.12 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue); 90.13 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-XX:InitialHeapSize=0" }, values, -1, -1); 90.14 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize }, values, -1, -1); 90.15 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-XX:InitialHeapSize=" + smallValue }, values, -1, smallValue); 90.16 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue); 90.17 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-XX:InitialHeapSize=0" }, values, -1, -1); 90.18 90.19 // -Xms is set to zero 90.20 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0" }, values, -1, -1); 90.21 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0", "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue); 90.22 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0", "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue); 90.23 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0", "-XX:InitialHeapSize=0" }, values, -1, -1); 90.24 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0" }, values, -1, -1); 90.25 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0", "-XX:InitialHeapSize=" + smallValue }, values, -1, smallValue); 90.26 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0", "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue); 90.27 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0", "-XX:InitialHeapSize=0" }, values, -1, -1); 90.28 90.29 // -Xms is set to small value 90.30 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue }, values, -1, -1); 90.31 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue, "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue); 90.32 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue, "-XX:InitialHeapSize=" + largeValue }, values, smallValue, largeValue); 90.33 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue, "-XX:InitialHeapSize=0" }, values, smallValue, -1); 90.34 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue }, values, -1, -1); 90.35 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue, "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue); 90.36 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue, "-XX:InitialHeapSize=" + largeValue }, values, smallValue, largeValue); 90.37 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue, "-XX:InitialHeapSize=0" }, values, smallValue, -1); 90.38 90.39 // -Xms is set to large value 90.40 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue }, values, largeValue, largeValue); 90.41 - // the next case has already been checked elsewhere and gives an error 90.42 - // checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue, "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue); 90.43 - // the next case has already been checked elsewhere too 90.44 - // checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue, "-XX:InitialHeapSize=" + largeValue }, values, values[0], largeValue); 90.45 - checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue, "-XX:InitialHeapSize=0" }, values, largeValue, -1); 90.46 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + largeValue }, values, largeValue, largeValue); 90.47 + checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + largeValue, "-XX:InitialHeapSize=0" }, values, largeValue, -1); 90.48 } 90.49 90.50 private static long align_up(long value, long alignment) {
91.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 91.2 +++ b/test/gc/arguments/TestMaxNewSize.java Thu Nov 21 12:30:35 2013 -0800 91.3 @@ -0,0 +1,122 @@ 91.4 +/* 91.5 +* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 91.6 +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 91.7 +* 91.8 +* This code is free software; you can redistribute it and/or modify it 91.9 +* under the terms of the GNU General Public License version 2 only, as 91.10 +* published by the Free Software Foundation. 91.11 +* 91.12 +* This code is distributed in the hope that it will be useful, but WITHOUT 91.13 +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 91.14 +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 91.15 +* version 2 for more details (a copy is included in the LICENSE file that 91.16 +* accompanied this code). 91.17 +* 91.18 +* You should have received a copy of the GNU General Public License version 91.19 +* 2 along with this work; if not, write to the Free Software Foundation, 91.20 +* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 91.21 +* 91.22 +* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 91.23 +* or visit www.oracle.com if you need additional information or have any 91.24 +* questions. 91.25 +*/ 91.26 + 91.27 +/* 91.28 + * @test TestMaxNewSize 91.29 + * @key gc 91.30 + * @bug 7057939 91.31 + * @summary Make sure that MaxNewSize always has a useful value after argument 91.32 + * processing. 91.33 + * @library /testlibrary 91.34 + * @build TestMaxNewSize 91.35 + * @run main TestMaxNewSize -XX:+UseSerialGC 91.36 + * @run main TestMaxNewSize -XX:+UseParallelGC 91.37 + * @run main TestMaxNewSize -XX:+UseConcMarkSweepGC 91.38 + * @run main TestMaxNewSize -XX:+UseG1GC 91.39 + * @author thomas.schatzl@oracle.com, jesper.wilhelmsson@oracle.com 91.40 + */ 91.41 + 91.42 +import java.util.regex.Matcher; 91.43 +import java.util.regex.Pattern; 91.44 + 91.45 +import java.math.BigInteger; 91.46 + 91.47 +import java.util.ArrayList; 91.48 +import java.util.Arrays; 91.49 + 91.50 +import com.oracle.java.testlibrary.*; 91.51 + 91.52 +public class TestMaxNewSize { 91.53 + 91.54 + private static void checkMaxNewSize(String[] flags, int heapsize) throws Exception { 91.55 + BigInteger actual = new BigInteger(getMaxNewSize(flags)); 91.56 + System.out.println(actual); 91.57 + if (actual.compareTo(new BigInteger((new Long(heapsize)).toString())) == 1) { 91.58 + throw new RuntimeException("MaxNewSize value set to \"" + actual + 91.59 + "\", expected otherwise when running with the following flags: " + Arrays.asList(flags).toString()); 91.60 + } 91.61 + } 91.62 + 91.63 + private static void checkIncompatibleNewSize(String[] flags) throws Exception { 91.64 + ArrayList<String> finalargs = new ArrayList<String>(); 91.65 + finalargs.addAll(Arrays.asList(flags)); 91.66 + finalargs.add("-version"); 91.67 + 91.68 + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0])); 91.69 + OutputAnalyzer output = new OutputAnalyzer(pb.start()); 91.70 + output.shouldContain("Initial young gen size set larger than the maximum young gen size"); 91.71 + } 91.72 + 91.73 + private static boolean isRunningG1(String[] args) { 91.74 + for (int i = 0; i < args.length; i++) { 91.75 + if (args[i].contains("+UseG1GC")) { 91.76 + return true; 91.77 + } 91.78 + } 91.79 + return false; 91.80 + } 91.81 + 91.82 + private static String getMaxNewSize(String[] flags) throws Exception { 91.83 + ArrayList<String> finalargs = new ArrayList<String>(); 91.84 + finalargs.addAll(Arrays.asList(flags)); 91.85 + if (isRunningG1(flags)) { 91.86 + finalargs.add("-XX:G1HeapRegionSize=1M"); 91.87 + } 91.88 + finalargs.add("-XX:+PrintFlagsFinal"); 91.89 + finalargs.add("-version"); 91.90 + 91.91 + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0])); 91.92 + OutputAnalyzer output = new OutputAnalyzer(pb.start()); 91.93 + output.shouldHaveExitValue(0); 91.94 + String stdout = output.getStdout(); 91.95 + //System.out.println(stdout); 91.96 + return getFlagValue("MaxNewSize", stdout); 91.97 + } 91.98 + 91.99 + private static String getFlagValue(String flag, String where) { 91.100 + Matcher m = Pattern.compile(flag + "\\s+:?=\\s+\\d+").matcher(where); 91.101 + if (!m.find()) { 91.102 + throw new RuntimeException("Could not find value for flag " + flag + " in output string"); 91.103 + } 91.104 + String match = m.group(); 91.105 + return match.substring(match.lastIndexOf(" ") + 1, match.length()); 91.106 + } 91.107 + 91.108 + public static void main(String args[]) throws Exception { 91.109 + String gcName = args[0]; 91.110 + final int M32 = 32 * 1024 * 1024; 91.111 + final int M64 = 64 * 1024 * 1024; 91.112 + final int M96 = 96 * 1024 * 1024; 91.113 + final int M128 = 128 * 1024 * 1024; 91.114 + checkMaxNewSize(new String[] { gcName, "-Xmx128M" }, M128); 91.115 + checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=5" }, M128); 91.116 + checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M" }, M128); 91.117 + checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:OldSize=96M" }, M128); 91.118 + checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:MaxNewSize=32M" }, M32); 91.119 + checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M", "-XX:MaxNewSize=32M" }, M32); 91.120 + checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=6", "-XX:MaxNewSize=32M" }, M32); 91.121 + checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-Xms96M" }, M128); 91.122 + checkMaxNewSize(new String[] { gcName, "-Xmx96M", "-Xms96M" }, M96); 91.123 + checkMaxNewSize(new String[] { gcName, "-XX:NewSize=128M", "-XX:MaxNewSize=50M"}, M128); 91.124 + } 91.125 +}
92.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 92.2 +++ b/test/gc/g1/TestHumongousCodeCacheRoots.java Thu Nov 21 12:30:35 2013 -0800 92.3 @@ -0,0 +1,143 @@ 92.4 +/* 92.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 92.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 92.7 + * 92.8 + * This code is free software; you can redistribute it and/or modify it 92.9 + * under the terms of the GNU General Public License version 2 only, as 92.10 + * published by the Free Software Foundation. 92.11 + * 92.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 92.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 92.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 92.15 + * version 2 for more details (a copy is included in the LICENSE file that 92.16 + * accompanied this code). 92.17 + * 92.18 + * You should have received a copy of the GNU General Public License version 92.19 + * 2 along with this work; if not, write to the Free Software Foundation, 92.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 92.21 + * 92.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 92.23 + * or visit www.oracle.com if you need additional information or have any 92.24 + * questions. 92.25 + */ 92.26 + 92.27 +/* 92.28 + * @test 92.29 + * @key regression 92.30 + * @key gc 92.31 + * @bug 8027756 92.32 + * @library /testlibrary /testlibrary/whitebox 92.33 + * @build TestHumongousCodeCacheRoots 92.34 + * @run main ClassFileInstaller sun.hotspot.WhiteBox 92.35 + * @summary Humongous objects may have references from the code cache 92.36 + * @run main TestHumongousCodeCacheRoots 92.37 +*/ 92.38 + 92.39 +import com.oracle.java.testlibrary.*; 92.40 +import sun.hotspot.WhiteBox; 92.41 + 92.42 +import java.util.ArrayList; 92.43 +import java.util.Arrays; 92.44 + 92.45 +class TestHumongousCodeCacheRootsHelper { 92.46 + 92.47 + static final int n = 1000000; 92.48 + static final int[] AA = new int[n]; 92.49 + static final int[] BB = new int[n]; 92.50 + 92.51 + public static void main(String args[]) throws Exception { 92.52 + // do some work so that the compiler compiles this method, inlining the 92.53 + // reference to the integer array (which is a humonguous object) into 92.54 + // the code cache. 92.55 + for(int i = 0; i < n; i++) { 92.56 + AA[i] = 0; 92.57 + BB[i] = 0; 92.58 + } 92.59 + // trigger a GC that checks that the verification code allows humongous 92.60 + // objects with code cache roots; objects should be all live here. 92.61 + System.gc(); 92.62 + 92.63 + // deoptimize everyhing: this should make all compiled code zombies. 92.64 + WhiteBox wb = WhiteBox.getWhiteBox(); 92.65 + wb.deoptimizeAll(); 92.66 + 92.67 + // trigger a GC that checks that the verification code allows humongous 92.68 + // objects with code cache roots; objects should be all live here. 92.69 + System.gc(); 92.70 + 92.71 + // wait a little for the code cache sweeper to try to clean up zombie nmethods 92.72 + // and unregister the code roots. 92.73 + try { Thread.sleep(5000); } catch (InterruptedException ex) { } 92.74 + 92.75 + // do some work on the arrays to make sure that they need to be live after the GCs 92.76 + for(int i = 0; i < n; i++) { 92.77 + AA[i] = 1; 92.78 + BB[i] = 10; 92.79 + } 92.80 + 92.81 + System.out.println(); 92.82 + } 92.83 +} 92.84 + 92.85 +public class TestHumongousCodeCacheRoots { 92.86 + 92.87 + /** 92.88 + * Executes a class in a new VM process with the given parameters. 92.89 + * @param vmargs Arguments to the VM to run 92.90 + * @param classname Name of the class to run 92.91 + * @param arguments Arguments to the class 92.92 + * @param useTestDotJavaDotOpts Use test.java.opts as part of the VM argument string 92.93 + * @return The OutputAnalyzer with the results for the invocation. 92.94 + */ 92.95 + public static OutputAnalyzer runWhiteBoxTest(String[] vmargs, String classname, String[] arguments, boolean useTestDotJavaDotOpts) throws Exception { 92.96 + ArrayList<String> finalargs = new ArrayList<String>(); 92.97 + 92.98 + String[] whiteboxOpts = new String[] { 92.99 + "-Xbootclasspath/a:.", 92.100 + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", 92.101 + "-cp", System.getProperty("java.class.path"), 92.102 + }; 92.103 + 92.104 + if (useTestDotJavaDotOpts) { 92.105 + // System.getProperty("test.java.opts") is '' if no options is set, 92.106 + // we need to skip such a result 92.107 + String[] externalVMOpts = new String[0]; 92.108 + if (System.getProperty("test.java.opts") != null && System.getProperty("test.java.opts").length() != 0) { 92.109 + externalVMOpts = System.getProperty("test.java.opts").split(" "); 92.110 + } 92.111 + finalargs.addAll(Arrays.asList(externalVMOpts)); 92.112 + } 92.113 + 92.114 + finalargs.addAll(Arrays.asList(vmargs)); 92.115 + finalargs.addAll(Arrays.asList(whiteboxOpts)); 92.116 + finalargs.add(classname); 92.117 + finalargs.addAll(Arrays.asList(arguments)); 92.118 + 92.119 + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0])); 92.120 + OutputAnalyzer output = new OutputAnalyzer(pb.start()); 92.121 + output.shouldHaveExitValue(0); 92.122 + 92.123 + return output; 92.124 + } 92.125 + 92.126 + public static void runTest(String compiler, String[] other) throws Exception { 92.127 + ArrayList<String> joined = new ArrayList<String>(); 92.128 + joined.add(compiler); 92.129 + joined.addAll(Arrays.asList(other)); 92.130 + runWhiteBoxTest(joined.toArray(new String[0]), TestHumongousCodeCacheRootsHelper.class.getName(), 92.131 + new String[] {}, false); 92.132 + } 92.133 + 92.134 + public static void main(String[] args) throws Exception { 92.135 + final String[] baseArguments = new String[] { 92.136 + "-XX:+UseG1GC", "-XX:G1HeapRegionSize=1M", "-Xmx100M", // make sure we get a humongous region 92.137 + "-XX:+UnlockDiagnosticVMOptions", 92.138 + "-XX:InitiatingHeapOccupancyPercent=1", // strong code root marking 92.139 + "-XX:+G1VerifyHeapRegionCodeRoots", "-XX:+VerifyAfterGC", // make sure that verification is run 92.140 + "-XX:NmethodSweepFraction=1", "-XX:NmethodSweepCheckInterval=1", // make the code cache sweep more predictable 92.141 + }; 92.142 + runTest("-client", baseArguments); 92.143 + runTest("-server", baseArguments); 92.144 + } 92.145 +} 92.146 +
93.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 93.2 +++ b/test/runtime/memory/ReadFromNoaccessArea.java Thu Nov 21 12:30:35 2013 -0800 93.3 @@ -0,0 +1,80 @@ 93.4 +/* 93.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 93.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 93.7 + * 93.8 + * This code is free software; you can redistribute it and/or modify it 93.9 + * under the terms of the GNU General Public License version 2 only, as 93.10 + * published by the Free Software Foundation. 93.11 + * 93.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 93.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 93.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 93.15 + * version 2 for more details (a copy is included in the LICENSE file that 93.16 + * accompanied this code). 93.17 + * 93.18 + * You should have received a copy of the GNU General Public License version 93.19 + * 2 along with this work; if not, write to the Free Software Foundation, 93.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 93.21 + * 93.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 93.23 + * or visit www.oracle.com if you need additional information or have any 93.24 + * questions. 93.25 + */ 93.26 + 93.27 +/* 93.28 + * @test 93.29 + * @summary Test that touching noaccess area in class ReservedHeapSpace results in SIGSEGV/ACCESS_VIOLATION 93.30 + * @library /testlibrary /testlibrary/whitebox 93.31 + * @build ReadFromNoaccessArea 93.32 + * @run main ClassFileInstaller sun.hotspot.WhiteBox 93.33 + * @run main ReadFromNoaccessArea 93.34 + */ 93.35 + 93.36 +import com.oracle.java.testlibrary.*; 93.37 +import sun.hotspot.WhiteBox; 93.38 + 93.39 +public class ReadFromNoaccessArea { 93.40 + 93.41 + public static void main(String args[]) throws Exception { 93.42 + if (!Platform.is64bit()) { 93.43 + System.out.println("ReadFromNoaccessArea tests is useful only on 64bit architecture. Passing silently."); 93.44 + return; 93.45 + } 93.46 + 93.47 + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( 93.48 + "-Xbootclasspath/a:.", 93.49 + "-XX:+UnlockDiagnosticVMOptions", 93.50 + "-XX:+WhiteBoxAPI", 93.51 + "-XX:+UseCompressedOops", 93.52 + "-XX:HeapBaseMinAddress=33G", 93.53 + DummyClassWithMainTryingToReadFromNoaccessArea.class.getName()); 93.54 + 93.55 + OutputAnalyzer output = new OutputAnalyzer(pb.start()); 93.56 + System.out.println("******* Printing stdout for analysis in case of failure *******"); 93.57 + System.out.println(output.getStdout()); 93.58 + System.out.println("******* Printing stderr for analysis in case of failure *******"); 93.59 + System.out.println(output.getStderr()); 93.60 + System.out.println("***************************************************************"); 93.61 + if (output.getStdout() != null && output.getStdout().contains("WB_ReadFromNoaccessArea method is useless")) { 93.62 + // Test conditions broken. There is no protected page in ReservedHeapSpace in these circumstances. Silently passing test. 93.63 + return; 93.64 + } 93.65 + if (Platform.isWindows()) { 93.66 + output.shouldContain("EXCEPTION_ACCESS_VIOLATION"); 93.67 + } else if (Platform.isOSX()) { 93.68 + output.shouldContain("SIGBUS"); 93.69 + } else { 93.70 + output.shouldContain("SIGSEGV"); 93.71 + } 93.72 + } 93.73 + 93.74 + public static class DummyClassWithMainTryingToReadFromNoaccessArea { 93.75 + 93.76 + // This method calls whitebox method reading from noaccess area 93.77 + public static void main(String args[]) throws Exception { 93.78 + WhiteBox.getWhiteBox().readFromNoaccessArea(); 93.79 + throw new Exception("Call of readFromNoaccessArea succeeded! This is wrong. Crash expected. Test failed."); 93.80 + } 93.81 + } 93.82 + 93.83 +}
94.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 94.2 +++ b/test/runtime/memory/RunUnitTestsConcurrently.java Thu Nov 21 12:30:35 2013 -0800 94.3 @@ -0,0 +1,74 @@ 94.4 +/* 94.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 94.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 94.7 + * 94.8 + * This code is free software; you can redistribute it and/or modify it 94.9 + * under the terms of the GNU General Public License version 2 only, as 94.10 + * published by the Free Software Foundation. 94.11 + * 94.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 94.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 94.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 94.15 + * version 2 for more details (a copy is included in the LICENSE file that 94.16 + * accompanied this code). 94.17 + * 94.18 + * You should have received a copy of the GNU General Public License version 94.19 + * 2 along with this work; if not, write to the Free Software Foundation, 94.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 94.21 + * 94.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 94.23 + * or visit www.oracle.com if you need additional information or have any 94.24 + * questions. 94.25 + */ 94.26 + 94.27 +/* 94.28 + * @test 94.29 + * @summary Test launches unit tests inside vm concurrently 94.30 + * @library /testlibrary /testlibrary/whitebox 94.31 + * @build RunUnitTestsConcurrently 94.32 + * @run main ClassFileInstaller sun.hotspot.WhiteBox 94.33 + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI RunUnitTestsConcurrently 30 15000 94.34 + */ 94.35 + 94.36 +import com.oracle.java.testlibrary.*; 94.37 +import sun.hotspot.WhiteBox; 94.38 + 94.39 +public class RunUnitTestsConcurrently { 94.40 + 94.41 + private static WhiteBox wb; 94.42 + private static long timeout; 94.43 + private static long timeStamp; 94.44 + 94.45 + public static class Worker implements Runnable { 94.46 + @Override 94.47 + public void run() { 94.48 + while (System.currentTimeMillis() - timeStamp < timeout) { 94.49 + WhiteBox.getWhiteBox().runMemoryUnitTests(); 94.50 + } 94.51 + } 94.52 + } 94.53 + 94.54 + public static void main(String[] args) throws InterruptedException { 94.55 + if (!Platform.isDebugBuild() || !Platform.is64bit()) { 94.56 + return; 94.57 + } 94.58 + wb = WhiteBox.getWhiteBox(); 94.59 + System.out.println("Starting threads"); 94.60 + 94.61 + int threads = Integer.valueOf(args[0]); 94.62 + timeout = Long.valueOf(args[1]); 94.63 + 94.64 + timeStamp = System.currentTimeMillis(); 94.65 + 94.66 + Thread[] threadsArray = new Thread[threads]; 94.67 + for (int i = 0; i < threads; i++) { 94.68 + threadsArray[i] = new Thread(new Worker()); 94.69 + threadsArray[i].start(); 94.70 + } 94.71 + for (int i = 0; i < threads; i++) { 94.72 + threadsArray[i].join(); 94.73 + } 94.74 + 94.75 + System.out.println("Quitting test."); 94.76 + } 94.77 +}
95.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 95.2 +++ b/test/runtime/memory/StressVirtualSpaceResize.java Thu Nov 21 12:30:35 2013 -0800 95.3 @@ -0,0 +1,41 @@ 95.4 +/* 95.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 95.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 95.7 + * 95.8 + * This code is free software; you can redistribute it and/or modify it 95.9 + * under the terms of the GNU General Public License version 2 only, as 95.10 + * published by the Free Software Foundation. 95.11 + * 95.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 95.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 95.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 95.15 + * version 2 for more details (a copy is included in the LICENSE file that 95.16 + * accompanied this code). 95.17 + * 95.18 + * You should have received a copy of the GNU General Public License version 95.19 + * 2 along with this work; if not, write to the Free Software Foundation, 95.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 95.21 + * 95.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 95.23 + * or visit www.oracle.com if you need additional information or have any 95.24 + * questions. 95.25 + */ 95.26 + 95.27 +/* 95.28 + * @test 95.29 + * @summary Stress test that expands/shrinks VirtualSpace 95.30 + * @library /testlibrary /testlibrary/whitebox 95.31 + * @build StressVirtualSpaceResize 95.32 + * @run main ClassFileInstaller sun.hotspot.WhiteBox 95.33 + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI StressVirtualSpaceResize 95.34 + */ 95.35 + 95.36 +import sun.hotspot.WhiteBox; 95.37 + 95.38 +public class StressVirtualSpaceResize { 95.39 + 95.40 + public static void main(String args[]) throws Exception { 95.41 + if (WhiteBox.getWhiteBox().stressVirtualSpaceResize(1000, 0xffffL, 0xffffL) != 0) 95.42 + throw new RuntimeException("Whitebox method stressVirtualSpaceResize returned non zero exit code"); 95.43 + } 95.44 +}
96.1 --- a/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java Wed Nov 20 11:08:09 2013 -0800 96.2 +++ b/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java Thu Nov 21 12:30:35 2013 -0800 96.3 @@ -144,4 +144,10 @@ 96.4 96.5 // force Full GC 96.6 public native void fullGC(); 96.7 + 96.8 + // Tests on ReservedSpace/VirtualSpace classes 96.9 + public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations); 96.10 + public native void runMemoryUnitTests(); 96.11 + public native void readFromNoaccessArea(); 96.12 + 96.13 }