Commit 0e0fad1
authored
ZJIT: Specialize OPTIMIZED_METHOD_TYPE_CALL (ruby#15859)
Closes: Shopify#865
## Benchmark
### lobsters
- wall clock time
- before patch: Average of last 10, non-warmup iters: 809ms
- after patch: Average of last 10, non-warmup iters: 754ms
- zjit stats below
<details>
<summary>before patch</summary>
```
***ZJIT: Printing ZJIT statistics on exit***
Top-20 not inlined C methods (54.9% of total 18,003,698):
Hash#fetch: 3,184,106 (17.7%)
Regexp#match?: 707,148 ( 3.9%)
Hash#key?: 689,879 ( 3.8%)
String#sub!: 489,841 ( 2.7%)
Array#include?: 470,648 ( 2.6%)
Set#include?: 397,520 ( 2.2%)
String#<<: 396,279 ( 2.2%)
String#start_with?: 373,666 ( 2.1%)
Kernel#dup: 352,617 ( 2.0%)
Array#any?: 350,454 ( 1.9%)
Hash#delete: 331,784 ( 1.8%)
String.new: 307,248 ( 1.7%)
Integer#===: 262,336 ( 1.5%)
Symbol#end_with?: 255,538 ( 1.4%)
Kernel#is_a?: 247,292 ( 1.4%)
Process.clock_gettime: 221,588 ( 1.2%)
Integer#>: 219,718 ( 1.2%)
String#match?: 216,903 ( 1.2%)
String#downcase: 213,108 ( 1.2%)
Integer#<=: 202,617 ( 1.1%)
Top-20 calls to C functions from JIT code (80.3% of total 130,255,689):
rb_vm_opt_send_without_block: 28,329,698 (21.7%)
rb_hash_aref: 8,992,191 ( 6.9%)
rb_vm_env_write: 8,526,087 ( 6.5%)
rb_vm_send: 8,337,448 ( 6.4%)
rb_zjit_writebarrier_check_immediate: 7,809,310 ( 6.0%)
rb_obj_is_kind_of: 6,098,929 ( 4.7%)
rb_vm_getinstancevariable: 5,783,055 ( 4.4%)
rb_vm_invokesuper: 5,038,443 ( 3.9%)
rb_ivar_get_at_no_ractor_check: 4,762,093 ( 3.7%)
rb_ary_entry: 4,283,966 ( 3.3%)
rb_hash_aset: 2,429,862 ( 1.9%)
rb_vm_setinstancevariable: 2,343,571 ( 1.8%)
rb_vm_opt_getconstant_path: 2,284,810 ( 1.8%)
Hash#fetch: 1,778,515 ( 1.4%)
fetch: 1,405,591 ( 1.1%)
rb_vm_invokeblock: 1,381,332 ( 1.1%)
rb_str_buf_append: 1,362,272 ( 1.0%)
rb_ec_ary_new_from_values: 1,324,997 ( 1.0%)
rb_class_allocate_instance: 1,288,936 ( 1.0%)
rb_hash_new_with_size: 998,628 ( 0.8%)
Top-2 not optimized method types for send (100.0% of total 4,896,274):
iseq: 4,893,452 (99.9%)
null: 2,822 ( 0.1%)
Top-4 not optimized method types for send_without_block (100.0% of total 782,296):
optimized_send: 479,562 (61.3%)
optimized_call: 256,609 (32.8%)
null: 41,967 ( 5.4%)
optimized_block_call: 4,158 ( 0.5%)
Top-4 instructions with uncategorized fallback reason (100.0% of total 7,250,555):
invokesuper: 5,038,443 (69.5%)
invokeblock: 1,381,332 (19.1%)
sendforward: 798,924 (11.0%)
opt_send_without_block: 31,856 ( 0.4%)
Top-18 send fallback reasons (100.0% of total 43,885,845):
send_without_block_polymorphic: 18,533,639 (42.2%)
uncategorized: 7,250,555 (16.5%)
send_not_optimized_method_type: 4,896,274 (11.2%)
send_without_block_no_profiles: 4,741,871 (10.8%)
send_no_profiles: 2,865,577 ( 6.5%)
one_or_more_complex_arg_pass: 2,825,240 ( 6.4%)
send_without_block_not_optimized_method_type_optimized: 740,329 ( 1.7%)
send_without_block_megamorphic: 709,818 ( 1.6%)
send_polymorphic: 541,186 ( 1.2%)
send_without_block_not_optimized_need_permission: 382,622 ( 0.9%)
too_many_args_for_lir: 173,244 ( 0.4%)
argc_param_mismatch: 50,382 ( 0.1%)
send_without_block_not_optimized_method_type: 41,967 ( 0.1%)
send_without_block_cfunc_array_variadic: 36,302 ( 0.1%)
obj_to_string_not_string: 34,169 ( 0.1%)
send_without_block_direct_keyword_mismatch: 32,436 ( 0.1%)
send_megamorphic: 28,613 ( 0.1%)
ccall_with_frame_too_many_args: 1,621 ( 0.0%)
Top-4 setivar fallback reasons (100.0% of total 2,343,571):
not_monomorphic: 2,120,856 (90.5%)
not_t_object: 125,163 ( 5.3%)
too_complex: 97,531 ( 4.2%)
new_shape_needs_extension: 21 ( 0.0%)
Top-2 getivar fallback reasons (100.0% of total 5,908,168):
not_monomorphic: 5,658,909 (95.8%)
too_complex: 249,259 ( 4.2%)
Top-3 definedivar fallback reasons (100.0% of total 405,079):
not_monomorphic: 397,150 (98.0%)
too_complex: 5,122 ( 1.3%)
not_t_object: 2,807 ( 0.7%)
Top-6 invokeblock handler (100.0% of total 1,381,332):
monomorphic_iseq: 685,359 (49.6%)
polymorphic: 521,992 (37.8%)
monomorphic_other: 104,640 ( 7.6%)
monomorphic_ifunc: 55,505 ( 4.0%)
no_profiles: 9,164 ( 0.7%)
megamorphic: 4,672 ( 0.3%)
Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,097,538):
param_kw_opt: 1,333,367 (43.0%)
param_block: 632,885 (20.4%)
param_forwardable: 600,601 (19.4%)
param_rest: 329,020 (10.6%)
param_kwrest: 119,971 ( 3.9%)
caller_kw_splat: 39,001 ( 1.3%)
caller_splat: 36,785 ( 1.2%)
caller_blockarg: 5,798 ( 0.2%)
caller_kwarg: 110 ( 0.0%)
Top-1 compile error reasons (100.0% of total 186,900):
exception_handler: 186,900 (100.0%)
Top-7 unhandled YARV insns (100.0% of total 186,598):
getblockparam: 99,414 (53.3%)
invokesuperforward: 81,667 (43.8%)
setblockparam: 2,837 ( 1.5%)
getconstant: 1,537 ( 0.8%)
checkmatch: 616 ( 0.3%)
expandarray: 360 ( 0.2%)
once: 167 ( 0.1%)
Top-3 unhandled HIR insns (100.0% of total 236,962):
throw: 198,474 (83.8%)
invokebuiltin: 35,767 (15.1%)
array_max: 2,721 ( 1.1%)
Top-19 side exit reasons (100.0% of total 15,427,184):
guard_type_failure: 6,865,696 (44.5%)
guard_shape_failure: 6,779,586 (43.9%)
block_param_proxy_not_iseq_or_ifunc: 1,030,319 ( 6.7%)
unhandled_hir_insn: 236,962 ( 1.5%)
compile_error: 186,900 ( 1.2%)
unhandled_yarv_insn: 186,598 ( 1.2%)
fixnum_mult_overflow: 50,739 ( 0.3%)
block_param_proxy_modified: 28,119 ( 0.2%)
patchpoint_no_singleton_class: 14,903 ( 0.1%)
unhandled_newarray_send_pack: 14,481 ( 0.1%)
fixnum_lshift_overflow: 10,085 ( 0.1%)
patchpoint_stable_constant_names: 9,198 ( 0.1%)
patchpoint_no_ep_escape: 7,815 ( 0.1%)
expandarray_failure: 4,533 ( 0.0%)
patchpoint_method_redefined: 662 ( 0.0%)
obj_to_string_fallback: 277 ( 0.0%)
guard_less_failure: 163 ( 0.0%)
interrupt: 128 ( 0.0%)
guard_greater_eq_failure: 20 ( 0.0%)
send_count: 151,233,937
dynamic_send_count: 43,885,845 (29.0%)
optimized_send_count: 107,348,092 (71.0%)
dynamic_setivar_count: 2,343,571 ( 1.5%)
dynamic_getivar_count: 5,908,168 ( 3.9%)
dynamic_definedivar_count: 405,079 ( 0.3%)
iseq_optimized_send_count: 37,324,023 (24.7%)
inline_cfunc_optimized_send_count: 46,056,028 (30.5%)
inline_iseq_optimized_send_count: 3,756,875 ( 2.5%)
non_variadic_cfunc_optimized_send_count: 11,618,909 ( 7.7%)
variadic_cfunc_optimized_send_count: 8,592,257 ( 5.7%)
compiled_iseq_count: 5,289
failed_iseq_count: 0
compile_time: 1,664ms
profile_time: 13ms
gc_time: 20ms
invalidation_time: 479ms
vm_write_pc_count: 127,571,422
vm_write_sp_count: 127,571,422
vm_write_locals_count: 122,781,971
vm_write_stack_count: 122,781,971
vm_write_to_parent_iseq_local_count: 689,945
vm_read_from_parent_iseq_local_count: 14,721,820
guard_type_count: 167,633,896
guard_type_exit_ratio: 4.1%
guard_shape_count: 0
code_region_bytes: 38,912,000
zjit_alloc_bytes: 40,542,102
total_mem_bytes: 79,454,102
side_exit_count: 15,427,184
total_insn_count: 927,373,567
vm_insn_count: 156,976,359
zjit_insn_count: 770,397,208
ratio_in_zjit: 83.1%
```
</details>
<details>
<summary>after patch</summary>
```
***ZJIT: Printing ZJIT statistics on exit***
Top-20 not inlined C methods (55.0% of total 18,012,630):
Hash#fetch: 3,184,101 (17.7%)
Regexp#match?: 707,150 ( 3.9%)
Hash#key?: 689,871 ( 3.8%)
String#sub!: 489,841 ( 2.7%)
Array#include?: 470,648 ( 2.6%)
Set#include?: 397,520 ( 2.2%)
String#<<: 396,279 ( 2.2%)
String#start_with?: 382,538 ( 2.1%)
Kernel#dup: 352,617 ( 2.0%)
Array#any?: 350,454 ( 1.9%)
Hash#delete: 331,802 ( 1.8%)
String.new: 307,248 ( 1.7%)
Integer#===: 262,336 ( 1.5%)
Symbol#end_with?: 255,540 ( 1.4%)
Kernel#is_a?: 247,292 ( 1.4%)
Process.clock_gettime: 221,588 ( 1.2%)
Integer#>: 219,718 ( 1.2%)
String#match?: 216,905 ( 1.2%)
String#downcase: 213,107 ( 1.2%)
Integer#<=: 202,617 ( 1.1%)
Top-20 calls to C functions from JIT code (80.1% of total 130,218,934):
rb_vm_opt_send_without_block: 28,073,153 (21.6%)
rb_hash_aref: 8,992,167 ( 6.9%)
rb_vm_env_write: 8,526,089 ( 6.5%)
rb_vm_send: 8,337,453 ( 6.4%)
rb_zjit_writebarrier_check_immediate: 7,786,426 ( 6.0%)
rb_obj_is_kind_of: 6,098,927 ( 4.7%)
rb_vm_getinstancevariable: 5,783,053 ( 4.4%)
rb_vm_invokesuper: 5,038,444 ( 3.9%)
rb_ivar_get_at_no_ractor_check: 4,762,093 ( 3.7%)
rb_ary_entry: 4,283,965 ( 3.3%)
rb_hash_aset: 2,429,864 ( 1.9%)
rb_vm_setinstancevariable: 2,343,573 ( 1.8%)
rb_vm_opt_getconstant_path: 2,284,809 ( 1.8%)
Hash#fetch: 1,778,510 ( 1.4%)
fetch: 1,405,591 ( 1.1%)
rb_vm_invokeblock: 1,381,329 ( 1.1%)
rb_str_buf_append: 1,362,272 ( 1.0%)
rb_ec_ary_new_from_values: 1,325,005 ( 1.0%)
rb_class_allocate_instance: 1,288,944 ( 1.0%)
rb_hash_new_with_size: 998,629 ( 0.8%)
Top-2 not optimized method types for send (100.0% of total 4,896,276):
iseq: 4,893,454 (99.9%)
null: 2,822 ( 0.1%)
Top-3 not optimized method types for send_without_block (100.0% of total 525,687):
optimized_send: 479,562 (91.2%)
null: 41,967 ( 8.0%)
optimized_block_call: 4,158 ( 0.8%)
Top-4 instructions with uncategorized fallback reason (100.0% of total 7,250,556):
invokesuper: 5,038,444 (69.5%)
invokeblock: 1,381,329 (19.1%)
sendforward: 798,924 (11.0%)
opt_send_without_block: 31,859 ( 0.4%)
Top-18 send fallback reasons (100.0% of total 43,629,303):
send_without_block_polymorphic: 18,533,669 (42.5%)
uncategorized: 7,250,556 (16.6%)
send_not_optimized_method_type: 4,896,276 (11.2%)
send_without_block_no_profiles: 4,741,899 (10.9%)
send_no_profiles: 2,865,579 ( 6.6%)
one_or_more_complex_arg_pass: 2,825,242 ( 6.5%)
send_without_block_megamorphic: 709,818 ( 1.6%)
send_polymorphic: 541,187 ( 1.2%)
send_without_block_not_optimized_method_type_optimized: 483,720 ( 1.1%)
send_without_block_not_optimized_need_permission: 382,623 ( 0.9%)
too_many_args_for_lir: 173,244 ( 0.4%)
argc_param_mismatch: 50,382 ( 0.1%)
send_without_block_not_optimized_method_type: 41,967 ( 0.1%)
send_without_block_cfunc_array_variadic: 36,302 ( 0.1%)
obj_to_string_not_string: 34,169 ( 0.1%)
send_without_block_direct_keyword_mismatch: 32,436 ( 0.1%)
send_megamorphic: 28,613 ( 0.1%)
ccall_with_frame_too_many_args: 1,621 ( 0.0%)
Top-4 setivar fallback reasons (100.0% of total 2,343,573):
not_monomorphic: 2,120,858 (90.5%)
not_t_object: 125,163 ( 5.3%)
too_complex: 97,531 ( 4.2%)
new_shape_needs_extension: 21 ( 0.0%)
Top-2 getivar fallback reasons (100.0% of total 5,908,165):
not_monomorphic: 5,658,912 (95.8%)
too_complex: 249,253 ( 4.2%)
Top-3 definedivar fallback reasons (100.0% of total 405,079):
not_monomorphic: 397,150 (98.0%)
too_complex: 5,122 ( 1.3%)
not_t_object: 2,807 ( 0.7%)
Top-6 invokeblock handler (100.0% of total 1,381,329):
monomorphic_iseq: 685,363 (49.6%)
polymorphic: 521,984 (37.8%)
monomorphic_other: 104,640 ( 7.6%)
monomorphic_ifunc: 55,505 ( 4.0%)
no_profiles: 9,164 ( 0.7%)
megamorphic: 4,673 ( 0.3%)
Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,094,719):
param_kw_opt: 1,333,367 (43.1%)
param_block: 632,886 (20.5%)
param_forwardable: 600,605 (19.4%)
param_rest: 329,019 (10.6%)
param_kwrest: 119,971 ( 3.9%)
caller_kw_splat: 39,001 ( 1.3%)
caller_splat: 33,962 ( 1.1%)
caller_blockarg: 5,798 ( 0.2%)
caller_kwarg: 110 ( 0.0%)
Top-1 compile error reasons (100.0% of total 186,917):
exception_handler: 186,917 (100.0%)
Top-7 unhandled YARV insns (100.0% of total 186,598):
getblockparam: 99,414 (53.3%)
invokesuperforward: 81,667 (43.8%)
setblockparam: 2,837 ( 1.5%)
getconstant: 1,537 ( 0.8%)
checkmatch: 616 ( 0.3%)
expandarray: 360 ( 0.2%)
once: 167 ( 0.1%)
Top-3 unhandled HIR insns (100.0% of total 236,969):
throw: 198,475 (83.8%)
invokebuiltin: 35,773 (15.1%)
array_max: 2,721 ( 1.1%)
Top-19 side exit reasons (100.0% of total 15,450,102):
guard_type_failure: 6,888,596 (44.6%)
guard_shape_failure: 6,779,586 (43.9%)
block_param_proxy_not_iseq_or_ifunc: 1,030,319 ( 6.7%)
unhandled_hir_insn: 236,969 ( 1.5%)
compile_error: 186,917 ( 1.2%)
unhandled_yarv_insn: 186,598 ( 1.2%)
fixnum_mult_overflow: 50,739 ( 0.3%)
block_param_proxy_modified: 28,119 ( 0.2%)
patchpoint_no_singleton_class: 14,903 ( 0.1%)
unhandled_newarray_send_pack: 14,481 ( 0.1%)
fixnum_lshift_overflow: 10,085 ( 0.1%)
patchpoint_stable_constant_names: 9,198 ( 0.1%)
patchpoint_no_ep_escape: 7,815 ( 0.1%)
expandarray_failure: 4,533 ( 0.0%)
patchpoint_method_redefined: 662 ( 0.0%)
obj_to_string_fallback: 277 ( 0.0%)
guard_less_failure: 163 ( 0.0%)
interrupt: 122 ( 0.0%)
guard_greater_eq_failure: 20 ( 0.0%)
send_count: 150,986,368
dynamic_send_count: 43,629,303 (28.9%)
optimized_send_count: 107,357,065 (71.1%)
dynamic_setivar_count: 2,343,573 ( 1.6%)
dynamic_getivar_count: 5,908,165 ( 3.9%)
dynamic_definedivar_count: 405,079 ( 0.3%)
iseq_optimized_send_count: 37,324,039 (24.7%)
inline_cfunc_optimized_send_count: 46,056,046 (30.5%)
inline_iseq_optimized_send_count: 3,756,881 ( 2.5%)
non_variadic_cfunc_optimized_send_count: 11,618,958 ( 7.7%)
variadic_cfunc_optimized_send_count: 8,601,141 ( 5.7%)
compiled_iseq_count: 5,289
failed_iseq_count: 0
compile_time: 1,700ms
profile_time: 13ms
gc_time: 21ms
invalidation_time: 519ms
vm_write_pc_count: 127,557,549
vm_write_sp_count: 127,557,549
vm_write_locals_count: 122,768,084
vm_write_stack_count: 122,768,084
vm_write_to_parent_iseq_local_count: 689,953
vm_read_from_parent_iseq_local_count: 14,730,705
guard_type_count: 167,853,730
guard_type_exit_ratio: 4.1%
guard_shape_count: 0
code_region_bytes: 38,928,384
zjit_alloc_bytes: 41,103,415
total_mem_bytes: 80,031,799
side_exit_count: 15,450,102
total_insn_count: 927,432,364
vm_insn_count: 157,182,251
zjit_insn_count: 770,250,113
ratio_in_zjit: 83.1%
```
</details>1 parent 8a586af commit 0e0fad1
File tree
8 files changed
+361
-24
lines changed- test/ruby
- yjit/src
- zjit/src
- hir
8 files changed
+361
-24
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
194 | 202 | | |
195 | 203 | | |
196 | 204 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
470 | 470 | | |
471 | 471 | | |
472 | 472 | | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
473 | 541 | | |
474 | 542 | | |
475 | 543 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
223 | 223 | | |
224 | 224 | | |
225 | 225 | | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | 226 | | |
235 | 227 | | |
236 | 228 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
404 | 404 | | |
405 | 405 | | |
406 | 406 | | |
| 407 | + | |
407 | 408 | | |
408 | 409 | | |
409 | 410 | | |
| |||
1497 | 1498 | | |
1498 | 1499 | | |
1499 | 1500 | | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
| 1504 | + | |
| 1505 | + | |
| 1506 | + | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
| 1520 | + | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
| 1524 | + | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
| 1529 | + | |
1500 | 1530 | | |
1501 | 1531 | | |
1502 | 1532 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
932 | 932 | | |
933 | 933 | | |
934 | 934 | | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
935 | 942 | | |
936 | 943 | | |
937 | 944 | | |
| |||
1452 | 1459 | | |
1453 | 1460 | | |
1454 | 1461 | | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
| 1465 | + | |
| 1466 | + | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
1455 | 1472 | | |
1456 | 1473 | | |
1457 | 1474 | | |
| |||
2228 | 2245 | | |
2229 | 2246 | | |
2230 | 2247 | | |
| 2248 | + | |
| 2249 | + | |
| 2250 | + | |
| 2251 | + | |
| 2252 | + | |
| 2253 | + | |
2231 | 2254 | | |
2232 | 2255 | | |
2233 | 2256 | | |
| |||
2416 | 2439 | | |
2417 | 2440 | | |
2418 | 2441 | | |
| 2442 | + | |
2419 | 2443 | | |
2420 | 2444 | | |
2421 | 2445 | | |
| |||
2828 | 2852 | | |
2829 | 2853 | | |
2830 | 2854 | | |
2831 | | - | |
2832 | | - | |
2833 | 2855 | | |
2834 | | - | |
2835 | | - | |
2836 | | - | |
2837 | | - | |
2838 | | - | |
2839 | 2856 | | |
2840 | 2857 | | |
2841 | 2858 | | |
| |||
2863 | 2880 | | |
2864 | 2881 | | |
2865 | 2882 | | |
| 2883 | + | |
| 2884 | + | |
| 2885 | + | |
| 2886 | + | |
| 2887 | + | |
| 2888 | + | |
| 2889 | + | |
| 2890 | + | |
2866 | 2891 | | |
2867 | 2892 | | |
2868 | 2893 | | |
| |||
2993 | 3018 | | |
2994 | 3019 | | |
2995 | 3020 | | |
| 3021 | + | |
| 3022 | + | |
| 3023 | + | |
| 3024 | + | |
| 3025 | + | |
| 3026 | + | |
| 3027 | + | |
| 3028 | + | |
| 3029 | + | |
| 3030 | + | |
| 3031 | + | |
| 3032 | + | |
| 3033 | + | |
| 3034 | + | |
| 3035 | + | |
| 3036 | + | |
| 3037 | + | |
| 3038 | + | |
| 3039 | + | |
2996 | 3040 | | |
| 3041 | + | |
| 3042 | + | |
| 3043 | + | |
| 3044 | + | |
| 3045 | + | |
2997 | 3046 | | |
2998 | 3047 | | |
2999 | 3048 | | |
| |||
4416 | 4465 | | |
4417 | 4466 | | |
4418 | 4467 | | |
4419 | | - | |
| 4468 | + | |
| 4469 | + | |
4420 | 4470 | | |
4421 | 4471 | | |
4422 | 4472 | | |
| |||
5041 | 5091 | | |
5042 | 5092 | | |
5043 | 5093 | | |
| 5094 | + | |
5044 | 5095 | | |
5045 | 5096 | | |
5046 | 5097 | | |
| |||
0 commit comments